diff --git a/geotrek/cirkwi/parsers.py b/geotrek/cirkwi/parsers.py index 5237cc2bb0..710452f255 100644 --- a/geotrek/cirkwi/parsers.py +++ b/geotrek/cirkwi/parsers.py @@ -19,6 +19,7 @@ class CirkwiParser(AttachmentParserMixin, Parser): create = False provider = "Cirkwi" eid = 'eid' + auth = () default_language = settings.MODELTRANSLATION_DEFAULT_LANGUAGE field_options = { "geom": {"required": True}, @@ -193,7 +194,7 @@ def filter_description(self, src, val): if step_descriptions: desc += "
    \r\n" for step_description in step_descriptions: - desc += f"
  1. {step_description}
  2. \r\n" + desc += f"
  3. {step_description}
  4. " desc += "
" return desc diff --git a/geotrek/cirkwi/tests/data/circuits.xml b/geotrek/cirkwi/tests/data/circuits.xml index 502b19b0d7..7e2e802714 100644 --- a/geotrek/cirkwi/tests/data/circuits.xml +++ b/geotrek/cirkwi/tests/data/circuits.xml @@ -1,4 +1,8 @@ + + 10925 + 10926 + @@ -60,6 +64,58 @@ + + + + + + + + + + + Étape 1 + + Au départ du terminal des car-ferrys. + + + + + + 62193 + + 50.9647654 + 1.8614236 + + 5.54 + + + + + + + + + Étape 2 + + Virer à droite, direction la plage-corniche de la Côte d'Opale. + + + + + + 62193 + + 50.9588189 + 1.8521179 + + 4.37 + + + + 74 @@ -83,13 +139,6 @@ - - - - - @@ -201,4 +250,19 @@ + + + + Le patrimoine de Plancoët à vélo + Laissez-vous guider par ce chemin + + + + + + + diff --git a/geotrek/cirkwi/tests/data/poi.xml b/geotrek/cirkwi/tests/data/poi.xml index fc64fda4dd..b1c500df7d 100644 --- a/geotrek/cirkwi/tests/data/poi.xml +++ b/geotrek/cirkwi/tests/data/poi.xml @@ -1,4 +1,8 @@ + + 357 + 358 + @@ -82,4 +86,42 @@ + + + + + + + Tour de lancienne église Sainte-Gertrude 2 + A Tenneville, ce site reposant vous fera découvrir + + + Horaire + Ouvert du Lundi au Vendredi de 8h à 19h + + + Contact + Téléphone: 01 02 03 04 05 + + + + + Titre en anglais + Description en anglais + + + + 1 + route de Bastogne + Tenneville + 6970 + Belgique + + 48.7125946 + 6.1442926 + + 468.0 + + + diff --git a/geotrek/cirkwi/tests/factories.py b/geotrek/cirkwi/tests/factories.py new file mode 100644 index 0000000000..8cccb0e039 --- /dev/null +++ b/geotrek/cirkwi/tests/factories.py @@ -0,0 +1,10 @@ +import factory + +from .. import models + + +class CirkwiLocomotionFactory(factory.django.DjangoModelFactory): + class Meta: + model = models.CirkwiLocomotion + + name = factory.Sequence(lambda n: "Cirkwi Locomotion %s" % n) diff --git a/geotrek/cirkwi/tests/test_parsers.py b/geotrek/cirkwi/tests/test_parsers.py index 7712b8342f..80efa8e0dd 100644 --- a/geotrek/cirkwi/tests/test_parsers.py +++ b/geotrek/cirkwi/tests/test_parsers.py @@ -10,16 +10,24 @@ from geotrek.cirkwi.parsers import (CirkwiTouristicContentParser, CirkwiTrekParser) +from geotrek.cirkwi.tests.factories import CirkwiLocomotionFactory from geotrek.common.models import FileType from geotrek.common.utils import testdata from geotrek.tourism.models import TouristicContent from geotrek.trekking.models import Trek +from geotrek.trekking.tests.factories import (DifficultyLevelFactory, + PracticeFactory) class TestCirkwiTrekParserFr(CirkwiTrekParser): url = 'https://example.net/' + create = True default_language = 'fr' +class TestCirkwiTrekParserFrNoCreate(CirkwiTrekParser): + url = 'https://example.net/' + create = False + default_language = 'fr' class TestCirkwiTrekParserEn(CirkwiTrekParser): url = 'https://example.net/' @@ -58,6 +66,10 @@ class CirkwiParserTests(TestCase): @classmethod def setUpTestData(cls): cls.filetype = FileType.objects.create(type="Photographie") + cls.locomotion = CirkwiLocomotionFactory(eid=2, name="Marche") + cls.practice = PracticeFactory(name="Pédestre", cirkwi=cls.locomotion) + PracticeFactory.create(name_fr="Vélo", name="Vélo") + cls.difficulty = DifficultyLevelFactory(cirkwi_level=5) def make_dummy_get(self, data_filename): def dummy_get(url, *args, **kwargs): @@ -81,14 +93,18 @@ def dummy_get(url, *args, **kwargs): @mock.patch('requests.get') def test_create_treks(self, mocked_get): mocked_get.side_effect = self.make_dummy_get('circuits.xml') - call_command('import', 'geotrek.cirkwi.tests.test_parsers.TestCirkwiTrekParserFr', verbosity=0) + output = io.StringIO() + call_command('import', 'geotrek.cirkwi.tests.test_parsers.TestCirkwiTrekParserFr', verbosity=2, stdout=output) call_command('import', 'geotrek.cirkwi.tests.test_parsers.TestCirkwiTrekParserEn', verbosity=0) - self.assertEqual(Trek.objects.count(), 1) - t = Trek.objects.first() - self.assertEqual(t.name_fr, "Le patrimoine de Plancoët") + self.assertEqual(Trek.objects.count(), 2) + t = Trek.objects.get(name_fr="Le patrimoine de Plancoët") self.assertEqual(t.name_en, "Title en") - self.assertEqual(t.description_fr, 'Laissez-vous guider par ce chemin\n\n\nHoraires: Tous les jours sauf le Dimanche') - self.assertEqual(t.description_en, "Description en") + self.assertEqual(t.practice, self.practice) + self.assertEqual(t.description_teaser_fr, 'Laissez-vous guider par ce chemin') + self.assertEqual(t.description_teaser_en, "Description en") + self.assertIn("Horaires: Tous les jours sauf le Dimanche", t.description_fr) + self.assertIn("Au départ du terminal des car-ferrys.", t.description_fr) + self.assertIn("Virer à droite, direction la plage-corniche de la Côte d'Opale.", t.description_fr) self.assertAlmostEqual(t.geom[0][0], 977776.9692000002) self.assertAlmostEqual(t.geom[0][1], 6547354.842799998) attachement = t.attachments.last() @@ -96,6 +112,13 @@ def test_create_treks(self, mocked_get): self.assertEqual(attachement.legend, 'Le patrimoine de Plancoët') self.assertEqual(attachement.author, 'Manon') self.assertEqual(attachement.attachment_file.size, len(testdata.IMG_FILE)) + self.assertEqual(t.duration, 2.0) + t = Trek.objects.get(name_fr="Le patrimoine de Plancoët à vélo") + self.assertEqual(t.practice.name, "Vélo") + # Assert created Ciwki Locomotion and mapped it to Practice + self.assertEqual(t.practice.cirkwi.name, "Vélo") + self.assertEqual(t.practice.cirkwi.eid, 3) + self.assertIn("Cirkwi Locomotion 'Vélo' n'existait pas dans Geotrek-Admin. Il a été créé automatiquement,", output.getvalue()) @mock.patch('requests.get') def test_create_touristic_content_no_type(self, mocked_get): @@ -105,16 +128,24 @@ def test_create_touristic_content_no_type(self, mocked_get): self.assertIn("Type 1 'Eglise' does not exist for category 'Monuments et Architecture'. Please add it", output.getvalue()) + @mock.patch('requests.get') + def test_create_trek_with_missing_locomotion(self, mocked_get): + output = io.StringIO() + mocked_get.side_effect = self.make_dummy_get('circuits_wrong_locomotion.xml') + call_command('import', 'geotrek.cirkwi.tests.test_parsers.TestCirkwiTrekParserFrNoCreate', verbosity=2, stdout=output) + self.assertIn("Cirkwi Locomotion '['Aviron', '8']' n'existe pas dans Geotrek-Admin. Merci de l'ajouter,", + output.getvalue()) + + @mock.patch('requests.get') def test_create_touristic_content(self, mocked_get): mocked_get.side_effect = self.make_dummy_get('poi.xml') call_command('import', 'geotrek.cirkwi.tests.test_parsers.TestCirkwiTouristicContentParserFr', verbosity=0) call_command('import', 'geotrek.cirkwi.tests.test_parsers.TestCirkwiTouristicContentParserEn', verbosity=0) - self.assertEqual(TouristicContent.objects.count(), 1) - tc = TouristicContent.objects.first() - self.assertEqual(tc.name_fr, "Tour de lancienne église Sainte-Gertrude") + self.assertEqual(TouristicContent.objects.count(), 2) + tc = TouristicContent.objects.get(name_fr="Tour de lancienne église Sainte-Gertrude") self.assertEqual(tc.name_en, "Titre en anglais") - self.assertEqual(tc.description_fr, 'A Tenneville, ce site reposant vous fera découvrir\n\n\nHoraire: Ouvert du Lundi au Vendredi de 8h à 19h') + self.assertEqual(tc.description_fr, 'A Tenneville, ce site reposant vous fera découvrir') self.assertEqual(tc.description_en, "Description en anglais") self.assertEqual(tc.practical_info_fr, "Adresse :
1 route de Bastogne
6970 Tenneville

Horaire :
Ouvert du Lundi au Vendredi de 8h à 19h

Contact :
Téléphone: 01 02 03 04 05
") self.assertEqual(str(tc.category), "Monuments et Architecture") diff --git a/geotrek/tourism/tests/test_models.py b/geotrek/tourism/tests/test_models.py index 87c401e3f5..a7f7bfa0b9 100644 --- a/geotrek/tourism/tests/test_models.py +++ b/geotrek/tourism/tests/test_models.py @@ -8,7 +8,7 @@ from django.test.utils import override_settings from geotrek.core.tests import factories as core_factories -from geotrek.tourism.models import TouristicContent, TouristicContentType, TouristicEventOrganizer +from geotrek.tourism.models import TouristicContentType, TouristicEventOrganizer from geotrek.tourism.tests import factories as tourism_factories from geotrek.tourism.tests.factories import (InformationDeskFactory, InformationDeskTypeFactory, @@ -133,10 +133,6 @@ def test_spatial_link_from_trek_with_practice_distance_respects_limit(self): self.assertNotIn(self.event, self.trek.touristic_events.all()) def test_spatial_link_default_ordering(self): - print(self.content2) - print(self.content) - print(self.trek.touristic_contents.all()) - print(TouristicContent.objects.count(), 2) self.assertEqual(self.trek.touristic_contents.all()[0], self.content) self.assertEqual(self.trek.touristic_contents.all()[1], self.content2)