Search Apps Documentation Source Content File Folder Download Copy Actions Download

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}