json_matchers 0.9.0 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +3 -1
- data/NEWS.md +9 -0
- data/README.md +104 -81
- data/json_matchers.gemspec +1 -1
- data/lib/json_matchers.rb +2 -2
- data/lib/json_matchers/assertion.rb +5 -5
- data/lib/json_matchers/matcher.rb +17 -20
- data/lib/json_matchers/parser.rb +21 -0
- data/lib/json_matchers/payload.rb +4 -0
- data/lib/json_matchers/rspec.rb +2 -14
- data/lib/json_matchers/validator.rb +17 -20
- data/lib/json_matchers/version.rb +1 -1
- data/spec/factories.rb +53 -17
- data/spec/json_matchers/match_json_schema_spec.rb +53 -77
- data/spec/support/fake_response.rb +1 -1
- data/spec/support/file_helpers.rb +0 -1
- data/test/json_matchers/minitest/assertions_test.rb +55 -29
- metadata +9 -13
- data/lib/json_matchers/configuration.rb +0 -27
- data/spec/json_matchers/configuration_spec.rb +0 -9
- data/spec/support/configuration.rb +0 -20
@@ -21,34 +21,42 @@ class AssertResponseMatchesSchemaTest < JsonMatchers::TestCase
|
|
21
21
|
end
|
22
22
|
|
23
23
|
test "fails when the body contains a property with the wrong type" do
|
24
|
-
schema = create(:schema, :
|
24
|
+
schema = create(:schema, :location)
|
25
25
|
|
26
|
-
json = build(:response, :
|
26
|
+
json = build(:response, :invalid_location)
|
27
27
|
|
28
28
|
refute_matches_json_schema(json, schema)
|
29
29
|
end
|
30
30
|
|
31
31
|
test "fails when the body is missing a required property" do
|
32
|
-
schema = create(:schema, :
|
32
|
+
schema = create(:schema, :location)
|
33
33
|
|
34
34
|
json = build(:response, {})
|
35
35
|
|
36
36
|
refute_matches_json_schema(json, schema)
|
37
37
|
end
|
38
38
|
|
39
|
+
test "can reference a schema in a directory" do
|
40
|
+
create(:schema, :location, name: "api/v1/schema")
|
41
|
+
|
42
|
+
json = build(:response, :location)
|
43
|
+
|
44
|
+
assert_matches_json_schema(json, "api/v1/schema")
|
45
|
+
end
|
46
|
+
|
39
47
|
test "when passed a Hash, validates that the schema matches" do
|
40
|
-
schema = create(:schema, :
|
48
|
+
schema = create(:schema, :location)
|
41
49
|
|
42
|
-
json = build(:response, :
|
50
|
+
json = build(:response, :location)
|
43
51
|
json_as_hash = json.to_h
|
44
52
|
|
45
53
|
assert_matches_json_schema(json_as_hash, schema)
|
46
54
|
end
|
47
55
|
|
48
56
|
test "when passed a Hash, fails with message when negated" do
|
49
|
-
schema = create(:schema, :
|
57
|
+
schema = create(:schema, :location)
|
50
58
|
|
51
|
-
json = build(:response, :
|
59
|
+
json = build(:response, :invalid_location)
|
52
60
|
json_as_hash = json.to_h
|
53
61
|
|
54
62
|
assert_raises_error_containing(schema) do
|
@@ -57,27 +65,27 @@ class AssertResponseMatchesSchemaTest < JsonMatchers::TestCase
|
|
57
65
|
end
|
58
66
|
|
59
67
|
test "when passed a Array, validates a root-level Array in the JSON" do
|
60
|
-
schema = create(:schema, :array_of, :
|
68
|
+
schema = create(:schema, :array_of, :locations)
|
61
69
|
|
62
|
-
json = build(:response, :
|
70
|
+
json = build(:response, :location)
|
63
71
|
json_as_array = [json.to_h]
|
64
72
|
|
65
73
|
assert_matches_json_schema(json_as_array, schema)
|
66
74
|
end
|
67
75
|
|
68
76
|
test "when passed a Array, refutes a root-level Array in the JSON" do
|
69
|
-
schema = create(:schema, :array_of, :
|
77
|
+
schema = create(:schema, :array_of, :locations)
|
70
78
|
|
71
|
-
json = build(:response, :
|
79
|
+
json = build(:response, :invalid_location)
|
72
80
|
json_as_array = [json.to_h]
|
73
81
|
|
74
82
|
refute_matches_json_schema(json_as_array, schema)
|
75
83
|
end
|
76
84
|
|
77
85
|
test "when passed a Array, fails with message when negated" do
|
78
|
-
schema = create(:schema, :array_of, :
|
86
|
+
schema = create(:schema, :array_of, :location)
|
79
87
|
|
80
|
-
json = build(:response, :
|
88
|
+
json = build(:response, :invalid_location)
|
81
89
|
json_as_array = [json.to_h]
|
82
90
|
|
83
91
|
assert_raises_error_containing(schema) do
|
@@ -86,18 +94,18 @@ class AssertResponseMatchesSchemaTest < JsonMatchers::TestCase
|
|
86
94
|
end
|
87
95
|
|
88
96
|
test "when JSON is a string, validates that the schema matches" do
|
89
|
-
schema = create(:schema, :
|
97
|
+
schema = create(:schema, :location)
|
90
98
|
|
91
|
-
json = build(:response, :
|
99
|
+
json = build(:response, :location)
|
92
100
|
json_as_string = json.to_json
|
93
101
|
|
94
102
|
assert_matches_json_schema(json_as_string, schema)
|
95
103
|
end
|
96
104
|
|
97
105
|
test "when JSON is a string, fails with message when negated" do
|
98
|
-
schema = create(:schema, :
|
106
|
+
schema = create(:schema, :location)
|
99
107
|
|
100
|
-
json = build(:response, :
|
108
|
+
json = build(:response, :invalid_location)
|
101
109
|
json_as_string = json.to_json
|
102
110
|
|
103
111
|
assert_raises_error_containing(schema) do
|
@@ -106,9 +114,9 @@ class AssertResponseMatchesSchemaTest < JsonMatchers::TestCase
|
|
106
114
|
end
|
107
115
|
|
108
116
|
test "the failure message contains the body" do
|
109
|
-
schema = create(:schema, :
|
117
|
+
schema = create(:schema, :location)
|
110
118
|
|
111
|
-
json = build(:response, :
|
119
|
+
json = build(:response, :invalid_location)
|
112
120
|
|
113
121
|
assert_raises_error_containing(json) do
|
114
122
|
assert_matches_json_schema(json, schema)
|
@@ -116,9 +124,9 @@ class AssertResponseMatchesSchemaTest < JsonMatchers::TestCase
|
|
116
124
|
end
|
117
125
|
|
118
126
|
test "the failure message contains the schema" do
|
119
|
-
schema = create(:schema, :
|
127
|
+
schema = create(:schema, :location)
|
120
128
|
|
121
|
-
json = build(:response, :
|
129
|
+
json = build(:response, :invalid_location)
|
122
130
|
|
123
131
|
assert_raises_error_containing(schema) do
|
124
132
|
assert_matches_json_schema(json, schema)
|
@@ -126,9 +134,9 @@ class AssertResponseMatchesSchemaTest < JsonMatchers::TestCase
|
|
126
134
|
end
|
127
135
|
|
128
136
|
test "the failure message when negated, contains the body" do
|
129
|
-
schema = create(:schema, :
|
137
|
+
schema = create(:schema, :location)
|
130
138
|
|
131
|
-
json = build(:response, :
|
139
|
+
json = build(:response, :location)
|
132
140
|
|
133
141
|
assert_raises_error_containing(json) do
|
134
142
|
refute_matches_json_schema(json, schema)
|
@@ -136,9 +144,9 @@ class AssertResponseMatchesSchemaTest < JsonMatchers::TestCase
|
|
136
144
|
end
|
137
145
|
|
138
146
|
test "the failure message when negated, contains the schema" do
|
139
|
-
schema = create(:schema, :
|
147
|
+
schema = create(:schema, :location)
|
140
148
|
|
141
|
-
json = build(:response, :
|
149
|
+
json = build(:response, :location)
|
142
150
|
|
143
151
|
assert_raises_error_containing(schema) do
|
144
152
|
refute_matches_json_schema(json, schema)
|
@@ -146,23 +154,41 @@ class AssertResponseMatchesSchemaTest < JsonMatchers::TestCase
|
|
146
154
|
end
|
147
155
|
|
148
156
|
test "asserts valid JSON against a schema that uses $ref" do
|
149
|
-
schema = create(:schema, :
|
157
|
+
schema = create(:schema, :referencing_locations)
|
150
158
|
|
151
|
-
json = build(:response, :
|
159
|
+
json = build(:response, :location)
|
152
160
|
json_as_array = [json.to_h]
|
153
161
|
|
154
162
|
assert_matches_json_schema(json_as_array, schema)
|
155
163
|
end
|
156
164
|
|
157
165
|
test "refutes valid JSON against a schema that uses $ref" do
|
158
|
-
schema = create(:schema, :
|
166
|
+
schema = create(:schema, :referencing_locations)
|
159
167
|
|
160
|
-
json = build(:response, :
|
168
|
+
json = build(:response, :invalid_location)
|
161
169
|
json_as_array = [json.to_h]
|
162
170
|
|
163
171
|
refute_matches_json_schema(json_as_array, schema)
|
164
172
|
end
|
165
173
|
|
174
|
+
test "validates against a schema referencing with 'definitions'" do
|
175
|
+
schema = create(:schema, :referencing_definitions)
|
176
|
+
|
177
|
+
json = build(:response, :location)
|
178
|
+
json_as_hash = { "locations" => [json] }
|
179
|
+
|
180
|
+
assert_matches_json_schema(json_as_hash, schema)
|
181
|
+
end
|
182
|
+
|
183
|
+
test "fails against a schema referencing with 'definitions'" do
|
184
|
+
schema = create(:schema, :referencing_definitions)
|
185
|
+
|
186
|
+
json = build(:response, :invalid_location)
|
187
|
+
json_as_hash = { "locations" => [json] }
|
188
|
+
|
189
|
+
refute_matches_json_schema(json_as_hash, schema)
|
190
|
+
end
|
191
|
+
|
166
192
|
def assert_raises_error_containing(schema_or_body)
|
167
193
|
raised_error = assert_raises(Minitest::Assertion) do
|
168
194
|
yield
|
metadata
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: json_matchers
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.10.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sean Doyle
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-08-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: json_schema
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: bundler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -145,19 +145,17 @@ files:
|
|
145
145
|
- json_matchers.gemspec
|
146
146
|
- lib/json_matchers.rb
|
147
147
|
- lib/json_matchers/assertion.rb
|
148
|
-
- lib/json_matchers/configuration.rb
|
149
148
|
- lib/json_matchers/errors.rb
|
150
149
|
- lib/json_matchers/matcher.rb
|
151
150
|
- lib/json_matchers/minitest/assertions.rb
|
151
|
+
- lib/json_matchers/parser.rb
|
152
152
|
- lib/json_matchers/payload.rb
|
153
153
|
- lib/json_matchers/rspec.rb
|
154
154
|
- lib/json_matchers/validator.rb
|
155
155
|
- lib/json_matchers/version.rb
|
156
156
|
- spec/factories.rb
|
157
|
-
- spec/json_matchers/configuration_spec.rb
|
158
157
|
- spec/json_matchers/match_json_schema_spec.rb
|
159
158
|
- spec/spec_helper.rb
|
160
|
-
- spec/support/configuration.rb
|
161
159
|
- spec/support/factory_bot.rb
|
162
160
|
- spec/support/fake_response.rb
|
163
161
|
- spec/support/fake_schema.rb
|
@@ -186,16 +184,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
186
184
|
version: '0'
|
187
185
|
requirements: []
|
188
186
|
rubyforge_project:
|
189
|
-
rubygems_version: 2.7.
|
187
|
+
rubygems_version: 2.7.7
|
190
188
|
signing_key:
|
191
189
|
specification_version: 4
|
192
190
|
summary: Validate your Rails JSON API's JSON
|
193
191
|
test_files:
|
194
192
|
- spec/factories.rb
|
195
|
-
- spec/json_matchers/configuration_spec.rb
|
196
193
|
- spec/json_matchers/match_json_schema_spec.rb
|
197
194
|
- spec/spec_helper.rb
|
198
|
-
- spec/support/configuration.rb
|
199
195
|
- spec/support/factory_bot.rb
|
200
196
|
- spec/support/fake_response.rb
|
201
197
|
- spec/support/fake_schema.rb
|
@@ -1,27 +0,0 @@
|
|
1
|
-
module JsonMatchers
|
2
|
-
def self.configuration
|
3
|
-
@configuration ||= Configuration.new
|
4
|
-
end
|
5
|
-
|
6
|
-
def self.configure
|
7
|
-
warn <<-WARN
|
8
|
-
DEPRECATION: `JsonMatchers.configure`
|
9
|
-
After `json_matchers@0.9.x`, JsonMatchers.configure will be removed.
|
10
|
-
|
11
|
-
See https://github.com/thoughtbot/json_matchers/pull/31 for more information.
|
12
|
-
|
13
|
-
WARN
|
14
|
-
|
15
|
-
yield(configuration)
|
16
|
-
end
|
17
|
-
|
18
|
-
class Configuration
|
19
|
-
def initialize
|
20
|
-
@options = {}
|
21
|
-
end
|
22
|
-
|
23
|
-
def options
|
24
|
-
@options.merge!(record_errors: true)
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
@@ -1,9 +0,0 @@
|
|
1
|
-
describe JsonMatchers, ".configure" do
|
2
|
-
it "ignores :record_errors configuration" do
|
3
|
-
with_options(record_errors: false) do
|
4
|
-
configured_options = JsonMatchers.configuration.options
|
5
|
-
|
6
|
-
expect(configured_options).to include(record_errors: true)
|
7
|
-
end
|
8
|
-
end
|
9
|
-
end
|
@@ -1,20 +0,0 @@
|
|
1
|
-
module ConfigurationHelpers
|
2
|
-
def with_options(options)
|
3
|
-
original_options = JsonMatchers.configuration.options.dup
|
4
|
-
|
5
|
-
JsonMatchers.configure do |config|
|
6
|
-
config.options.merge!(options)
|
7
|
-
end
|
8
|
-
|
9
|
-
yield
|
10
|
-
|
11
|
-
JsonMatchers.configure do |config|
|
12
|
-
config.options.clear
|
13
|
-
config.options.merge!(original_options)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
RSpec.configure do |config|
|
19
|
-
config.include ConfigurationHelpers
|
20
|
-
end
|