diff --git a/passerelle/contrib/toulouse_maelis/models.py b/passerelle/contrib/toulouse_maelis/models.py index c3df9341..76bcbcd0 100644 --- a/passerelle/contrib/toulouse_maelis/models.py +++ b/passerelle/contrib/toulouse_maelis/models.py @@ -89,7 +89,7 @@ class ToulouseMaelis(BaseResource, HTTPResource): def update_referential(self, referential_name, data, id_key, text_key): last_update = now() - for item in data: + for item in data or []: text = item[text_key] or '' if isinstance(text, int): text = str(text) diff --git a/tests/data/toulouse_maelis/R_read_ape_indicator_list_empty.xml b/tests/data/toulouse_maelis/R_read_ape_indicator_list_empty.xml new file mode 100644 index 00000000..1f858b26 --- /dev/null +++ b/tests/data/toulouse_maelis/R_read_ape_indicator_list_empty.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/tests/test_toulouse_maelis.py b/tests/test_toulouse_maelis.py index 7b7bde55..79582f53 100644 --- a/tests/test_toulouse_maelis.py +++ b/tests/test_toulouse_maelis.py @@ -350,6 +350,20 @@ def test_update_referential(mocked_get, con): assert con.referential.filter(referential_name='Category').count() == 2 +@mock.patch('passerelle.utils.Request.get') +def test_update_referential_empty(mocked_get, con): + mocked_get.return_value = APE_SERVICE_WSDL + assert len(Referential.objects.filter(referential_name='ApeIndicator')) == 3 + + with mock.patch('passerelle.utils.Request.post') as mocked_post: + mocked_post.return_value = FakedResponse( + content=get_xml_file('R_read_ape_indicator_list_empty.xml'), status_code=200 + ) + data = con.get_referential_data('Ape', 'ApeIndicator') + con.update_referential('ApeIndicator', data, 'level', 'level') + assert len(Referential.objects.filter(referential_name='ApeIndicator')) == 0 + + def test_cron(db): assert Referential.objects.filter(referential_name='Category').count() == 3 assert sorted(list({x.referential_name for x in Referential.objects.all()})) == [