Skip to content

Commit

Permalink
Merge pull request #4030 from GeotrekCE/fix_mobile_sync_when_no_picto…
Browse files Browse the repository at this point in the history
…_on_themes

Fix mobile sync when no picto on themes (fixes #3814)
  • Loading branch information
submarcos committed Apr 3, 2024
2 parents a053c09 + 102d48d commit 47131d6
Show file tree
Hide file tree
Showing 4 changed files with 55 additions and 1 deletion.
1 change: 1 addition & 0 deletions docs/changelog.rst
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ This version breaks the flat pages API. Upgrade first to Geotrek-rando 3.19.0 (s
**Bug fixes**

- Fix API crash when using an SVG file for information desks (fixes #3860)
- Fix mobile sync crash when a theme has no pictogram (fixes #3814)

**Breaking changes**

Expand Down
4 changes: 4 additions & 0 deletions geotrek/api/mobile/serializers/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,8 @@ class PracticeSerializer(serializers.ModelSerializer):
pictogram = serializers.SerializerMethodField()

def get_pictogram(self, obj):
if not obj.pictogram:
return None
file_name, file_extension = os.path.splitext(str(obj.pictogram.url))
return '{file}.png'.format(file=file_name) if file_extension == '.svg' else obj.pictogram.url

Expand Down Expand Up @@ -141,6 +143,8 @@ class ThemeSerializer(serializers.ModelSerializer):
pictogram = serializers.SerializerMethodField()

def get_pictogram(self, obj):
if not obj.pictogram:
return None
file_name, file_extension = os.path.splitext(str(obj.pictogram.url))
return '{file}.png'.format(file=file_name) if file_extension == '.svg' else obj.pictogram.url

Expand Down
31 changes: 31 additions & 0 deletions geotrek/api/tests/test_mobile/test_serializers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
from django.test import TestCase

from geotrek.api.mobile.serializers import common as api_serializers
from geotrek.trekking.tests.factories import PracticeFactory
from geotrek.common.tests.factories import ThemeFactory


class PracticeSerializerTestCase(TestCase):

def test_practice_with_picto(self):
practice = PracticeFactory.create(pictogram='a/pictogram/path.png')
serialized_practice = api_serializers.PracticeSerializer(practice).data
self.assertEqual(serialized_practice['pictogram'], '/media/a/pictogram/path.png')

def test_practice_with_no_picto(self):
practice = PracticeFactory.create(pictogram=None)
serialized_practice = api_serializers.PracticeSerializer(practice).data
self.assertIsNone(serialized_practice['pictogram'])


class ThemeSerializerTestCase(TestCase):

def test_theme_with_picto(self):
theme = ThemeFactory.create(pictogram='a/pictogram/path.png')
serialized_theme = api_serializers.ThemeSerializer(theme).data
self.assertEqual(serialized_theme['pictogram'], '/media/a/pictogram/path.png')

def test_theme_with_no_picto(self):
theme = ThemeFactory.create(pictogram=None)
serialized_theme = api_serializers.ThemeSerializer(theme).data
self.assertIsNone(serialized_theme['pictogram'])
20 changes: 19 additions & 1 deletion geotrek/api/tests/test_mobile/test_sync_mobile.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,8 @@
from geotrek.common.tests import TranslationResetMixin
from geotrek.common.tests.factories import (AttachmentFactory,
RecordSourceFactory,
TargetPortalFactory)
TargetPortalFactory,
ThemeFactory)
from geotrek.common.utils.testdata import (get_dummy_uploaded_file,
get_dummy_uploaded_image,
get_dummy_uploaded_image_svg)
Expand Down Expand Up @@ -587,3 +588,20 @@ def test_sync_treks_informationdesk_photo_missing(self):
management.call_command('sync_mobile', os.path.join(settings.TMP_DIR, 'sync_mobile', 'tmp_sync'), url='http://localhost:8000',
skip_tiles=True, verbosity=2, stdout=output)
self.assertIn('Done', output.getvalue())

def test_sync_treks_theme_no_picto(self):
theme_no_picto = ThemeFactory.create(pictogram=None)
trek = TrekWithPublishedPOIsFactory.create()
trek.themes.add(theme_no_picto)
output = StringIO()
management.call_command('sync_mobile', os.path.join(settings.TMP_DIR, 'sync_mobile', 'tmp_sync'), url='http://localhost:8000',
skip_tiles=True, verbosity=2, stdout=output)
self.assertIn('Done', output.getvalue())

def test_sync_treks_practice_no_picto(self):
practice_no_picto = PracticeFactory.create(pictogram=None)
TrekWithPublishedPOIsFactory.create(practice=practice_no_picto)
output = StringIO()
management.call_command('sync_mobile', os.path.join(settings.TMP_DIR, 'sync_mobile', 'tmp_sync'), url='http://localhost:8000',
skip_tiles=True, verbosity=2, stdout=output)
self.assertIn('Done', output.getvalue())

0 comments on commit 47131d6

Please sign in to comment.