diff options
Diffstat (limited to 'spec/support/matchers/match_schema.rb')
| -rw-r--r-- | spec/support/matchers/match_schema.rb | 19 |
1 files changed, 19 insertions, 0 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 |
