maps: default tiles layer (#22639)

This commit is contained in:
Lauréline Guérin 2020-02-10 16:42:08 +01:00
parent 7b186a3dfb
commit 9881331665
No known key found for this signature in database
GPG Key ID: 1FAB9B9B4F93D473
2 changed files with 42 additions and 6 deletions

View File

@ -153,6 +153,10 @@ class MapLayer(models.Model):
def natural_key(self):
return (self.slug, )
@classmethod
def get_default_tiles_layer(cls):
return cls.objects.filter(kind='tiles', tiles_default=True).first()
@classmethod
def export_all_for_json(cls):
return [x.get_as_serialized_object() for x in MapLayer.objects.all()]
@ -340,8 +344,13 @@ class Map(CellBase):
ctx['min_zoom'] = self.min_zoom
ctx['max_zoom'] = self.max_zoom
ctx['geojson_url'] = reverse_lazy('mapcell-geojson', kwargs={'cell_id': self.pk})
ctx['tile_urltemplate'] = settings.COMBO_MAP_TILE_URLTEMPLATE
ctx['map_attribution'] = settings.COMBO_MAP_ATTRIBUTION
default_tiles_layer = MapLayer.get_default_tiles_layer()
if default_tiles_layer is not None:
ctx['tile_urltemplate'] = default_tiles_layer.tiles_template_url
ctx['map_attribution'] = default_tiles_layer.tiles_attribution
else:
ctx['tile_urltemplate'] = settings.COMBO_MAP_TILE_URLTEMPLATE
ctx['map_attribution'] = settings.COMBO_MAP_ATTRIBUTION
ctx['max_bounds'] = settings.COMBO_MAP_MAX_BOUNDS
ctx['group_markers'] = self.group_markers
ctx['marker_behaviour_onclick'] = self.marker_behaviour_onclick

View File

@ -3,10 +3,12 @@ import json
import mock
import pytest
from django.conf import settings
from django.contrib.auth.models import User
from django.test.client import RequestFactory
from django.core.urlresolvers import reverse
from django.contrib.auth.models import Group
from django.core.urlresolvers import reverse
from django.test.client import RequestFactory
from django.utils.html import escape
from combo.data.models import Page
from combo.apps.maps.models import MapLayer, Map, MapLayerOptions
@ -88,7 +90,6 @@ SAMPLE_WCS_GEOJSON_CONTENT = '''{
}'''
@pytest.fixture
def user():
try:
@ -97,6 +98,7 @@ def user():
user = User.objects.create_user('admin', email='admin@localhost', password='admin')
return user
@pytest.fixture
def layer():
try:
@ -111,6 +113,18 @@ def layer():
layer.save()
return layer
@pytest.fixture
def tiles_layer():
return MapLayer.objects.create(
label='Test2',
kind='tiles',
tiles_template_url='http://somedomain.com/blabla/{z}/{x}/{y}{r}.png',
tiles_attribution='Foo bar',
tiles_default=True,
)
def test_cell_disabled():
MapLayer.objects.all().delete()
assert Map.is_enabled() is False
@ -118,7 +132,7 @@ def test_cell_disabled():
def test_cell_enabled(layer):
assert Map.is_enabled() is True
def test_cell_rendering(app, layer):
def test_cell_rendering(app, layer, tiles_layer):
page = Page(title='xxx', slug='test_map_cell', template_name='standard')
page.save()
cell = Map(page=page, placeholder='content', order=0, title='Map with points')
@ -133,6 +147,8 @@ def test_cell_rendering(app, layer):
assert 'data-init-lng="2.3233688436448574"' in rendered
assert 'data-geojson-url="/ajax/mapcell/geojson/1/"' in rendered
assert 'data-group-markers="1"' not in rendered
assert 'data-tile-urltemplate="%s"' % tiles_layer.tiles_template_url in rendered
assert 'data-map-attribution="%s"' % tiles_layer.tiles_attribution in rendered
resp = app.get('/test_map_cell/')
assert 'xstatic/leaflet.js' in resp.text
assert 'js/combo.map.js' in resp.text
@ -144,6 +160,17 @@ def test_cell_rendering(app, layer):
rendered = cell.render(context)
assert 'data-group-markers="1"' in rendered
tiles_layer.tiles_default = False
tiles_layer.save()
rendered = cell.render(context)
assert 'data-tile-urltemplate="%s"' % settings.COMBO_MAP_TILE_URLTEMPLATE in rendered
assert 'data-map-attribution="%s"' % escape(settings.COMBO_MAP_ATTRIBUTION) in rendered
tiles_layer.delete()
rendered = cell.render(context)
assert 'data-tile-urltemplate="%s"' % settings.COMBO_MAP_TILE_URLTEMPLATE in rendered
assert 'data-map-attribution="%s"' % escape(settings.COMBO_MAP_ATTRIBUTION) in rendered
def test_get_geojson_on_non_public_page(app, layer):
page = Page(title='xxx', slug='new', template_name='standard',