diff options
| author | mo khan <mo.khan@gmail.com> | 2020-03-03 10:18:07 -0700 |
|---|---|---|
| committer | mo khan <mo.khan@gmail.com> | 2020-03-03 10:18:07 -0700 |
| commit | b10053c7c14c3312f79a6d476b676d0d647d66cb (patch) | |
| tree | b76e1f5a3d0727e0a72b021d7fa1131af85afce5 /spec/unit/cli/scan_spec.rb | |
| parent | 9273188c9abceb4675a32cfbdc40760a454b479d (diff) | |
Extract cli namespace
Diffstat (limited to 'spec/unit/cli/scan_spec.rb')
| -rw-r--r-- | spec/unit/cli/scan_spec.rb | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/spec/unit/cli/scan_spec.rb b/spec/unit/cli/scan_spec.rb new file mode 100644 index 0000000..e79986c --- /dev/null +++ b/spec/unit/cli/scan_spec.rb @@ -0,0 +1,80 @@ +# frozen_string_literal: true + +RSpec.describe Spandx::Cli::Commands::Scan do + subject { described_class.new(lockfile, options) } + + let(:output) { StringIO.new } + let(:lockfile) { nil } + let(:options) { {} } + + before do + stub_request(:get, Spandx::Gateways::Spdx::URL) + .to_return(status: 200, body: IO.read(fixture_file('spdx/json/licenses.json'))) + end + + it 'executes `scan` command successfully' do + subject.execute(output: output) + + expect(output.string).to eq("OK\n") + end + + context 'when scanning Gemfile.lock' do + let(:lockfile) { fixture_file('bundler/Gemfile.lock') } + let(:result) { JSON.parse(output.string) } + + before do + VCR.use_cassette(File.basename(lockfile)) do + subject.execute(output: output) + end + end + + specify { expect(result).to include('version' => '1.0') } + specify { expect(result['packages']).to include('name' => 'net-hippie', 'version' => '0.2.7', 'licenses' => ['MIT']) } + end + + context 'when scanning gems.lock' do + let(:lockfile) { fixture_file('bundler/gems.lock') } + let(:result) { JSON.parse(output.string) } + + before do + VCR.use_cassette(File.basename(lockfile)) do + subject.execute(output: output) + end + end + + specify { expect(result).to include('version' => '1.0') } + specify { expect(result['packages']).to include('name' => 'net-hippie', 'version' => '0.2.7', 'licenses' => ['MIT']) } + end + + context 'when scanning Pipfile.lock' do + let(:lockfile) { fixture_file('pip/Pipfile.lock') } + let(:result) { JSON.parse(output.string) } + + before do + VCR.use_cassette(File.basename(lockfile)) do + subject.execute(output: output) + end + end + + specify { expect(result).to include('version' => '1.0') } + specify { expect(result['packages']).to include('name' => 'six', 'version' => '1.13.0', 'licenses' => ['MIT']) } + end + + context 'when scanning a packages.config' do + let(:lockfile) { fixture_file('nuget/packages.config') } + let(:result) { JSON.parse(output.string) } + + before do + VCR.use_cassette(File.basename(lockfile)) do + subject.execute(output: output) + end + end + + specify { expect(result).to include('version' => '1.0') } + specify { expect(result['packages']).to include('name' => 'NHibernate', 'version' => '5.2.6', 'licenses' => ['LGPL-2.1-only']) } + pending { expect(result['packages']).to include('name' => 'Antlr3.Runtime', 'version' => '', 'licenses' => ['']) } + pending { expect(result['packages']).to include('name' => 'Iesi.Collections', 'version' => '', 'licenses' => ['']) } + pending { expect(result['packages']).to include('name' => 'Remotion.Linq', 'version' => '', 'licenses' => ['']) } + pending { expect(result['packages']).to include('name' => 'Remotion.Linq.EagerFetching', 'version' => '', 'licenses' => ['']) } + end +end |
