summaryrefslogtreecommitdiff
path: root/spec/support/api/schema_matcher.rb
blob: 67599f77adb1595231b881b2d2867f7238f0f2c5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
def schema_path(schema)
  schema_directory = "#{Dir.pwd}/spec/fixtures/api/schemas"
  "#{schema_directory}/#{schema}.json"
end

RSpec::Matchers.define :match_response_schema do |schema, **options|
  match do |response|
    @errors = JSON::Validator.fully_validate(schema_path(schema), response.body, options)

    @errors.empty?
  end

  failure_message do |response|
    "didn't match the schema defined by #{schema_path(schema)}" \
    " The validation errors were:\n#{@errors.join("\n")}"
  end
end

RSpec::Matchers.define :match_schema do |schema, **options|
  match do |data|
    JSON::Validator.validate!(schema_path(schema), data, options)
  end
end