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"- {step_description}
\r\n"
+ desc += f"- {step_description}
"
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)