summaryrefslogtreecommitdiff
path: root/spec/support/shared
diff options
context:
space:
mode:
authormo khan <mo.khan@gmail.com>2020-09-16 16:55:47 -0600
committermo khan <mo.khan@gmail.com>2020-09-16 16:55:47 -0600
commit46b002a96345ce18b0f7a95ef00fca1c34cb9298 (patch)
tree439e5f5c032028325e12458348f6ec545d684066 /spec/support/shared
parent5ee9702d444039efe088a524d0213f7c29a0dff1 (diff)
test: scan java-maven test project
Diffstat (limited to 'spec/support/shared')
-rw-r--r--spec/support/shared/with_expected.rb16
-rw-r--r--spec/support/shared/with_scanner.rb30
2 files changed, 46 insertions, 0 deletions
diff --git a/spec/support/shared/with_expected.rb b/spec/support/shared/with_expected.rb
new file mode 100644
index 0000000..be4d7cc
--- /dev/null
+++ b/spec/support/shared/with_expected.rb
@@ -0,0 +1,16 @@
+# frozen_string_literal: true
+
+RSpec.shared_examples "with expected" do |language, package_manager, version, branch = 'master'|
+ context "when generating a report for #{package_manager}" do
+ let(:git_url) { "https://gitlab.com/gitlab-org/security-products/tests/#{language}-#{package_manager}.git" }
+ let(:git_branch) { branch }
+ let(:expected_content) { JSON.parse(fixture_file_content("expected/#{language}/#{package_manager}/#{branch}/v#{version}.json")) }
+
+ pending do
+ actual_pretty = JSON.pretty_generate(subject.to_h)
+ expected_pretty = JSON.pretty_generate(expected_content)
+
+ expect(actual_pretty).to eq(expected_pretty)
+ end
+ end
+end
diff --git a/spec/support/shared/with_scanner.rb b/spec/support/shared/with_scanner.rb
new file mode 100644
index 0000000..fe88496
--- /dev/null
+++ b/spec/support/shared/with_scanner.rb
@@ -0,0 +1,30 @@
+# frozen_string_literal: true
+
+RSpec.shared_context 'with scanner' do
+ subject { project.report_for(type: report_type) }
+
+ let(:docker) { Docker.new(pwd: Pathname.pwd.join("src/#{scanner}")) }
+ let(:docker_image) { "#{scanner}:latest" }
+ let(:scanner) { raise "`scanner` not specified. Choose: #{Pathname.pwd.glob('src/*').map(&:basename).join(', ')}" }
+ let(:project) { Project.new }
+ let(:project_fixture) { nil }
+ let(:env) { {} }
+ let(:report_types) { { 'gemnasium-maven' => :dependency_scanning, 'spotbugs' => :sast } }
+ let(:report_type) { report_types.fetch(scanner) }
+
+ around do |example|
+ if project_fixture
+ project.mount(dir: fixture_file(project_fixture))
+ else
+ project.clone(git_url, branch: git_branch.to_s)
+ end
+
+ docker.run(image: docker_image, project_path: project.path, env: env)
+ example.run
+ project.cleanup
+ end
+end
+
+RSpec.configure do |config|
+ config.include_context 'with scanner'
+end