1 package spec
2
3 import (
4 "testing"
5
6 "github.com/go-openapi/swag"
7 "github.com/stretchr/testify/require"
8 )
9
10 func mkVal() SchemaValidations {
11 return SchemaValidations{
12 CommonValidations: CommonValidations{
13 Maximum: swag.Float64(2.5),
14 ExclusiveMaximum: true,
15 Minimum: swag.Float64(3.4),
16 ExclusiveMinimum: true,
17 MaxLength: swag.Int64(15),
18 MinLength: swag.Int64(16),
19 Pattern: "abc",
20 MaxItems: swag.Int64(17),
21 MinItems: swag.Int64(18),
22 UniqueItems: true,
23 MultipleOf: swag.Float64(4.4),
24 Enum: []interface{}{"a", 12.5},
25 },
26 PatternProperties: SchemaProperties{
27 "x": *BooleanProperty(),
28 "y": *BooleanProperty(),
29 },
30 MinProperties: swag.Int64(19),
31 MaxProperties: swag.Int64(20),
32 }
33 }
34
35 func TestValidations(t *testing.T) {
36
37 var cv CommonValidations
38 val := mkVal()
39 cv.SetValidations(val)
40
41 expectedCV := val.CommonValidations
42 require.EqualValues(t, expectedCV, cv)
43
44 require.True(t, cv.HasArrayValidations())
45 require.True(t, cv.HasNumberValidations())
46 require.True(t, cv.HasStringValidations())
47 require.True(t, cv.HasEnum())
48
49 cv.Enum = nil
50 require.False(t, cv.HasEnum())
51
52 cv.MaxLength = nil
53 require.True(t, cv.HasStringValidations())
54 cv.MinLength = nil
55 require.True(t, cv.HasStringValidations())
56 cv.Pattern = ""
57 require.False(t, cv.HasStringValidations())
58
59 cv.Minimum = nil
60 require.True(t, cv.HasNumberValidations())
61 cv.Maximum = nil
62 require.True(t, cv.HasNumberValidations())
63 cv.MultipleOf = nil
64 require.False(t, cv.HasNumberValidations())
65
66 cv.MaxItems = nil
67 require.True(t, cv.HasArrayValidations())
68 cv.MinItems = nil
69 require.True(t, cv.HasArrayValidations())
70 cv.UniqueItems = false
71 require.False(t, cv.HasArrayValidations())
72
73 val = mkVal()
74 expectedSV := val
75 expectedSV.PatternProperties = nil
76 expectedSV.MinProperties = nil
77 expectedSV.MaxProperties = nil
78
79 val = mkVal()
80 cv.SetValidations(val)
81 require.EqualValues(t, expectedSV, cv.Validations())
82
83 var sv SchemaValidations
84 val = mkVal()
85 sv.SetValidations(val)
86
87 expectedSV = val
88 require.EqualValues(t, expectedSV, sv)
89
90 require.EqualValues(t, val, sv.Validations())
91
92 require.True(t, sv.HasObjectValidations())
93 sv.MinProperties = nil
94 require.True(t, sv.HasObjectValidations())
95 sv.MaxProperties = nil
96 require.True(t, sv.HasObjectValidations())
97 sv.PatternProperties = nil
98 require.False(t, sv.HasObjectValidations())
99
100 val = mkVal()
101 cv.SetValidations(val)
102 cv.ClearStringValidations()
103 require.False(t, cv.HasStringValidations())
104
105 cv.ClearNumberValidations()
106 require.False(t, cv.HasNumberValidations())
107
108 cv.ClearArrayValidations()
109 require.False(t, cv.HasArrayValidations())
110
111 sv.SetValidations(val)
112 sv.ClearObjectValidations(func(validation string, _ interface{}) {
113 switch validation {
114 case "minProperties", "maxProperties", "patternProperties":
115 return
116 default:
117 t.Logf("unexpected validation %s", validation)
118 t.Fail()
119 }
120 })
121 require.Falsef(t, sv.HasObjectValidations(), "%#v", sv)
122 }
123
View as plain text