json_matchers 0.6.0 → 0.6.1
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/NEWS.md +8 -0
- data/README.md +18 -1
- data/lib/json_matchers/configuration.rb +17 -0
- data/lib/json_matchers/matcher.rb +6 -2
- data/lib/json_matchers/rspec.rb +18 -14
- data/lib/json_matchers/version.rb +1 -1
- data/lib/json_matchers.rb +1 -0
- data/spec/json_matchers/match_response_schema_spec.rb +54 -21
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f804bef576b5eb020767f2b84e25692f5e14225e
|
4
|
+
data.tar.gz: d940ccbb14d096153d58bba091b0f663c155732a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1616399a1d6caf634f18f4a59682fdf56b2fd9a1e257851fc06a904b7741b9cedd18f09e7b758ef8ed3ebb3df88bb1adf7f6b4d216902365a4bf334437810fb0
|
7
|
+
data.tar.gz: 5ed37b4b4c32cfe7ff89561690ba347b8f42827a58e32931643a69d23ebfadcd8f414abb255ed34e1a66e5b0f4910e4f4bb334fea2c0937e3997d3bba1cb60ea
|
data/NEWS.md
CHANGED
data/README.md
CHANGED
@@ -103,7 +103,24 @@ describe "GET /posts" do
|
|
103
103
|
end
|
104
104
|
```
|
105
105
|
|
106
|
-
A list of available options can be found [here][options]
|
106
|
+
A list of available options can be found [here][options].
|
107
|
+
|
108
|
+
[options]: https://github.com/ruby-json-schema/json-schema/blob/2.2.4/lib/json-schema/validator.rb#L160-L162
|
109
|
+
|
110
|
+
### Default matcher options
|
111
|
+
|
112
|
+
To configure the default options passed to *all* matchers, call
|
113
|
+
`JsonMatchers.configure`:
|
114
|
+
|
115
|
+
```rb
|
116
|
+
# spec/support/json_matchers.rb
|
117
|
+
|
118
|
+
JsonMatchers.configure do |config|
|
119
|
+
config.options[:strict] = true
|
120
|
+
end
|
121
|
+
```
|
122
|
+
|
123
|
+
A list of available options can be found [here][options].
|
107
124
|
|
108
125
|
[options]: https://github.com/ruby-json-schema/json-schema/blob/2.2.4/lib/json-schema/validator.rb#L160-L162
|
109
126
|
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module JsonMatchers
|
2
|
+
def self.configuration
|
3
|
+
@configuration ||= Configuration.new
|
4
|
+
end
|
5
|
+
|
6
|
+
def self.configure
|
7
|
+
yield(configuration)
|
8
|
+
end
|
9
|
+
|
10
|
+
class Configuration
|
11
|
+
attr_reader :options
|
12
|
+
|
13
|
+
def initialize
|
14
|
+
@options = {}
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -2,9 +2,9 @@ require "json-schema"
|
|
2
2
|
|
3
3
|
module JsonMatchers
|
4
4
|
class Matcher
|
5
|
-
def initialize(schema_path,
|
5
|
+
def initialize(schema_path, options = {})
|
6
6
|
@schema_path = schema_path
|
7
|
-
@options = options
|
7
|
+
@options = default_options.merge(options)
|
8
8
|
end
|
9
9
|
|
10
10
|
def matches?(response)
|
@@ -35,5 +35,9 @@ module JsonMatchers
|
|
35
35
|
response
|
36
36
|
end
|
37
37
|
end
|
38
|
+
|
39
|
+
def default_options
|
40
|
+
JsonMatchers.configuration.options || {}
|
41
|
+
end
|
38
42
|
end
|
39
43
|
end
|
data/lib/json_matchers/rspec.rb
CHANGED
@@ -11,39 +11,43 @@ module JsonMatchers
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def failure_message(response)
|
14
|
-
<<-FAIL
|
15
|
-
|
14
|
+
<<-FAIL
|
15
|
+
#{validation_failure_message}
|
16
16
|
|
17
|
-
|
17
|
+
---
|
18
18
|
|
19
|
-
|
19
|
+
expected
|
20
20
|
|
21
|
-
|
21
|
+
#{pretty_json(response.body)}
|
22
22
|
|
23
|
-
|
23
|
+
to match schema "#{schema_name}":
|
24
24
|
|
25
|
-
|
25
|
+
#{pretty_json(schema_body)}
|
26
26
|
|
27
27
|
FAIL
|
28
28
|
end
|
29
29
|
|
30
30
|
def failure_message_when_negated(response)
|
31
|
-
<<-FAIL
|
32
|
-
|
31
|
+
<<-FAIL
|
32
|
+
#{validation_failure_message}
|
33
33
|
|
34
|
-
|
34
|
+
---
|
35
35
|
|
36
|
-
|
36
|
+
expected
|
37
37
|
|
38
|
-
|
38
|
+
#{pretty_json(response.body)}
|
39
39
|
|
40
|
-
|
40
|
+
not to match schema "#{schema_name}":
|
41
41
|
|
42
|
-
|
42
|
+
#{pretty_json(schema_body)}
|
43
43
|
|
44
44
|
FAIL
|
45
45
|
end
|
46
46
|
|
47
|
+
def pretty_json(json_string)
|
48
|
+
JSON.pretty_generate(JSON.parse(json_string.to_s))
|
49
|
+
end
|
50
|
+
|
47
51
|
def schema_path
|
48
52
|
JsonMatchers.path_to_schema(schema_name)
|
49
53
|
end
|
data/lib/json_matchers.rb
CHANGED
@@ -22,23 +22,6 @@ describe JsonMatchers, "#match_response_schema" do
|
|
22
22
|
expect(response_for({})).not_to match_response_schema("foo_schema")
|
23
23
|
end
|
24
24
|
|
25
|
-
it "accepts options for the validator" do
|
26
|
-
create_schema("foo_schema", {
|
27
|
-
"type" => "object",
|
28
|
-
"required" => [
|
29
|
-
"id",
|
30
|
-
],
|
31
|
-
"properties" => {
|
32
|
-
"id" => { "type" => "number" },
|
33
|
-
"title" => {"type" => "string"},
|
34
|
-
},
|
35
|
-
"additionalProperties" => false,
|
36
|
-
})
|
37
|
-
|
38
|
-
expect(response_for({ "id" => 1, "title" => "bar" })).
|
39
|
-
to match_response_schema("foo_schema", strict: false)
|
40
|
-
end
|
41
|
-
|
42
25
|
it "validates a JSON string" do
|
43
26
|
create_schema("foo_schema", {
|
44
27
|
"type" => "object",
|
@@ -72,7 +55,7 @@ describe JsonMatchers, "#match_response_schema" do
|
|
72
55
|
|
73
56
|
expect {
|
74
57
|
expect(response_for("bar" => 5)).to match_response_schema("foo")
|
75
|
-
}.to
|
58
|
+
}.to raise_formatted_error(%{{ "bar": 5 }})
|
76
59
|
end
|
77
60
|
|
78
61
|
it "contains the body in the failure message when negated" do
|
@@ -80,7 +63,7 @@ describe JsonMatchers, "#match_response_schema" do
|
|
80
63
|
|
81
64
|
expect {
|
82
65
|
expect(response_for([])).not_to match_response_schema("foo")
|
83
|
-
}.to
|
66
|
+
}.to raise_formatted_error("[ ]")
|
84
67
|
end
|
85
68
|
|
86
69
|
it "contains the schema in the failure message" do
|
@@ -89,7 +72,7 @@ describe JsonMatchers, "#match_response_schema" do
|
|
89
72
|
|
90
73
|
expect {
|
91
74
|
expect(response_for("bar" => 5)).to match_response_schema("foo")
|
92
|
-
}.to
|
75
|
+
}.to raise_formatted_error(%{{ "type": "array" }})
|
93
76
|
end
|
94
77
|
|
95
78
|
it "contains the schema in the failure message when negated" do
|
@@ -98,7 +81,7 @@ describe JsonMatchers, "#match_response_schema" do
|
|
98
81
|
|
99
82
|
expect {
|
100
83
|
expect(response_for([])).not_to match_response_schema("foo")
|
101
|
-
}.to
|
84
|
+
}.to raise_formatted_error(%{{ "type": "array" }})
|
102
85
|
end
|
103
86
|
|
104
87
|
it "does not fail when the schema matches" do
|
@@ -129,4 +112,54 @@ describe JsonMatchers, "#match_response_schema" do
|
|
129
112
|
expect(valid_response).to match_response_schema("collection")
|
130
113
|
expect(invalid_response).not_to match_response_schema("collection")
|
131
114
|
end
|
115
|
+
|
116
|
+
context "when options are passed directly to the matcher" do
|
117
|
+
it "forwards options to the validator" do
|
118
|
+
create_schema("foo_schema", {
|
119
|
+
"type" => "object",
|
120
|
+
"properties" => {
|
121
|
+
"id" => { "type" => "number" },
|
122
|
+
"title" => { "type" => "string" },
|
123
|
+
},
|
124
|
+
})
|
125
|
+
|
126
|
+
expect(response_for({ "id" => 1, "title" => "bar" })).
|
127
|
+
to match_response_schema("foo_schema", strict: true)
|
128
|
+
expect(response_for({ "id" => 1 })).
|
129
|
+
not_to match_response_schema("foo_schema", strict: true)
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
context "when options are configured globally" do
|
134
|
+
it "forwards them to the validator" do
|
135
|
+
create_schema("foo_schema", {
|
136
|
+
"type" => "object",
|
137
|
+
"properties" => {
|
138
|
+
"id" => { "type" => "number" },
|
139
|
+
"title" => { "type" => "string" },
|
140
|
+
},
|
141
|
+
})
|
142
|
+
|
143
|
+
JsonMatchers.configure do |config|
|
144
|
+
config.options[:strict] = true
|
145
|
+
end
|
146
|
+
|
147
|
+
expect(response_for({ "id" => 1, "title" => "bar" })).
|
148
|
+
to match_response_schema("foo_schema")
|
149
|
+
expect(response_for({ "id" => 1 })).
|
150
|
+
not_to match_response_schema("foo_schema")
|
151
|
+
end
|
152
|
+
|
153
|
+
after do
|
154
|
+
JsonMatchers.configure do |config|
|
155
|
+
config.options.delete(:strict)
|
156
|
+
end
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
def raise_formatted_error(error_message)
|
161
|
+
raise_error do |error|
|
162
|
+
expect(error.message.squish).to include(error_message)
|
163
|
+
end
|
164
|
+
end
|
132
165
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: json_matchers
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sean Doyle
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-10-
|
11
|
+
date: 2016-10-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json-schema
|
@@ -113,6 +113,7 @@ files:
|
|
113
113
|
- Rakefile
|
114
114
|
- json_matchers.gemspec
|
115
115
|
- lib/json_matchers.rb
|
116
|
+
- lib/json_matchers/configuration.rb
|
116
117
|
- lib/json_matchers/errors.rb
|
117
118
|
- lib/json_matchers/matcher.rb
|
118
119
|
- lib/json_matchers/rspec.rb
|
@@ -148,4 +149,3 @@ test_files:
|
|
148
149
|
- spec/json_matchers/match_response_schema_spec.rb
|
149
150
|
- spec/spec_helper.rb
|
150
151
|
- spec/support/file_helpers.rb
|
151
|
-
has_rdoc:
|