diff --git a/docs/changelog.rst b/docs/changelog.rst index 050cc3be8a..6845f6f7f4 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -62,6 +62,7 @@ In preparation for HD Views developments (PR #3298) - ApidaeTrekParser: round computed duration - ApidaeTrekParser: fix attached pictures import + 2.93.0 (2022-12-06) ----------------------- diff --git a/geotrek/common/parsers.py b/geotrek/common/parsers.py index 7b4b7f5588..ad9ac43510 100644 --- a/geotrek/common/parsers.py +++ b/geotrek/common/parsers.py @@ -276,6 +276,9 @@ def parse_translation_field(self, dst, src, val): if old_value != val_default_language: self.set_value(dst_field_lang, src, val_default_language) modified = True + if new_value != old_value: + modified = True + return modified def parse_field(self, row, dst, src, updated, non_field): diff --git a/geotrek/trekking/tests/test_parsers.py b/geotrek/trekking/tests/test_parsers.py index 42ce41b782..2c6e07401f 100644 --- a/geotrek/trekking/tests/test_parsers.py +++ b/geotrek/trekking/tests/test_parsers.py @@ -664,6 +664,13 @@ class TestApidaeTrekParser(ApidaeTrekParser): selection_id = 654321 +class TestApidaeTrekSameValueDefaultLanguageDifferentTranslationParser(TestApidaeTrekParser): + def filter_description(self, src, val): + description = super().filter_description(src, val) + self.set_value('description_fr', src, "FOOBAR") + return description + + @skipIf(settings.TREKKING_TOPOLOGY_ENABLED, 'Test without dynamic segmentation only') class ApidaeTrekParserTests(TestCase): @@ -782,6 +789,39 @@ def test_trek_is_imported(self, mocked_get): self.assertEqual(Attachment.objects.count(), 0) + @mock.patch('requests.get') + def test_trek_import_multiple_time(self, mocked_get): + RouteFactory(route='Boucle') + mocked_get.side_effect = self.make_dummy_get('a_trek.json') + + call_command('import', 'geotrek.trekking.tests.test_parsers.TestApidaeTrekParser', verbosity=0) + + self.assertEqual(Trek.objects.count(), 1) + trek = Trek.objects.all().first() + old_description_en = trek.description_en + old_description = trek.description + description_fr = ( + '

Départ : du parking de la Chapelle Saint Michel

' + '

1/ Suivre le chemin qui part à droite, traversant le vallon.

' + '

2/ Au carrefour tourner à droite et suivre la rivière

' + '

3/ Retour à la chapelle en passant à travers le petit bois.

' + '

Ouvert toute l\'année

' + '

Fermeture exceptionnelle en cas de pluie forte

' + '

Suivre le balisage GR (blanc/rouge) ou GRP (jaune/rouge).

' + '

Montée en télésiège payante. 2 points de vente - télésiège Frastaz et Bois Noir.

' + '

Site web (URL):https://example.com/ma_rando.html
' + 'Téléphone:01 23 45 67 89
' + 'Mél:accueil-rando@example.com
' + 'Signaux de fumée:1 gros nuage suivi de 2 petits

' + ) + self.assertEqual(trek.description_fr, description_fr) + call_command('import', 'geotrek.trekking.tests.test_parsers.TestApidaeTrekSameValueDefaultLanguageDifferentTranslationParser', + verbosity=0) + trek.refresh_from_db() + self.assertEqual(trek.description_fr, 'FOOBAR') + self.assertEqual(old_description_en, trek.description_en) + self.assertEqual(old_description, trek.description) + @mock.patch('requests.get') def test_trek_geometry_can_be_imported_from_gpx(self, mocked_get): mocked_get.side_effect = self.make_dummy_get('a_trek.json')