@@ -106,12 +106,51 @@ def test_addressNL_field_regex_pattern_success(self):
106
106
107
107
self .assertTrue (is_valid )
108
108
109
- def test_missing_keys (self ):
109
+ def test_missing_keys_when_component_optional (self ):
110
110
component : AddressNLComponent = {
111
111
"key" : "addressNl" ,
112
112
"type" : "addressNL" ,
113
113
"label" : "AddressNL missing keys" ,
114
114
"deriveAddress" : False ,
115
+ "validate" : {"required" : False },
116
+ }
117
+
118
+ data = {
119
+ "addressNl" : {
120
+ "houseLetter" : "A" ,
121
+ }
122
+ }
123
+
124
+ is_valid , _ = validate_formio_data (component , data )
125
+
126
+ self .assertTrue (is_valid )
127
+
128
+ def test_missing_keys_when_autofill_enabled_and_component_optional (self ):
129
+ component : AddressNLComponent = {
130
+ "key" : "addressNl" ,
131
+ "type" : "addressNL" ,
132
+ "label" : "AddressNL missing keys" ,
133
+ "deriveAddress" : True ,
134
+ "validate" : {"required" : False },
135
+ }
136
+
137
+ data = {
138
+ "addressNl" : {
139
+ "houseLetter" : "A" ,
140
+ }
141
+ }
142
+
143
+ is_valid , _ = validate_formio_data (component , data )
144
+
145
+ self .assertTrue (is_valid )
146
+
147
+ def test_missing_keys_when_component_required (self ):
148
+ component : AddressNLComponent = {
149
+ "key" : "addressNl" ,
150
+ "type" : "addressNL" ,
151
+ "label" : "AddressNL missing keys" ,
152
+ "deriveAddress" : True ,
153
+ "validate" : {"required" : True },
115
154
}
116
155
117
156
invalid_values = {
@@ -124,10 +163,14 @@ def test_missing_keys(self):
124
163
125
164
postcode_error = extract_error (errors ["addressNl" ], "postcode" )
126
165
house_number_error = extract_error (errors ["addressNl" ], "houseNumber" )
166
+ street_name_error = extract_error (errors ["addressNl" ], "streetName" )
167
+ city_error = extract_error (errors ["addressNl" ], "city" )
127
168
128
169
self .assertFalse (is_valid )
129
170
self .assertEqual (postcode_error .code , "required" )
130
171
self .assertEqual (house_number_error .code , "required" )
172
+ self .assertEqual (street_name_error .code , "required" )
173
+ self .assertEqual (city_error .code , "required" )
131
174
132
175
def test_plugin_validator (self ):
133
176
with replace_validators_registry () as register :
@@ -138,7 +181,7 @@ def test_plugin_validator(self):
138
181
"type" : "addressNL" ,
139
182
"label" : "AddressNL plugin validator" ,
140
183
"deriveAddress" : False ,
141
- "validate" : {"plugins" : ["postcode_validator" ]},
184
+ "validate" : {"required" : False , " plugins" : ["postcode_validator" ]},
142
185
}
143
186
144
187
with self .subTest ("valid value" ):
@@ -150,6 +193,8 @@ def test_plugin_validator(self):
150
193
"houseNumber" : "3" ,
151
194
"houseLetter" : "A" ,
152
195
"houseNumberAddition" : "" ,
196
+ "streetName" : "Keizersgracht" ,
197
+ "city" : "Amsterdam" ,
153
198
}
154
199
},
155
200
)
@@ -171,12 +216,66 @@ def test_plugin_validator(self):
171
216
172
217
self .assertFalse (is_valid )
173
218
219
+ def test_non_required_postcode_is_required_if_houseNumber_is_provided (
220
+ self ,
221
+ ):
222
+ component : AddressNLComponent = {
223
+ "key" : "addressNl" ,
224
+ "type" : "addressNL" ,
225
+ "label" : "AddressNL" ,
226
+ "deriveAddress" : False ,
227
+ }
228
+
229
+ invalid_values = {
230
+ "addressNl" : {
231
+ "postcode" : "" ,
232
+ "houseNumber" : "117" ,
233
+ "houseLetter" : "" ,
234
+ "houseNumberAddition" : "" ,
235
+ "city" : "Amsterdam" ,
236
+ "streetName" : "" ,
237
+ }
238
+ }
239
+
240
+ is_valid , errors = validate_formio_data (component , invalid_values )
241
+ postcode_error = extract_error (errors ["addressNl" ], "postcode" )
242
+
243
+ self .assertFalse (is_valid )
244
+ self .assertEqual (postcode_error .code , "blank" )
245
+
246
+ def test_non_required_house_number_is_required_if_postcode_is_provided (
247
+ self ,
248
+ ):
249
+ component : AddressNLComponent = {
250
+ "key" : "addressNl" ,
251
+ "type" : "addressNL" ,
252
+ "label" : "AddressNL" ,
253
+ "deriveAddress" : False ,
254
+ }
255
+
256
+ invalid_values = {
257
+ "addressNl" : {
258
+ "postcode" : "1234 AB" ,
259
+ "houseNumber" : "" ,
260
+ "houseLetter" : "" ,
261
+ "houseNumberAddition" : "" ,
262
+ "city" : "Amsterdam" ,
263
+ "streetName" : "" ,
264
+ }
265
+ }
266
+
267
+ is_valid , errors = validate_formio_data (component , invalid_values )
268
+ house_number_error = extract_error (errors ["addressNl" ], "houseNumber" )
269
+
270
+ self .assertFalse (is_valid )
271
+ self .assertEqual (house_number_error .code , "blank" )
272
+
174
273
def test_addressNL_field_secret_success (self ):
175
274
component : AddressNLComponent = {
176
275
"key" : "addressNl" ,
177
276
"type" : "addressNL" ,
178
277
"label" : "AddressNL secret success" ,
179
- "deriveAddress" : False ,
278
+ "deriveAddress" : True ,
180
279
}
181
280
182
281
message = "1015CJ/117/Amsterdam/Keizersgracht"
@@ -190,6 +289,7 @@ def test_addressNL_field_secret_success(self):
190
289
"city" : "Amsterdam" ,
191
290
"streetName" : "Keizersgracht" ,
192
291
"secretStreetCity" : secret ,
292
+ "autoPopulated" : True ,
193
293
}
194
294
}
195
295
@@ -214,6 +314,7 @@ def test_addressNL_field_secret_failure(self):
214
314
"city" : "Amsterdam" ,
215
315
"streetName" : "Keizersgracht" ,
216
316
"secretStreetCity" : "invalid secret" ,
317
+ "autoPopulated" : True ,
217
318
}
218
319
}
219
320
@@ -224,6 +325,32 @@ def test_addressNL_field_secret_failure(self):
224
325
self .assertFalse (is_valid )
225
326
self .assertEqual (secret_error .code , "invalid" )
226
327
328
+ def test_addressNL_field_secret_not_used_when_manual_address (self ):
329
+ component : AddressNLComponent = {
330
+ "key" : "addressNl" ,
331
+ "type" : "addressNL" ,
332
+ "label" : "AddressNL secret failure" ,
333
+ "deriveAddress" : True ,
334
+ "validate" : {"required" : False },
335
+ }
336
+
337
+ data = {
338
+ "addressNl" : {
339
+ "postcode" : "1015CJ" ,
340
+ "houseNumber" : "117" ,
341
+ "houseLetter" : "" ,
342
+ "houseNumberAddition" : "" ,
343
+ "city" : "Amsterdam" ,
344
+ "streetName" : "Keizersgracht" ,
345
+ "secretStreetCity" : "a secret" ,
346
+ "autoPopulated" : False ,
347
+ }
348
+ }
349
+
350
+ is_valid , _ = validate_formio_data (component , data )
351
+
352
+ self .assertTrue (is_valid )
353
+
227
354
def test_addressNL_field_missing_city (self ):
228
355
component : AddressNLComponent = {
229
356
"key" : "addressNl" ,
0 commit comments