summaryrefslogtreecommitdiff
path: root/spec/support
diff options
context:
space:
mode:
authormo khan <mo.khan@gmail.com>2020-09-16 17:19:55 -0600
committermo khan <mo.khan@gmail.com>2020-09-16 17:19:55 -0600
commit20595e44b91a72dc39f72090bf9aed3b7db2a1bc (patch)
tree834a87f83ec44e44f090e264887a8d0413abac1e /spec/support
parent46b002a96345ce18b0f7a95ef00fca1c34cb9298 (diff)
test: add spec to validate the dependency_scanning report schema
Diffstat (limited to 'spec/support')
-rw-r--r--spec/support/matchers/match_schema.rb19
-rw-r--r--spec/support/shared/with_expected.rb8
2 files changed, 24 insertions, 3 deletions
diff --git a/spec/support/matchers/match_schema.rb b/spec/support/matchers/match_schema.rb
new file mode 100644
index 0000000..eef6106
--- /dev/null
+++ b/spec/support/matchers/match_schema.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+RSpec::Matchers.define :match_schema do |report_type|
+ def schema_for(type)
+ relative_path = "spec/schemas/dist/#{type.gsub('_', '-')}-report-format.json"
+ json = JSON.parse(Pathname.pwd.join(relative_path).read)
+ json.delete('$schema')
+ json
+ end
+
+ match do |actual|
+ !actual.nil? && (@errors = JSON::Validator.fully_validate(schema_for(report_type.to_s), actual.to_h)).empty?
+ end
+
+ failure_message do |response|
+ "didn't match the schema for #{report_type}" \
+ " The validation errors were:\n#{@errors.join("\n")}"
+ end
+end
diff --git a/spec/support/shared/with_expected.rb b/spec/support/shared/with_expected.rb
index be4d7cc..00fc420 100644
--- a/spec/support/shared/with_expected.rb
+++ b/spec/support/shared/with_expected.rb
@@ -6,11 +6,13 @@ RSpec.shared_examples "with expected" do |language, package_manager, version, br
let(:git_branch) { branch }
let(:expected_content) { JSON.parse(fixture_file_content("expected/#{language}/#{package_manager}/#{branch}/v#{version}.json")) }
+ pending { expect(subject).to match_schema(report_type) }
+
pending do
- actual_pretty = JSON.pretty_generate(subject.to_h)
- expected_pretty = JSON.pretty_generate(expected_content)
+ actual = JSON.pretty_generate(subject.to_h)
+ expected = JSON.pretty_generate(expected_content)
- expect(actual_pretty).to eq(expected_pretty)
+ expect(actual).to eq(expected)
end
end
end