@@ -110,6 +110,131 @@ func TestCantReadFile(t *testing.T) {
110
110
assert .Error (t , err , "Should have received error reading file" )
111
111
}
112
112
113
+ func TestIndexValidation (t * testing.T ) {
114
+
115
+ // Test valid index with field sorts
116
+ indexDef := []byte (`{"index":{"fields":[{"size":"desc"}, {"color":"desc"}]},"ddoc":"indexSizeSortName", "name":"indexSizeSortName","type":"json"}` )
117
+ _ , indexDefinition := isJSON (indexDef )
118
+ err := validateIndexJSON (indexDefinition )
119
+ assert .NoError (t , err )
120
+
121
+ // Test valid index without field sorts
122
+ indexDef = []byte (`{"index":{"fields":["size","color"]},"ddoc":"indexSizeSortName", "name":"indexSizeSortName","type":"json"}` )
123
+ _ , indexDefinition = isJSON (indexDef )
124
+ err = validateIndexJSON (indexDefinition )
125
+ assert .NoError (t , err )
126
+
127
+ // Test valid index without design doc, name and type
128
+ indexDef = []byte (`{"index":{"fields":["size","color"]}}` )
129
+ _ , indexDefinition = isJSON (indexDef )
130
+ err = validateIndexJSON (indexDefinition )
131
+ assert .NoError (t , err )
132
+
133
+ // Test valid index with partial filter selector (only tests that it will not return error if included)
134
+ indexDef = []byte (`{
135
+ "index": {
136
+ "partial_filter_selector": {
137
+ "status": {
138
+ "$ne": "archived"
139
+ }
140
+ },
141
+ "fields": ["type"]
142
+ },
143
+ "ddoc" : "type-not-archived",
144
+ "type" : "json"
145
+ }` )
146
+ _ , indexDefinition = isJSON (indexDef )
147
+ err = validateIndexJSON (indexDefinition )
148
+ assert .NoError (t , err )
149
+
150
+ }
151
+
152
+ func TestIndexValidationInvalidParameters (t * testing.T ) {
153
+
154
+ // Test numeric values passed in for parameters
155
+ indexDef := []byte (`{"index":{"fields":[{"size":"desc"}, {"color":"desc"}]},"ddoc":1, "name":"indexSizeSortName","type":"json"}` )
156
+ _ , indexDefinition := isJSON (indexDef )
157
+ err := validateIndexJSON (indexDefinition )
158
+ assert .Error (t , err , "Error should have been thrown for numeric design doc" )
159
+
160
+ // Test invalid design doc parameter
161
+ indexDef = []byte (`{"index":{"fields":["size","color"]},"ddoc1":"indexSizeSortName", "name":"indexSizeSortName","type":"json"}` )
162
+ _ , indexDefinition = isJSON (indexDef )
163
+ err = validateIndexJSON (indexDefinition )
164
+ assert .Error (t , err , "Error should have been thrown for invalid design doc parameter" )
165
+
166
+ // Test invalid name parameter
167
+ indexDef = []byte (`{"index":{"fields":["size","color"]},"ddoc":"indexSizeSortName", "name1":"indexSizeSortName","type":"json"}` )
168
+ _ , indexDefinition = isJSON (indexDef )
169
+ err = validateIndexJSON (indexDefinition )
170
+ assert .Error (t , err , "Error should have been thrown for invalid name parameter" )
171
+
172
+ // Test invalid type parameter, numeric
173
+ indexDef = []byte (`{"index":{"fields":["size","color"]},"ddoc":"indexSizeSortName", "name":"indexSizeSortName","type":1}` )
174
+ _ , indexDefinition = isJSON (indexDef )
175
+ err = validateIndexJSON (indexDefinition )
176
+ assert .Error (t , err , "Error should have been thrown for numeric type parameter" )
177
+
178
+ // Test invalid type parameter
179
+ indexDef = []byte (`{"index":{"fields":["size","color"]},"ddoc":"indexSizeSortName", "name":"indexSizeSortName","type":"text"}` )
180
+ _ , indexDefinition = isJSON (indexDef )
181
+ err = validateIndexJSON (indexDefinition )
182
+ assert .Error (t , err , "Error should have been thrown for invalid type parameter" )
183
+
184
+ // Test invalid index parameter
185
+ indexDef = []byte (`{"index1":{"fields":["size","color"]},"ddoc":"indexSizeSortName", "name":"indexSizeSortName","type":"json"}` )
186
+ _ , indexDefinition = isJSON (indexDef )
187
+ err = validateIndexJSON (indexDefinition )
188
+ assert .Error (t , err , "Error should have been thrown for invalid index parameter" )
189
+
190
+ // Test missing index parameter
191
+ indexDef = []byte (`{"ddoc":"indexSizeSortName", "name":"indexSizeSortName","type":"json"}` )
192
+ _ , indexDefinition = isJSON (indexDef )
193
+ err = validateIndexJSON (indexDefinition )
194
+ assert .Error (t , err , "Error should have been thrown for missing index parameter" )
195
+
196
+ }
197
+
198
+ func TestIndexValidationInvalidFields (t * testing.T ) {
199
+
200
+ // Test invalid fields parameter
201
+ indexDef := []byte (`{"index":{"fields1":[{"size":"desc"}, {"color":"desc"}]},"ddoc":"indexSizeSortName", "name":"indexSizeSortName","type":"json"}` )
202
+ _ , indexDefinition := isJSON (indexDef )
203
+ err := validateIndexJSON (indexDefinition )
204
+ assert .Error (t , err , "Error should have been thrown for invalid fields parameter" )
205
+
206
+ // Test invalid field name (numeric)
207
+ indexDef = []byte (`{"index":{"fields":["size", 1]},"ddoc1":"indexSizeSortName", "name":"indexSizeSortName","type":"json"}` )
208
+ _ , indexDefinition = isJSON (indexDef )
209
+ err = validateIndexJSON (indexDefinition )
210
+ assert .Error (t , err , "Error should have been thrown for field name defined as numeric" )
211
+
212
+ // Test invalid field sort
213
+ indexDef = []byte (`{"index":{"fields":[{"size":"desc1"}, {"color":"desc"}]},"ddoc":"indexSizeSortName", "name":"indexSizeSortName","type":"json"}` )
214
+ _ , indexDefinition = isJSON (indexDef )
215
+ err = validateIndexJSON (indexDefinition )
216
+ assert .Error (t , err , "Error should have been thrown for invalid field sort" )
217
+
218
+ // Test numeric in sort
219
+ indexDef = []byte (`{"index":{"fields":[{"size":1}, {"color":"desc"}]},"ddoc":"indexSizeSortName", "name":"indexSizeSortName","type":"json"}` )
220
+ _ , indexDefinition = isJSON (indexDef )
221
+ err = validateIndexJSON (indexDefinition )
222
+ assert .Error (t , err , "Error should have been thrown for a numeric in field sort" )
223
+
224
+ // Test invalid json for fields
225
+ indexDef = []byte (`{"index":{"fields":"size"},"ddoc":"indexSizeSortName", "name":"indexSizeSortName","type":"json"}` )
226
+ _ , indexDefinition = isJSON (indexDef )
227
+ err = validateIndexJSON (indexDefinition )
228
+ assert .Error (t , err , "Error should have been thrown for invalid field json" )
229
+
230
+ // Test missing JSON for fields
231
+ indexDef = []byte (`{"index":"fields","ddoc":"indexSizeSortName", "name":"indexSizeSortName","type":"json"}` )
232
+ _ , indexDefinition = isJSON (indexDef )
233
+ err = validateIndexJSON (indexDefinition )
234
+ assert .Error (t , err , "Error should have been thrown for missing JSON for fields" )
235
+
236
+ }
237
+
113
238
func cleanupDir (dir string ) error {
114
239
// clean up any previous files
115
240
err := os .RemoveAll (dir )
0 commit comments