-
Notifications
You must be signed in to change notification settings - Fork 112
/
Copy pathobject_test.go
113 lines (108 loc) · 3.6 KB
/
object_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
package schema_test
import (
"testing"
"github.com/rs/rest-layer/schema"
"github.com/stretchr/testify/assert"
)
func TestObjectCompile(t *testing.T) {
cases := []referenceCompilerTestCase{
{
Name: "{}",
Compiler: &schema.Object{},
ReferenceChecker: fakeReferenceChecker{},
Error: "no schema defined",
},
{
Name: "{Schema:{}}",
Compiler: &schema.Object{Schema: &schema.Schema{}},
ReferenceChecker: fakeReferenceChecker{},
},
{
Name: `{Schema:{"foo":String}}`,
Compiler: &schema.Object{Schema: &schema.Schema{Fields: schema.Fields{
"foo": {Validator: &schema.String{}},
}}},
ReferenceChecker: fakeReferenceChecker{},
},
{
Name: `{Schema:{"foo":Reference{Path:valid}}}`,
Compiler: &schema.Object{Schema: &schema.Schema{Fields: schema.Fields{
"foo": {Validator: &schema.Reference{Path: "bar"}},
}}},
ReferenceChecker: fakeReferenceChecker{"bar": {SchemaValidator: &schema.Schema{}}},
},
{
Name: `{Schema:{"foo":Reference{Path:invalid}}}`,
Compiler: &schema.Object{Schema: &schema.Schema{Fields: schema.Fields{
"foo": {Validator: &schema.Reference{Path: "foobar"}},
}}},
ReferenceChecker: fakeReferenceChecker{"bar": {SchemaValidator: &schema.Schema{}}},
Error: "foo: can't find resource 'foobar'",
},
}
for i := range cases {
cases[i].Run(t)
}
}
func TestObjectValidate(t *testing.T) {
cases := []fieldValidatorTestCase{
{
Name: `{Schema:{"foo":String}}.Validate(valid)`,
Validator: &schema.Object{Schema: &schema.Schema{Fields: schema.Fields{
"foo": {Validator: &schema.String{}},
}}},
Input: map[string]interface{}{"foo": "hello"},
Expect: map[string]interface{}{"foo": "hello"},
},
{
Name: `{Schema:{"foo":String}}.Validate(invalid)`,
Validator: &schema.Object{Schema: &schema.Schema{Fields: schema.Fields{
"foo": {Validator: &schema.String{}},
}}},
Input: map[string]interface{}{"foo": 1},
Error: "foo is [not a string]",
},
{
Name: `{Schema:{"test":String,"count:Integer"}}.Validate(doubleError)`,
Validator: &schema.Object{Schema: &schema.Schema{Fields: schema.Fields{
"test": {Validator: &schema.String{}},
"count": {Validator: &schema.Integer{}},
}}},
Input: map[string]interface{}{"test": 1, "count": "hello"},
Error: "count is [not an integer], test is [not a string]",
},
{
Name: `{Schema:{"foo":Reference{Path:valid}}}.Validate(valid)`,
Validator: &schema.Object{Schema: &schema.Schema{Fields: schema.Fields{
"foo": {Validator: &schema.Reference{Path: "bar"}},
}}},
ReferenceChecker: fakeReferenceChecker{
"bar": {IDs: []interface{}{"a", "b"}, Validator: &schema.String{}, SchemaValidator: &schema.Schema{}},
},
Input: map[string]interface{}{"foo": "a"},
Expect: map[string]interface{}{"foo": "a"},
},
{
Name: `{Schema:{"foo":Reference{Path:valid}}}.Validate(invalid)`,
Validator: &schema.Object{Schema: &schema.Schema{Fields: schema.Fields{
"foo": {Validator: &schema.Reference{Path: "bar"}},
}}},
ReferenceChecker: fakeReferenceChecker{
"bar": {IDs: []interface{}{"a", "b"}, Validator: &schema.String{}, SchemaValidator: &schema.Schema{}},
},
Input: map[string]interface{}{"foo": "c"},
Error: "foo is [not found]",
},
}
for i := range cases {
cases[i].Run(t)
}
}
func TestObjectValidatorErrorType(t *testing.T) {
obj := map[string]interface{}{"foo": 1}
v := &schema.Object{Schema: &schema.Schema{Fields: schema.Fields{
"foo": {Validator: &schema.String{}},
}}}
_, err := v.Validate(obj)
assert.IsType(t, schema.ErrorMap{}, err, "Unexpected error type")
}