easy_json_matcher 0.2.2 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/easy_json_matcher/array_content_validator.rb +22 -0
- data/lib/easy_json_matcher/array_generator.rb +41 -0
- data/lib/easy_json_matcher/array_validator.rb +11 -76
- data/lib/easy_json_matcher/attribute_generator.rb +37 -0
- data/lib/easy_json_matcher/attribute_type_methods.rb +29 -0
- data/lib/easy_json_matcher/coercion_error.rb +10 -0
- data/lib/easy_json_matcher/content_wrapper.rb +2 -4
- data/lib/easy_json_matcher/{validation_error.rb → easy_json_matcher_error.rb} +2 -1
- data/lib/easy_json_matcher/json_coercer.rb +34 -0
- data/lib/easy_json_matcher/node.rb +10 -114
- data/lib/easy_json_matcher/node_generator.rb +58 -0
- data/lib/easy_json_matcher/schema_generator.rb +47 -71
- data/lib/easy_json_matcher/schema_library.rb +8 -11
- data/lib/easy_json_matcher/unknown_validation_step_error.rb +10 -0
- data/lib/easy_json_matcher/validation_chain_factory.rb +48 -0
- data/lib/easy_json_matcher/validation_rules.rb +59 -0
- data/lib/easy_json_matcher/validation_step.rb +36 -0
- data/lib/easy_json_matcher/validator.rb +12 -87
- data/lib/easy_json_matcher/validator_set.rb +31 -0
- data/lib/easy_json_matcher/version.rb +1 -1
- data/lib/easy_json_matcher.rb +6 -2
- data/lib/easy_json_matcher.rb~ +5 -0
- data/test/array_content_validator_test.rb +17 -0
- data/test/custom_validations_test.rb +17 -17
- data/test/global_validation_options_test.rb +39 -44
- data/test/json_coercer_test.rb +25 -0
- data/test/managing_schemas_test.rb +53 -52
- data/test/node_test.rb +28 -0
- data/test/primitives_boolean_test.rb +27 -0
- data/test/primitives_date_test.rb +28 -0
- data/test/primitives_number_test.rb +27 -0
- data/test/primitives_object_test.rb +27 -0
- data/test/primitives_string_test.rb +27 -0
- data/test/primtives_value_test.rb +23 -0
- data/test/required_validation_test.rb +7 -7
- data/test/schema_generator_test.rb +23 -0
- data/test/strict_mode_test.rb +25 -54
- data/test/test_helper.rb +8 -6
- data/test/validating_arrays_test.rb +40 -132
- data/test/validation_chain_factory_test.rb +45 -0
- data/test/validation_chain_test_helper.rb +13 -0
- data/test/validation_step_array_test.rb +27 -0
- data/test/validation_step_boolean_test.rb +19 -0
- data/test/validation_step_date_test.rb +20 -0
- data/test/validation_step_not_required_test.rb +35 -0
- data/test/validation_step_number_test.rb +23 -0
- data/test/validation_step_object_test.rb +20 -0
- data/test/validation_step_required_test.rb +19 -0
- data/test/validation_step_string_test.rb +20 -0
- data/test/validation_step_test.rb +55 -0
- data/test/validation_step_value_test.rb +15 -0
- data/test/validator_set_test.rb +49 -0
- data/test/validator_test.rb +44 -0
- metadata +64 -26
- data/lib/easy_json_matcher/boolean_validator.rb +0 -14
- data/lib/easy_json_matcher/date_validator.rb +0 -44
- data/lib/easy_json_matcher/node.rb~ +0 -121
- data/lib/easy_json_matcher/number_validator.rb +0 -22
- data/lib/easy_json_matcher/object_validator.rb +0 -12
- data/lib/easy_json_matcher/schema_generator.rb~ +0 -104
- data/lib/easy_json_matcher/string_validator.rb +0 -16
- data/lib/easy_json_matcher/validator.rb~ +0 -99
- data/lib/easy_json_matcher/validator_factory.rb +0 -76
- data/lib/easy_json_matcher/value_validator.rb +0 -10
- data/lib/easy_json_matcher/version.rb~ +0 -3
- data/test/custom_validations_test.rb~ +0 -25
- data/test/easy_json_matcher_test.rb +0 -262
- data/test/easy_json_matcher_test.rb~ +0 -262
- data/test/error_messages_test.rb +0 -148
- data/test/reset_test.rb +0 -32
- data/test/reset_test.rb~ +0 -32
@@ -0,0 +1,35 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
require "validation_chain_test_helper"
|
3
|
+
|
4
|
+
include ValidationChainTestHelper
|
5
|
+
|
6
|
+
module EasyJSONMatcher
|
7
|
+
|
8
|
+
describe "Not Required Validation Step" do
|
9
|
+
|
10
|
+
describe "should halt the chain if the value is missing" do
|
11
|
+
|
12
|
+
it "should halt the chain if the value is missing" do
|
13
|
+
head, tail = get_validation_chain
|
14
|
+
test_value = nil
|
15
|
+
head.check(value: test_value).must_be :empty?
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should allow the chain to continue if the value is present" do
|
19
|
+
head, tail = get_validation_chain
|
20
|
+
test_value = 1
|
21
|
+
tail.expect(:check, [], [{ value: 1 }])
|
22
|
+
tail.expect(:nil?, false)
|
23
|
+
head.check(value: test_value)
|
24
|
+
tail.verify
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def get_validation_chain
|
29
|
+
head = ValidationChainFactory.get_step_for validating: :not_required
|
30
|
+
tail = Minitest::Mock.new
|
31
|
+
head >> tail
|
32
|
+
return head, tail
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
require "validation_chain_test_helper"
|
3
|
+
|
4
|
+
include ValidationChainTestHelper
|
5
|
+
|
6
|
+
describe "Number Validation Step" do
|
7
|
+
|
8
|
+
describe "should be able to return a instance that validates numbers" do
|
9
|
+
|
10
|
+
it "the instance should not return any errors for a valid number" do
|
11
|
+
require 'bigdecimal'
|
12
|
+
(-10..10).step(0.01) do |n|
|
13
|
+
n = BigDecimal.new(n,3).to_f
|
14
|
+
assert_chain_verifies(type: :number, test_value: n, outcome: true )
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
it "the instance should return errors for invalid numbers" do
|
19
|
+
no_number = "hello"
|
20
|
+
assert_chain_verifies(type: :number, test_value: no_number, outcome: false)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
require "validation_chain_test_helper"
|
3
|
+
|
4
|
+
include ValidationChainTestHelper
|
5
|
+
|
6
|
+
describe "Object validation step" do
|
7
|
+
|
8
|
+
describe "should be able to return an instance that validates objects" do
|
9
|
+
|
10
|
+
it "the instance should not return any errors for a valid object" do
|
11
|
+
test_value = JSON.parse({}.to_json) # Yes, I know this is odd
|
12
|
+
assert_chain_verifies(type: :object, test_value: test_value, outcome: true)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "the instance should return errors for an invalid object" do
|
16
|
+
no_object = String.new
|
17
|
+
assert_chain_verifies(type: :object, test_value: no_object, outcome: false)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
require "validation_chain_test_helper"
|
3
|
+
|
4
|
+
include ValidationChainTestHelper
|
5
|
+
|
6
|
+
describe "Required Validation Step" do
|
7
|
+
|
8
|
+
describe ":required option" do
|
9
|
+
|
10
|
+
it "should not return any errors if the value is present" do
|
11
|
+
present = 1
|
12
|
+
assert_chain_verifies type: :required, test_value: present, outcome: true
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should return an error if a value is not present" do
|
16
|
+
[nil].each { |v| assert_chain_verifies type: :required, test_value: v, outcome: false }
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
require "validation_chain_test_helper"
|
3
|
+
|
4
|
+
include ValidationChainTestHelper
|
5
|
+
|
6
|
+
describe "String Validation Chain" do
|
7
|
+
|
8
|
+
describe "should be able to retun an instance that validates strings" do
|
9
|
+
|
10
|
+
it "the instance should not return any errors for a valid string" do
|
11
|
+
string = String.new
|
12
|
+
assert_chain_verifies(type: :string, test_value: string, outcome: true)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "the instance should return errors if the value is not a string" do
|
16
|
+
no_string = 1
|
17
|
+
assert_chain_verifies(type: :string, test_value: no_string, outcome: false)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
require "easy_json_matcher/validation_step"
|
3
|
+
|
4
|
+
module EasyJSONMatcher
|
5
|
+
|
6
|
+
class ValidationStepTest < ActiveSupport::TestCase
|
7
|
+
|
8
|
+
setup do
|
9
|
+
@subject = ValidationStep.new(verify_with: ->(value, errors) {} )
|
10
|
+
end
|
11
|
+
|
12
|
+
test "it_should_respond_to_check" do
|
13
|
+
assert_respond_to(@subject, :check)
|
14
|
+
end
|
15
|
+
|
16
|
+
test "It should allow the user to chain validation steps together" do
|
17
|
+
head = @subject
|
18
|
+
tail = MiniTest::Mock.new
|
19
|
+
test_value = "hello!"
|
20
|
+
head >> tail
|
21
|
+
tail.expect(:check, [], [Hash])
|
22
|
+
tail.expect(:nil?, false)
|
23
|
+
head.check(value: test_value)
|
24
|
+
tail.verify
|
25
|
+
end
|
26
|
+
|
27
|
+
test "It should send call to the verifier assigned to it" do
|
28
|
+
verifier = MiniTest::Mock.new
|
29
|
+
subject = ValidationStep.new(verify_with: verifier)
|
30
|
+
test_value = "verify me"
|
31
|
+
verifier.expect(:call, nil, [test_value, []])
|
32
|
+
subject.check(value: test_value)
|
33
|
+
end
|
34
|
+
|
35
|
+
test "If the verifier returns :stop the chain will be halted" do
|
36
|
+
verifier = ->(value, errors) { false }
|
37
|
+
middle = ValidationStep.new(verify_with: verifier)
|
38
|
+
tail = MiniTest::Mock.new
|
39
|
+
test_value = "verify me"
|
40
|
+
@subject >> middle >> tail
|
41
|
+
@subject.check(value: test_value)
|
42
|
+
# There is no official way to check that something wasn't called in
|
43
|
+
# MiniTest, so we'll just have to assume that since verify passes, then
|
44
|
+
# check wasn't called in tail
|
45
|
+
tail.verify
|
46
|
+
end
|
47
|
+
|
48
|
+
test "It should return an array of errors found" do
|
49
|
+
head = ValidationStep.new(verify_with: ->(value, errors) { errors << 1 })
|
50
|
+
tail = ValidationStep.new(verify_with: ->(value, errors) { errors << 2 })
|
51
|
+
head >> tail
|
52
|
+
assert(head.check(value: "Oh! Mrs. Mogs") == [1, 2])
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
require "validation_chain_test_helper"
|
3
|
+
|
4
|
+
include ValidationChainTestHelper
|
5
|
+
|
6
|
+
describe "Value Validation Step" do
|
7
|
+
|
8
|
+
describe "should be able to return an instance that verifies values" do
|
9
|
+
|
10
|
+
it "should not return any errors for a valid value, which includes nil" do
|
11
|
+
value = nil
|
12
|
+
assert_chain_verifies type: :value, test_value: value, outcome: true
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
require "easy_json_matcher/validator_set.rb"
|
3
|
+
|
4
|
+
module EasyJSONMatcher
|
5
|
+
|
6
|
+
describe ValidatorSet do
|
7
|
+
|
8
|
+
it "should hold other validators" do
|
9
|
+
test_val = Object.new
|
10
|
+
subject = ValidatorSet.new validators: { test: test_val }
|
11
|
+
subject.validators.values.include?(test_val).must_be :==, true
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should return true if all its validators validate their candidates" do
|
15
|
+
mock_validators = { key1: mock_validator, key2: mock_validator }
|
16
|
+
subject = ValidatorSet.new validators: mock_validators
|
17
|
+
subject.check(value: {}).must_be :empty?
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should return false if any of its validators find an invalid value" do
|
21
|
+
mock_validators = {
|
22
|
+
key1: mock_validator(validity: true),
|
23
|
+
key2: mock_validator(validity: false)
|
24
|
+
}
|
25
|
+
subject = ValidatorSet.new validators: mock_validators
|
26
|
+
subject.check(value: { key1: "test", key2: "test" }).wont_be :empty?
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should return error messages in a Array" do
|
30
|
+
subject = ValidatorSet.new validators: { invalid: mock_validator }
|
31
|
+
assert(subject.check(value: {}).is_a?(Array))
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should return the error messages for all its validators" do
|
35
|
+
error_validators = {
|
36
|
+
a: mock_validator(validity: false, error_message: "a"),
|
37
|
+
b: mock_validator(validity: false, error_message: "b")
|
38
|
+
}
|
39
|
+
subject = ValidatorSet.new(validators: error_validators)
|
40
|
+
expected_error_message = [{ a: ["a"], b: ["b"] }]
|
41
|
+
assert_equal(expected_error_message, subject.check(value: {}))
|
42
|
+
end
|
43
|
+
|
44
|
+
def mock_validator(validity: true, error_message: nil)
|
45
|
+
mock = MiniTest::Mock.new
|
46
|
+
mock.expect(:check, validity ? [] : [error_message], [Object])
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
Validator = EasyJSONMatcher::Validator
|
4
|
+
|
5
|
+
describe Validator do
|
6
|
+
|
7
|
+
describe "#valid?" do
|
8
|
+
|
9
|
+
before do
|
10
|
+
@v_step = Minitest::Mock.new
|
11
|
+
@subject = Validator.new(validate_with: @v_step)
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should use a ValidationStep chain to verify candidates" do
|
15
|
+
@v_step.expect(:check, {}, [Hash])
|
16
|
+
@subject.valid? candidate: Hash.new.to_json
|
17
|
+
@v_step.verify
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should return false if any errors are generated" do
|
21
|
+
@v_step.expect(:check, { a: 1, b: 2,c: 3 }, [Hash])
|
22
|
+
@subject.valid?(candidate: Hash.new.to_json).must_be :==, false
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should return true if no errors are generated" do
|
26
|
+
@v_step.expect(:check, {}, [Hash])
|
27
|
+
@subject.valid?(candidate: Hash.new.to_json).must_be :==, true
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe "#validate" do
|
32
|
+
|
33
|
+
before do
|
34
|
+
@v_step = Minitest::Mock.new
|
35
|
+
@subject = Validator.new(validate_with: @v_step)
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should call check on its verifier" do
|
39
|
+
@v_step.expect(:check, Hash.new, [Hash])
|
40
|
+
test_value = { a: 1, b: 2, c: 3 }.to_json
|
41
|
+
@subject.validate(candidate: test_value)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
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.
|
4
|
+
version: 0.3.0
|
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-
|
11
|
+
date: 2016-05-19 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Test your JSON output in Ruby, with a DSL that makes reasoning about
|
14
14
|
your JSON very straightforward. See the Homepage for docs.
|
@@ -21,41 +21,61 @@ files:
|
|
21
21
|
- MIT-LICENSE
|
22
22
|
- Rakefile
|
23
23
|
- lib/easy_json_matcher.rb
|
24
|
+
- lib/easy_json_matcher.rb~
|
25
|
+
- lib/easy_json_matcher/array_content_validator.rb
|
26
|
+
- lib/easy_json_matcher/array_generator.rb
|
24
27
|
- lib/easy_json_matcher/array_validator.rb
|
25
|
-
- lib/easy_json_matcher/
|
28
|
+
- lib/easy_json_matcher/attribute_generator.rb
|
29
|
+
- lib/easy_json_matcher/attribute_type_methods.rb
|
30
|
+
- lib/easy_json_matcher/coercion_error.rb
|
26
31
|
- lib/easy_json_matcher/content_wrapper.rb
|
27
|
-
- lib/easy_json_matcher/
|
32
|
+
- lib/easy_json_matcher/easy_json_matcher_error.rb
|
28
33
|
- lib/easy_json_matcher/exceptions.rb
|
34
|
+
- lib/easy_json_matcher/json_coercer.rb
|
29
35
|
- lib/easy_json_matcher/node.rb
|
30
|
-
- lib/easy_json_matcher/
|
31
|
-
- lib/easy_json_matcher/number_validator.rb
|
32
|
-
- lib/easy_json_matcher/object_validator.rb
|
36
|
+
- lib/easy_json_matcher/node_generator.rb
|
33
37
|
- lib/easy_json_matcher/schema_generator.rb
|
34
|
-
- lib/easy_json_matcher/schema_generator.rb~
|
35
38
|
- lib/easy_json_matcher/schema_library.rb
|
36
|
-
- lib/easy_json_matcher/
|
37
|
-
- lib/easy_json_matcher/
|
39
|
+
- lib/easy_json_matcher/unknown_validation_step_error.rb
|
40
|
+
- lib/easy_json_matcher/validation_chain_factory.rb
|
41
|
+
- lib/easy_json_matcher/validation_rules.rb
|
42
|
+
- lib/easy_json_matcher/validation_step.rb
|
38
43
|
- lib/easy_json_matcher/validator.rb
|
39
|
-
- lib/easy_json_matcher/
|
40
|
-
- lib/easy_json_matcher/validator_factory.rb
|
41
|
-
- lib/easy_json_matcher/value_validator.rb
|
44
|
+
- lib/easy_json_matcher/validator_set.rb
|
42
45
|
- lib/easy_json_matcher/version.rb
|
43
|
-
- lib/easy_json_matcher/version.rb~
|
44
46
|
- lib/tasks/jsonapi_matcher_tasks.rake
|
47
|
+
- test/array_content_validator_test.rb
|
45
48
|
- test/custom_validations_test.rb
|
46
|
-
- test/custom_validations_test.rb~
|
47
|
-
- test/easy_json_matcher_test.rb
|
48
|
-
- test/easy_json_matcher_test.rb~
|
49
|
-
- test/error_messages_test.rb
|
50
49
|
- test/global_validation_options_test.rb
|
51
50
|
- test/json_api_home.txt
|
51
|
+
- test/json_coercer_test.rb
|
52
52
|
- test/managing_schemas_test.rb
|
53
|
+
- test/node_test.rb
|
54
|
+
- test/primitives_boolean_test.rb
|
55
|
+
- test/primitives_date_test.rb
|
56
|
+
- test/primitives_number_test.rb
|
57
|
+
- test/primitives_object_test.rb
|
58
|
+
- test/primitives_string_test.rb
|
59
|
+
- test/primtives_value_test.rb
|
53
60
|
- test/required_validation_test.rb
|
54
|
-
- test/
|
55
|
-
- test/reset_test.rb~
|
61
|
+
- test/schema_generator_test.rb
|
56
62
|
- test/strict_mode_test.rb
|
57
63
|
- test/test_helper.rb
|
58
64
|
- test/validating_arrays_test.rb
|
65
|
+
- test/validation_chain_factory_test.rb
|
66
|
+
- test/validation_chain_test_helper.rb
|
67
|
+
- test/validation_step_array_test.rb
|
68
|
+
- test/validation_step_boolean_test.rb
|
69
|
+
- test/validation_step_date_test.rb
|
70
|
+
- test/validation_step_not_required_test.rb
|
71
|
+
- test/validation_step_number_test.rb
|
72
|
+
- test/validation_step_object_test.rb
|
73
|
+
- test/validation_step_required_test.rb
|
74
|
+
- test/validation_step_string_test.rb
|
75
|
+
- test/validation_step_test.rb
|
76
|
+
- test/validation_step_value_test.rb
|
77
|
+
- test/validator_set_test.rb
|
78
|
+
- test/validator_test.rb
|
59
79
|
homepage: https://github.com/wjdhamilton/easy-json-matcher
|
60
80
|
licenses:
|
61
81
|
- MIT
|
@@ -81,17 +101,35 @@ signing_key:
|
|
81
101
|
specification_version: 4
|
82
102
|
summary: Easily test your JSON output with templates and Schemas
|
83
103
|
test_files:
|
104
|
+
- test/array_content_validator_test.rb
|
84
105
|
- test/custom_validations_test.rb
|
85
|
-
- test/custom_validations_test.rb~
|
86
|
-
- test/easy_json_matcher_test.rb
|
87
|
-
- test/easy_json_matcher_test.rb~
|
88
|
-
- test/error_messages_test.rb
|
89
106
|
- test/global_validation_options_test.rb
|
90
107
|
- test/json_api_home.txt
|
108
|
+
- test/json_coercer_test.rb
|
91
109
|
- test/managing_schemas_test.rb
|
110
|
+
- test/node_test.rb
|
111
|
+
- test/primitives_boolean_test.rb
|
112
|
+
- test/primitives_date_test.rb
|
113
|
+
- test/primitives_number_test.rb
|
114
|
+
- test/primitives_object_test.rb
|
115
|
+
- test/primitives_string_test.rb
|
116
|
+
- test/primtives_value_test.rb
|
92
117
|
- test/required_validation_test.rb
|
93
|
-
- test/
|
94
|
-
- test/reset_test.rb~
|
118
|
+
- test/schema_generator_test.rb
|
95
119
|
- test/strict_mode_test.rb
|
96
120
|
- test/test_helper.rb
|
97
121
|
- test/validating_arrays_test.rb
|
122
|
+
- test/validation_chain_factory_test.rb
|
123
|
+
- test/validation_chain_test_helper.rb
|
124
|
+
- test/validation_step_array_test.rb
|
125
|
+
- test/validation_step_boolean_test.rb
|
126
|
+
- test/validation_step_date_test.rb
|
127
|
+
- test/validation_step_not_required_test.rb
|
128
|
+
- test/validation_step_number_test.rb
|
129
|
+
- test/validation_step_object_test.rb
|
130
|
+
- test/validation_step_required_test.rb
|
131
|
+
- test/validation_step_string_test.rb
|
132
|
+
- test/validation_step_test.rb
|
133
|
+
- test/validation_step_value_test.rb
|
134
|
+
- test/validator_set_test.rb
|
135
|
+
- test/validator_test.rb
|
@@ -1,14 +0,0 @@
|
|
1
|
-
require 'easy_json_matcher/validator'
|
2
|
-
module EasyJSONMatcher
|
3
|
-
class BooleanValidator < Validator
|
4
|
-
|
5
|
-
def _validate
|
6
|
-
errors << "#{content} is not a Boolean" unless _content_is_boolean?
|
7
|
-
end
|
8
|
-
|
9
|
-
def _content_is_boolean?
|
10
|
-
clazz = content.class
|
11
|
-
(clazz == TrueClass) || (clazz == FalseClass)
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
@@ -1,44 +0,0 @@
|
|
1
|
-
require 'easy_json_matcher/validator'
|
2
|
-
module EasyJSONMatcher
|
3
|
-
class DateValidator < Validator
|
4
|
-
|
5
|
-
attr_reader :string_validator, :date_format
|
6
|
-
DEFAULT_DATE_FORMAT = "%Y-%m-%d"
|
7
|
-
|
8
|
-
def initialize(opts = {})
|
9
|
-
super(opts)
|
10
|
-
@date_format = opts[:format]
|
11
|
-
@string_validator = _create_validator(type: :string)
|
12
|
-
end
|
13
|
-
|
14
|
-
def _validate
|
15
|
-
_validate_string
|
16
|
-
_validate_date
|
17
|
-
end
|
18
|
-
|
19
|
-
def _content_is_a_string?
|
20
|
-
string_validator.valid? content
|
21
|
-
end
|
22
|
-
|
23
|
-
def _content_is_a_date?
|
24
|
-
require 'date'
|
25
|
-
begin
|
26
|
-
Date.strptime(content, date_format)
|
27
|
-
rescue ArgumentError
|
28
|
-
false
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
def date_format
|
33
|
-
@date_format || DEFAULT_DATE_FORMAT
|
34
|
-
end
|
35
|
-
|
36
|
-
def _validate_string
|
37
|
-
errors << "#{content} must be provided as a String for Date validation" unless _content_is_a_string?
|
38
|
-
end
|
39
|
-
|
40
|
-
def _validate_date
|
41
|
-
errors << "#{content} is not a Date" unless _content_is_a_date?
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
@@ -1,121 +0,0 @@
|
|
1
|
-
require 'easy_json_matcher/validator_factory'
|
2
|
-
require 'json'
|
3
|
-
require 'easy_json_matcher/content_wrapper'
|
4
|
-
module EasyJSONMatcher
|
5
|
-
class Node < Validator
|
6
|
-
include ContentWrapper
|
7
|
-
|
8
|
-
attr_reader :validators, :validity, :strict
|
9
|
-
|
10
|
-
def initialize(opts: {})
|
11
|
-
super(options: opts)
|
12
|
-
@validators = []
|
13
|
-
@validity = true
|
14
|
-
end
|
15
|
-
|
16
|
-
def add_validator(validator)
|
17
|
-
validators << validator
|
18
|
-
end
|
19
|
-
|
20
|
-
def _post_initialise(options)
|
21
|
-
@strict = options[:strict]
|
22
|
-
end
|
23
|
-
|
24
|
-
def _validate
|
25
|
-
_validate_strict_keyset
|
26
|
-
validators.each do |val|
|
27
|
-
@validity = false unless _use_validator val
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
def reset!
|
32
|
-
errors.clear
|
33
|
-
validators.each(&:reset!)
|
34
|
-
end
|
35
|
-
|
36
|
-
def _validate_strict_keyset
|
37
|
-
_validate_keyset if strict
|
38
|
-
end
|
39
|
-
|
40
|
-
def _validate_keyset
|
41
|
-
unexpected_keys = keys - _expected_keys
|
42
|
-
errors << "#{unexpected_keys} found in addition to expected keys" unless unexpected_keys.empty?
|
43
|
-
end
|
44
|
-
|
45
|
-
def _expected_keys
|
46
|
-
validators.each_with_object([]) do |validator, keyset|
|
47
|
-
keyset << validator.key
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
def _use_validator(validator)
|
52
|
-
validator.valid? self
|
53
|
-
end
|
54
|
-
|
55
|
-
def _get_content_for(key)
|
56
|
-
content[key]
|
57
|
-
end
|
58
|
-
|
59
|
-
def _get_validator_for(key)
|
60
|
-
validators[key]
|
61
|
-
end
|
62
|
-
|
63
|
-
def _set_content(candidate)
|
64
|
-
@content = _is_root? ? _prep_root_content(candidate) : candidate[key]
|
65
|
-
end
|
66
|
-
|
67
|
-
def _is_root?
|
68
|
-
key.nil?
|
69
|
-
end
|
70
|
-
|
71
|
-
def get_errors
|
72
|
-
child_errors = _collect_child_errors
|
73
|
-
_wrap_errors(child_errors)
|
74
|
-
end
|
75
|
-
|
76
|
-
def _collect_child_errors
|
77
|
-
validators.each_with_object({}) do |val, container|
|
78
|
-
container.merge!(val.get_errors)
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
def _wrap_errors(child_errors)
|
83
|
-
_add_local_errors_to child_errors
|
84
|
-
unless _is_root?
|
85
|
-
_wrap_child_errors(child_errors)
|
86
|
-
else
|
87
|
-
_root_errors(child_errors)
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
def _add_local_errors_to(child_errors)
|
92
|
-
child_errors.merge!({node_errors_: errors}) unless errors.empty?
|
93
|
-
end
|
94
|
-
|
95
|
-
def _wrap_child_errors(child_errors)
|
96
|
-
errors_wrapper = {}
|
97
|
-
errors_wrapper[key] = child_errors
|
98
|
-
errors_wrapper
|
99
|
-
end
|
100
|
-
|
101
|
-
def _root_errors(child_errors)
|
102
|
-
errors.length > 0 ? {root: errors} : child_errors
|
103
|
-
end
|
104
|
-
|
105
|
-
def _prep_root_content(candidate)
|
106
|
-
candidate.is_a?(String) ? _parse_and_verify_json(candidate) : candidate
|
107
|
-
end
|
108
|
-
|
109
|
-
def _parse_and_verify_json(json)
|
110
|
-
begin
|
111
|
-
JSON.parse(json)
|
112
|
-
rescue JSON::ParserError
|
113
|
-
errors << '#{json} is not a valid JSON String'
|
114
|
-
end
|
115
|
-
end
|
116
|
-
|
117
|
-
def _no_errors?
|
118
|
-
validity && errors.empty?
|
119
|
-
end
|
120
|
-
end
|
121
|
-
end
|
@@ -1,22 +0,0 @@
|
|
1
|
-
# Asserts that a value is a double-precision floating point number in javascript format
|
2
|
-
require 'easy_json_matcher/validator'
|
3
|
-
module EasyJSONMatcher
|
4
|
-
|
5
|
-
class NumberValidator < Validator
|
6
|
-
|
7
|
-
def _validate
|
8
|
-
errors << "#{content} is not a Number" unless _content_is_a_number?
|
9
|
-
end
|
10
|
-
|
11
|
-
def _content_is_a_number?
|
12
|
-
begin
|
13
|
-
Kernel::Float(content)
|
14
|
-
true
|
15
|
-
rescue ArgumentError
|
16
|
-
false
|
17
|
-
rescue TypeError
|
18
|
-
false
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
@@ -1,12 +0,0 @@
|
|
1
|
-
require 'easy_json_matcher/validator'
|
2
|
-
module EasyJSONMatcher
|
3
|
-
class ObjectValidator < Validator
|
4
|
-
def _validate
|
5
|
-
_content_is_object?
|
6
|
-
end
|
7
|
-
|
8
|
-
def _content_is_object?
|
9
|
-
errors << "#{content} is not an Object" unless content.is_a? Hash
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|