validate_test.gno
2.87 Kb ยท 141 lines
1package forms
2
3import (
4 "testing"
5)
6
7func TestAnswerFormInvalidForm(t *testing.T) {
8 testing.SetRealm(testing.NewUserRealm("g1user"))
9 db := NewDB()
10
11 dataAllTypes := `[
12 {
13 "label": "Name",
14 "fieldType": "string",
15 "required": true
16 },
17 {
18 "label": "Age",
19 "fieldType": "number",
20 "required": false
21 },
22 {
23 "label": "Is this a test?",
24 "fieldType": "boolean",
25 "required": false
26 },
27 {
28 "label": "Favorite Food",
29 "fieldType": "[Pizza|Schnitzel|Burger]",
30 "required": true
31 },
32 {
33 "label": "Favorite Foods",
34 "fieldType": "{Pizza|Schnitzel|Burger}",
35 "required": true
36 }
37 ]`
38 dataOneRequiredText := `[
39 {
40 "label": "Name",
41 "fieldType": "string",
42 "required": true
43 }
44 ]`
45
46 tests := []struct {
47 name string
48 answer string
49 expectPanic bool
50 data string
51 }{
52 {
53 name: "correct",
54 answer: `["Alex", 21, true, 0, [0, 1]]`,
55 expectPanic: false,
56 data: dataAllTypes,
57 },
58 {
59 name: "invalid string",
60 answer: `[0, 21, true, 0, [0, 1]`,
61 expectPanic: true,
62 data: dataAllTypes,
63 },
64 {
65 name: "invalid number",
66 answer: `["Alex", "21", true, 0, [0, 1]]`,
67 expectPanic: true,
68 data: dataAllTypes,
69 },
70 {
71 name: "invalid boolean",
72 answer: `["Alex", 21, 1, 0, [0, 1]]`,
73 expectPanic: true,
74 data: dataAllTypes,
75 },
76 {
77 name: "invalid choice",
78 answer: `["Alex", 21, true, 10, [0, 1]]`,
79 expectPanic: true,
80 data: dataAllTypes,
81 },
82 {
83 name: "invalid multi-choice 1",
84 answer: `["Alex", 21, true, 0, [0, 1, 2, 3, 4, 5]]`,
85 expectPanic: true,
86 data: dataAllTypes,
87 },
88 {
89 name: "invalid multi-choice 2",
90 answer: `["Alex", 21, true, 0, [5]]`,
91 expectPanic: true,
92 data: dataAllTypes,
93 },
94 {
95 name: "invalid multi-choice 3",
96 answer: `["Alex", 21, true, 0, 0]`,
97 expectPanic: true,
98 data: dataAllTypes,
99 },
100 {
101 name: "required string",
102 answer: `["", 21, true, 0, [0, 1]]`,
103 expectPanic: true,
104 data: dataAllTypes,
105 },
106 {
107 name: "unrequired number",
108 answer: `["Alex", null, true, 0, [0, 1]]`,
109 expectPanic: false,
110 data: dataAllTypes,
111 },
112 {
113 name: "correct one field",
114 answer: `["Alex"]`,
115 expectPanic: false,
116 data: dataOneRequiredText,
117 },
118 }
119
120 for _, tt := range tests {
121 t.Run(tt.name, func(t *testing.T) {
122 formID, err := db.CreateForm("Test Form", "Test Description", "", "", tt.data)
123 if err != nil {
124 t.Error(err)
125 }
126
127 defer func() {
128 if r := recover(); r != nil {
129 if tt.expectPanic {
130 return
131 }
132 t.Errorf("%s panic occurred when not expected: %v", tt.name, r)
133 } else if tt.expectPanic {
134 t.Errorf("%s expected panic but didn't occur", tt.name)
135 }
136 }()
137
138 db.SubmitForm(formID, tt.answer)
139 })
140 }
141}