3159 |
3159 |
assert formdata.get_criticality_level_object().name == 'green'
|
3160 |
3160 |
|
3161 |
3161 |
|
3162 |
|
def test_geolocate_address(pub):
|
|
3162 |
def test_geolocate_address(two_pubs):
|
|
3163 |
if two_pubs.is_using_postgresql():
|
|
3164 |
two_pubs.loggederror_class.wipe()
|
3163 |
3165 |
formdef = FormDef()
|
3164 |
3166 |
formdef.geolocations = {'base': 'bla'}
|
3165 |
3167 |
formdef.name = 'baz'
|
... | ... | |
3172 |
3174 |
formdata.data = {'1': '169 rue du chateau'}
|
3173 |
3175 |
formdata.just_created()
|
3174 |
3176 |
formdata.store()
|
3175 |
|
pub.substitutions.feed(formdata)
|
|
3177 |
two_pubs.substitutions.feed(formdata)
|
3176 |
3178 |
|
3177 |
3179 |
item = GeolocateWorkflowStatusItem()
|
3178 |
3180 |
item.method = 'address_string'
|
... | ... | |
3191 |
3193 |
assert int(formdata.geolocations['base']['lat']) == 48
|
3192 |
3194 |
assert int(formdata.geolocations['base']['lon']) == 2
|
3193 |
3195 |
|
3194 |
|
pub.load_site_options()
|
3195 |
|
pub.site_options.set('options', 'nominatim_key', 'KEY')
|
|
3196 |
two_pubs.load_site_options()
|
|
3197 |
two_pubs.site_options.set('options', 'nominatim_key', 'KEY')
|
3196 |
3198 |
with mock.patch('wcs.wf.geolocate.http_get_page') as http_get_page:
|
3197 |
3199 |
http_get_page.return_value = (
|
3198 |
3200 |
None,
|
... | ... | |
3207 |
3209 |
assert int(formdata.geolocations['base']['lat']) == 48
|
3208 |
3210 |
assert int(formdata.geolocations['base']['lon']) == 2
|
3209 |
3211 |
|
3210 |
|
pub.load_site_options()
|
3211 |
|
pub.site_options.set('options', 'geocoding_service_url', 'http://example.net/')
|
|
3212 |
two_pubs.load_site_options()
|
|
3213 |
two_pubs.site_options.set('options', 'geocoding_service_url', 'http://example.net/')
|
3212 |
3214 |
with mock.patch('wcs.wf.geolocate.http_get_page') as http_get_page:
|
3213 |
3215 |
http_get_page.return_value = (
|
3214 |
3216 |
None,
|
... | ... | |
3219 |
3221 |
item.perform(formdata)
|
3220 |
3222 |
assert 'http://example.net/?q=' in http_get_page.call_args[0][0]
|
3221 |
3223 |
|
3222 |
|
pub.site_options.set('options', 'geocoding_service_url', 'http://example.net/?param=value')
|
|
3224 |
two_pubs.site_options.set('options', 'geocoding_service_url', 'http://example.net/?param=value')
|
3223 |
3225 |
with mock.patch('wcs.wf.geolocate.http_get_page') as http_get_page:
|
3224 |
3226 |
http_get_page.return_value = (
|
3225 |
3227 |
None,
|
... | ... | |
3235 |
3237 |
formdata.geolocations = None
|
3236 |
3238 |
item.perform(formdata)
|
3237 |
3239 |
assert formdata.geolocations == {}
|
|
3240 |
if two_pubs.is_using_postgresql():
|
|
3241 |
assert two_pubs.loggederror_class.count() == 1
|
|
3242 |
logged_error = two_pubs.loggederror_class.select()[0]
|
|
3243 |
assert (
|
|
3244 |
logged_error.summary
|
|
3245 |
== 'error in template for address string [syntax error in ezt template: unclosed block at line 1 and column 24]'
|
|
3246 |
)
|
|
3247 |
assert logged_error.formdata_id == str(formdata.id)
|
|
3248 |
assert logged_error.exception_class == 'TemplateError'
|
|
3249 |
assert (
|
|
3250 |
logged_error.exception_message
|
|
3251 |
== 'syntax error in ezt template: unclosed block at line 1 and column 24'
|
|
3252 |
)
|
3238 |
3253 |
|
3239 |
3254 |
# check for None
|
3240 |
3255 |
item.address_string = '=None'
|
... | ... | |
3242 |
3257 |
item.perform(formdata)
|
3243 |
3258 |
assert formdata.geolocations == {}
|
3244 |
3259 |
|
3245 |
|
# check for nominatim server error
|
3246 |
|
formdata.geolocations = None
|
3247 |
|
with mock.patch('wcs.wf.geolocate.http_get_page') as http_get_page:
|
3248 |
|
http_get_page.return_value = (
|
3249 |
|
None,
|
3250 |
|
500,
|
3251 |
|
force_bytes(json.dumps([{'lat': '48.8337085', 'lon': '2.3233693'}])),
|
3252 |
|
None,
|
3253 |
|
)
|
3254 |
|
item.perform(formdata)
|
3255 |
|
assert formdata.geolocations == {}
|
3256 |
|
|
3257 |
3260 |
# check for nominatim returning an empty result set
|
|
3261 |
item.address_string = '[form_var_string], paris, france'
|
3258 |
3262 |
formdata.geolocations = None
|
3259 |
3263 |
with mock.patch('wcs.wf.geolocate.http_get_page') as http_get_page:
|
3260 |
3264 |
http_get_page.return_value = (None, 200, force_bytes(json.dumps([])), None)
|
... | ... | |
3271 |
3275 |
# check for nominatim connection error
|
3272 |
3276 |
formdata.geolocations = None
|
3273 |
3277 |
with mock.patch('wcs.wf.geolocate.http_get_page') as http_get_page:
|
3274 |
|
http_get_page.side_effect = ConnectionError
|
|
3278 |
http_get_page.side_effect = ConnectionError('some error')
|
3275 |
3279 |
item.perform(formdata)
|
3276 |
3280 |
assert formdata.geolocations == {}
|
|
3281 |
if two_pubs.is_using_postgresql():
|
|
3282 |
assert two_pubs.loggederror_class.count() == 2
|
|
3283 |
logged_error = two_pubs.loggederror_class.select()[1]
|
|
3284 |
assert logged_error.summary == 'error calling geocoding service [some error]'
|
|
3285 |
assert logged_error.formdata_id == str(formdata.id)
|
|
3286 |
assert logged_error.exception_class == 'ConnectionError'
|
|
3287 |
assert logged_error.exception_message == 'some error'
|
3277 |
3288 |
|
3278 |
3289 |
|
3279 |
3290 |
def test_geolocate_image(pub):
|