easy_json_matcher 0.0.1 → 0.0.2.pre.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/lib/easy_json_matcher/array_validator.rb +45 -0
- data/lib/easy_json_matcher/date_validator.rb +1 -1
- data/lib/easy_json_matcher/exceptions.rb +9 -0
- data/lib/easy_json_matcher/number_validator.rb +3 -1
- data/lib/easy_json_matcher/schema_generator.rb +33 -7
- data/lib/easy_json_matcher/schema_library.rb +35 -0
- data/lib/easy_json_matcher/validator.rb +14 -1
- data/lib/easy_json_matcher/validator_factory.rb +8 -3
- data/lib/easy_json_matcher/version.rb +1 -1
- data/lib/easy_json_matcher.rb +0 -22
- data/test/dummy/log/test.log +9595 -0
- data/test/{jsonapi_matcher_test.rb → easy_json_matcher_test.rb} +13 -21
- data/test/managing_schemas_test.rb +68 -0
- data/test/required_validation_test.rb +37 -0
- data/test/validating_arrays_test.rb +68 -0
- metadata +14 -8
- data/test/date_format_test.rb +0 -0
@@ -14,10 +14,10 @@ class JsonapiMatcherTest < ActiveSupport::TestCase
|
|
14
14
|
}.register(schema_name: :test)
|
15
15
|
|
16
16
|
valid_json = {
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
17
|
+
data: {
|
18
|
+
'title'=> "here's a title"
|
19
|
+
}
|
20
|
+
}.to_json
|
21
21
|
assert(test_schema.valid? valid_json)
|
22
22
|
end
|
23
23
|
|
@@ -25,7 +25,7 @@ class JsonapiMatcherTest < ActiveSupport::TestCase
|
|
25
25
|
test "As a user I want to be able to validate numbers" do
|
26
26
|
|
27
27
|
test_schema = EasyJSONMatcher::SchemaGenerator.new {|schema|
|
28
|
-
schema.has_attribute(key: :number, opts: {type: :number})
|
28
|
+
schema.has_attribute(key: :number, opts: {type: :number, required: :true})
|
29
29
|
}.generate_node
|
30
30
|
|
31
31
|
valid_json = {
|
@@ -38,6 +38,11 @@ class JsonapiMatcherTest < ActiveSupport::TestCase
|
|
38
38
|
number: "hi"
|
39
39
|
}.to_json
|
40
40
|
assert_not(test_schema.valid?(invalid_json), "\"hi\" should not have been valid")
|
41
|
+
|
42
|
+
invalid_nil = {
|
43
|
+
number: nil
|
44
|
+
}.to_json
|
45
|
+
assert_not(test_schema.valid?(invalid_nil), "#{invalid_nil} should not have validated, or thrown an error")
|
41
46
|
end
|
42
47
|
|
43
48
|
test "As a user I want to be able to validate booleans" do
|
@@ -57,8 +62,9 @@ class JsonapiMatcherTest < ActiveSupport::TestCase
|
|
57
62
|
invalid_json = {
|
58
63
|
true: 1,
|
59
64
|
false: "wibble"
|
60
|
-
}
|
65
|
+
}.to_json
|
61
66
|
|
67
|
+
# byebug
|
62
68
|
assert_not(test_schema.valid?(invalid_json), "\"1\" and \"wibble\" are not valid boolean values")
|
63
69
|
end
|
64
70
|
|
@@ -80,10 +86,6 @@ class JsonapiMatcherTest < ActiveSupport::TestCase
|
|
80
86
|
assert(!test_schema.valid?(invalid_json), "\"1\" is not a valid array value")
|
81
87
|
end
|
82
88
|
|
83
|
-
test "As a user I want to be able to specify what should be found in an array" do
|
84
|
-
flunk "Implement me"
|
85
|
-
end
|
86
|
-
|
87
89
|
test "As a user I want to be able to validate date values" do
|
88
90
|
test_schema = EasyJSONMatcher::SchemaGenerator.new { |schema|
|
89
91
|
schema.has_attribute(key: :date, opts: {type: :date})
|
@@ -124,7 +126,7 @@ class JsonapiMatcherTest < ActiveSupport::TestCase
|
|
124
126
|
|
125
127
|
invalid_json = {
|
126
128
|
object: not_an_object
|
127
|
-
}
|
129
|
+
}.to_json
|
128
130
|
|
129
131
|
assert_not(test_schema.valid?(invalid_json), "#{not_an_object} should not have validated as an object")
|
130
132
|
end
|
@@ -192,16 +194,6 @@ class JsonapiMatcherTest < ActiveSupport::TestCase
|
|
192
194
|
assert(test_schema.valid?(valid_json), "Nested JSON was not correctly validated")
|
193
195
|
end
|
194
196
|
|
195
|
-
test "As a user I want to be able to register a Schema so I can reuse it later" do
|
196
|
-
|
197
|
-
EasyJSONMatcher::SchemaGenerator.new { |schema|
|
198
|
-
schema.has_attribute(key: :ignore_me, opts: {type: :value})
|
199
|
-
}.register(schema_name: :test)
|
200
|
-
|
201
|
-
assert(EasyJSONMatcher.available_schemas.include?(:test), ":test not found in available_nodes")
|
202
|
-
end
|
203
|
-
|
204
|
-
|
205
197
|
test "As a user I want to know why my json was not valid" do
|
206
198
|
|
207
199
|
class Validator
|
@@ -0,0 +1,68 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class ManagingSchemasTest < ActiveSupport::TestCase
|
4
|
+
|
5
|
+
setup do
|
6
|
+
@name = :test
|
7
|
+
EasyJSONMatcher::SchemaGenerator.new { |schema|
|
8
|
+
schema.has_attribute(key: :name, opts: {type: :string, required: true})
|
9
|
+
}.register(schema_name: @name)
|
10
|
+
end
|
11
|
+
|
12
|
+
test "As a user I want to be able to register a Schema so I can reuse it later" do
|
13
|
+
assert(EasyJSONMatcher::SchemaLibrary.available_schemas.include?(:test), ":test not found in available_nodes")
|
14
|
+
end
|
15
|
+
|
16
|
+
test "As as user I want to reuse a saved schema" do
|
17
|
+
test_schema = {
|
18
|
+
name: 'Green Mandarin'
|
19
|
+
}.to_json
|
20
|
+
|
21
|
+
schema = EasyJSONMatcher::SchemaLibrary.get_schema(@name)
|
22
|
+
assert(schema.valid?(test_schema), "test_schema did not validate correctly")
|
23
|
+
end
|
24
|
+
|
25
|
+
test "SchemaLibrary should thrown a MissingSchemaException if an unregistered schema is requested" do
|
26
|
+
assert_raises(EasyJSONMatcher::MissingSchemaException) do
|
27
|
+
EasyJSONMatcher::SchemaLibrary.get_schema("#{@name.to_s}-wibble")
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
test "As a user I want to reuse a schema within another schema" do
|
32
|
+
test_schema = EasyJSONMatcher::SchemaGenerator.new { |s|
|
33
|
+
s.has_attribute(key: :is_present, opts: {type: :boolean, required: true})
|
34
|
+
s.contains_schema(schema_name: @name)
|
35
|
+
}.generate_node
|
36
|
+
|
37
|
+
invalid_json = {
|
38
|
+
is_present: true,
|
39
|
+
}
|
40
|
+
|
41
|
+
assert_not(test_schema.valid?(invalid_json), "#{invalid_json} should not have been valid as it does not include the saved schema")
|
42
|
+
|
43
|
+
valid_json = invalid_json.dup
|
44
|
+
valid_json.store(@name, {name: 'Achilles Tang'})
|
45
|
+
valid_json = valid_json.to_json
|
46
|
+
assert(test_schema.valid?(valid_json), "Stored schema did not validate correctly")
|
47
|
+
end
|
48
|
+
|
49
|
+
test "It can validate JSON Schema payloads" do
|
50
|
+
EasyJSONMatcher::SchemaGenerator.new { |country|
|
51
|
+
country.has_attribute key: :id, opts: {type: :number, required: true}
|
52
|
+
country.contains_node(key: :attributes) do |atts|
|
53
|
+
atts.has_attribute key: :alpha_2, opts: {type: :string, required: true}
|
54
|
+
atts.has_attribute key: :alpha_3, opts: {type: :string, required: true}
|
55
|
+
atts.has_attribute key: :name, opts: {type: :string, required: true}
|
56
|
+
end
|
57
|
+
}.register(schema_name: :country)
|
58
|
+
|
59
|
+
EasyJSONMatcher::SchemaGenerator.new {|country_payload|
|
60
|
+
country_payload.contains_schema(schema_name: :country, opts: {key: :data})
|
61
|
+
}.register(schema_name: :country_payload)
|
62
|
+
|
63
|
+
valid_json = "{\"data\":{\"id\":\"4376\",\"type\":\"countries\",\"attributes\":{\"alpha_2\":\"GB\",\"alpha_3\":\"GBR\",\"name\":\"United Kingdom of Great Britain and Northern Ireland\"}}}"
|
64
|
+
|
65
|
+
validator = EasyJSONMatcher::SchemaLibrary.get_schema(:country_payload)
|
66
|
+
assert(validator.valid? valid_json)
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class RequireValidationTest < ActiveSupport::TestCase
|
4
|
+
|
5
|
+
test "As a user I want to insist that a value is present" do
|
6
|
+
astronaut_schema = EasyJSONMatcher::SchemaGenerator.new { |s|
|
7
|
+
s.has_attribute key: :has_oxygen, opts: {type: :boolean, required: true}
|
8
|
+
s.has_attribute key: :name, opts: {type: :string}
|
9
|
+
}.generate_node
|
10
|
+
|
11
|
+
valid_astronaut = {
|
12
|
+
has_oxygen: true,
|
13
|
+
name: 'Buzz Aldrin'
|
14
|
+
}.to_json
|
15
|
+
|
16
|
+
assert(astronaut_schema.valid?(valid_astronaut), "#{valid_astronaut} should be a valid object")
|
17
|
+
|
18
|
+
invalid_astronaut = {
|
19
|
+
name: 'Neil Armstrong'
|
20
|
+
}.to_json
|
21
|
+
|
22
|
+
assert_not(astronaut_schema.valid?(invalid_astronaut), "#{invalid_astronaut} should not be a valid object")
|
23
|
+
end
|
24
|
+
|
25
|
+
test "As a user I want validations to pass if the value is not present and I have not required it to be there" do
|
26
|
+
astronaut_schema = EasyJSONMatcher::SchemaGenerator.new { |s|
|
27
|
+
s.has_attribute key: :has_oxygen, opts: {type: :boolean}
|
28
|
+
s.has_attribute key: :name, opts: {type: :string}
|
29
|
+
}.generate_node
|
30
|
+
|
31
|
+
valid_astronaut = {
|
32
|
+
name: 'Buzz Aldrin'
|
33
|
+
}.to_json
|
34
|
+
|
35
|
+
assert(astronaut_schema.valid?(valid_astronaut), "#{valid_astronaut} should be valid since :has_oxygen is not required")
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class ValidatingArraysTest < ActiveSupport::TestCase
|
4
|
+
|
5
|
+
setup do
|
6
|
+
@test_schema = EasyJSONMatcher::SchemaGenerator.new { |s|
|
7
|
+
s.has_attribute(key: :name, opts: {type: :string})
|
8
|
+
s.contains_array(key: :items, opts: {required: true}) do |array|
|
9
|
+
array.should_only_contain(type: :string, opts: {required: true})
|
10
|
+
end
|
11
|
+
}.generate_node
|
12
|
+
end
|
13
|
+
|
14
|
+
test "As a user I want to validate that my arrays contain values of the correct type" do
|
15
|
+
valid_json = {
|
16
|
+
name: 'Greek Heroes',
|
17
|
+
items: ['Heracles', 'Perseus', 'Theseus', 'Achilles']
|
18
|
+
}.to_json
|
19
|
+
|
20
|
+
assert(@test_schema.valid?(valid_json), "#{valid_json} should have been valid")
|
21
|
+
|
22
|
+
invalid_no_items = {
|
23
|
+
name: 'Strictly Come Dancing Heroes'
|
24
|
+
}.to_json
|
25
|
+
|
26
|
+
assert_not(@test_schema.valid?(invalid_no_items), "#{invalid_no_items} should not have been valid as it has no array called items")
|
27
|
+
|
28
|
+
invalid_wrong_items = {
|
29
|
+
name: 'Prime Heroes',
|
30
|
+
items: [1,3,5,7,9,8191]
|
31
|
+
}.to_json
|
32
|
+
|
33
|
+
assert_not(@test_schema.valid?(invalid_wrong_items), "#{invalid_wrong_items} should not have been validated since the array contains the wrong type")
|
34
|
+
end
|
35
|
+
|
36
|
+
test "As a user I want to validate that my arrays can contain objects of a specific schema" do
|
37
|
+
EasyJSONMatcher::SchemaGenerator.new {|s|
|
38
|
+
|
39
|
+
s.has_attribute key: :name, opts: {type: :string, required: true}
|
40
|
+
s.has_attribute key: :spouse, opts: {type: :string}
|
41
|
+
}.register(schema_name: :greek_hero)
|
42
|
+
|
43
|
+
test_schema = EasyJSONMatcher::SchemaGenerator.new {|s|
|
44
|
+
s.contains_array(key: :data, opts: {required: true}) do |a|
|
45
|
+
a.should_only_contain(type: :schema, opts: {name: :greek_hero})
|
46
|
+
end
|
47
|
+
}.generate_node
|
48
|
+
|
49
|
+
valid_json = {
|
50
|
+
data: [{
|
51
|
+
name: 'Greek Heroes',
|
52
|
+
items: ['Hector', 'Ajax', 'Hippolyta', 'Penthesila']
|
53
|
+
},
|
54
|
+
{
|
55
|
+
name: 'Roman Heroes',
|
56
|
+
items: ['Romulus', 'Remus', 'Aeneus']
|
57
|
+
}]
|
58
|
+
}.to_json
|
59
|
+
|
60
|
+
assert(test_schema.valid?(valid_json), "#{valid_json} should have been validated as it follows the correct schema")
|
61
|
+
|
62
|
+
invalid_json = {
|
63
|
+
data: [1,2,3,4,5]
|
64
|
+
}
|
65
|
+
|
66
|
+
assert_not(test_schema.valid?(invalid_json), "#{invalid_json} should not have validated as it does not contain a :heroes schema")
|
67
|
+
end
|
68
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: easy_json_matcher
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.1
|
4
|
+
version: 0.0.2.pre.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- WJD Hamilton
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-02-
|
11
|
+
date: 2016-02-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -52,10 +52,12 @@ files:
|
|
52
52
|
- lib/easy_json_matcher/boolean_validator.rb
|
53
53
|
- lib/easy_json_matcher/content_wrapper.rb
|
54
54
|
- lib/easy_json_matcher/date_validator.rb
|
55
|
+
- lib/easy_json_matcher/exceptions.rb
|
55
56
|
- lib/easy_json_matcher/node.rb
|
56
57
|
- lib/easy_json_matcher/number_validator.rb
|
57
58
|
- lib/easy_json_matcher/object_validator.rb
|
58
59
|
- lib/easy_json_matcher/schema_generator.rb
|
60
|
+
- lib/easy_json_matcher/schema_library.rb
|
59
61
|
- lib/easy_json_matcher/string_validator.rb
|
60
62
|
- lib/easy_json_matcher/validation_error.rb
|
61
63
|
- lib/easy_json_matcher/validator.rb
|
@@ -63,7 +65,6 @@ files:
|
|
63
65
|
- lib/easy_json_matcher/value_validator.rb
|
64
66
|
- lib/easy_json_matcher/version.rb
|
65
67
|
- lib/tasks/jsonapi_matcher_tasks.rake
|
66
|
-
- test/date_format_test.rb
|
67
68
|
- test/dummy/README.rdoc
|
68
69
|
- test/dummy/Rakefile
|
69
70
|
- test/dummy/app/assets/javascripts/application.js
|
@@ -100,9 +101,12 @@ files:
|
|
100
101
|
- test/dummy/public/422.html
|
101
102
|
- test/dummy/public/500.html
|
102
103
|
- test/dummy/public/favicon.ico
|
104
|
+
- test/easy_json_matcher_test.rb
|
103
105
|
- test/json_api_home.txt
|
104
|
-
- test/
|
106
|
+
- test/managing_schemas_test.rb
|
107
|
+
- test/required_validation_test.rb
|
105
108
|
- test/test_helper.rb
|
109
|
+
- test/validating_arrays_test.rb
|
106
110
|
homepage: https://github.com/wjdhamilton/easy-json-matcher
|
107
111
|
licenses:
|
108
112
|
- MIT
|
@@ -118,9 +122,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
118
122
|
version: '0'
|
119
123
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
120
124
|
requirements:
|
121
|
-
- - "
|
125
|
+
- - ">"
|
122
126
|
- !ruby/object:Gem::Version
|
123
|
-
version:
|
127
|
+
version: 1.3.1
|
124
128
|
requirements: []
|
125
129
|
rubyforge_project:
|
126
130
|
rubygems_version: 2.2.2
|
@@ -128,10 +132,12 @@ signing_key:
|
|
128
132
|
specification_version: 4
|
129
133
|
summary: Easily test your JSON output with templates and Schemas
|
130
134
|
test_files:
|
131
|
-
- test/
|
135
|
+
- test/required_validation_test.rb
|
136
|
+
- test/validating_arrays_test.rb
|
137
|
+
- test/easy_json_matcher_test.rb
|
132
138
|
- test/json_api_home.txt
|
139
|
+
- test/managing_schemas_test.rb
|
133
140
|
- test/test_helper.rb
|
134
|
-
- test/jsonapi_matcher_test.rb
|
135
141
|
- test/dummy/config.ru
|
136
142
|
- test/dummy/bin/rails
|
137
143
|
- test/dummy/bin/bundle
|
data/test/date_format_test.rb
DELETED
File without changes
|