summaryrefslogtreecommitdiff
path: root/spec/unit/cli/scan_spec.rb
diff options
context:
space:
mode:
authormo khan <mo.khan@gmail.com>2020-05-22 09:28:44 -0600
committermo khan <mo.khan@gmail.com>2020-05-25 18:31:06 -0600
commit1ca2a951d05480759af1668ed586793ff5d36a26 (patch)
treeca16267ec26b1d8c3b1a1346a1ab9e8689992116 /spec/unit/cli/scan_spec.rb
parentf8092c7f0ad26d04c8137b3b7d4faea5508a53ce (diff)
Convert from using string paths to using Pathname
* Extract a ./bin/run script * Extract defintion for NEWLINE * Add specs for matching yarn.lock * Add specs for Report * Convert package_manager to pathname * Display path in report * matches? to match?
Diffstat (limited to 'spec/unit/cli/scan_spec.rb')
-rw-r--r--spec/unit/cli/scan_spec.rb110
1 files changed, 20 insertions, 90 deletions
diff --git a/spec/unit/cli/scan_spec.rb b/spec/unit/cli/scan_spec.rb
index dff893f..7e33e7f 100644
--- a/spec/unit/cli/scan_spec.rb
+++ b/spec/unit/cli/scan_spec.rb
@@ -1,99 +1,29 @@
# frozen_string_literal: true
RSpec.describe Spandx::Cli::Commands::Scan do
- subject { described_class.new(lockfile, options) }
-
- let(:output) { StringIO.new }
- let(:lockfile) { '.' }
- let(:options) { { format: 'json' } }
-
- before do
- stub_request(:get, Spandx::Spdx::Gateway::URL)
- .to_return(status: 200, body: IO.read(fixture_file('spdx/json/licenses.json')))
- end
-
- context 'when scanning a directory' do
- let(:lockfile) { fixture_file('bundler/') }
- let(:result) { JSON.parse(output.string) }
-
- before do
- VCR.use_cassette('scan-directory') do
- subject.execute(output: output)
- end
- end
-
- specify { expect(result['dependencies'].count).to be(1) }
- specify { expect(result).to include('version' => '1.0') }
- specify { expect(result['dependencies']).to match_array([{ 'name' => 'net-hippie', 'version' => '0.2.7', 'licenses' => ['MIT'] }]) }
- end
-
- context 'when recursively scanning a directory' do
- let(:lockfile) { fixture_file('.') }
- let(:options) { { 'recursive' => true, format: 'table' } }
- let(:result) { output.string }
-
- before do
- VCR.use_cassette('scan-directory-recursively') do
- subject.execute(output: output)
- end
- end
-
- it { expect(result).to eql(fixture_file_content('recursive.expected')) }
- 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)
+ RSpec.shared_examples 'scan' do |path|
+ context "when scanning #{path}" do
+ subject { described_class.new(lockfile, options) }
+
+ let(:lockfile) { fixture_file(path) }
+ let(:output) { StringIO.new }
+ let(:options) { { format: 'table', show_progress: false, recursive: true } }
+
+ before do
+ stub_request(:get, Spandx::Spdx::Gateway::URL)
+ .to_return(status: 200, body: fixture_file('spdx/json/licenses.json').read)
+ VCR.use_cassette(lockfile.basename) do
+ subject.execute(output: output)
+ end
end
- end
-
- specify { expect(result).to include('version' => '1.0') }
- specify { expect(result['dependencies']).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
+ it { expect(output.string).to eql(IO.read("#{lockfile}.expected")) }
end
-
- specify { expect(result).to include('version' => '1.0') }
- specify { expect(result['dependencies']).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['dependencies']).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['dependencies']).to include('name' => 'NHibernate', 'version' => '5.2.6', 'licenses' => ['LGPL-2.1-only']) }
- end
+ include_examples 'scan', '.'
+ include_examples 'scan', 'bundler/Gemfile.lock'
+ include_examples 'scan', 'bundler/gems.lock'
+ include_examples 'scan', 'pip/Pipfile.lock'
+ include_examples 'scan', 'nuget/packages.config'
end