Projet

Général

Profil

0001-maps-move-layer-request-parameter-options-to-separat.patch

Valentin Deniaud, 04 novembre 2021 18:07

Télécharger (9,23 ko)

Voir les différences:

Subject: [PATCH] maps: move layer request parameter options to separate form
 (#57761)

 combo/apps/maps/forms.py                      | 17 +++++++++-----
 combo/apps/maps/manager_views.py              | 10 ++++++++-
 .../maps/templates/maps/map_layer_form.html   | 11 +++++++++-
 .../map_layer_request_parameters_form.html    | 11 ++++++++++
 combo/apps/maps/urls.py                       |  5 +++++
 tests/test_maps_manager.py                    | 22 +++++++++++--------
 6 files changed, 60 insertions(+), 16 deletions(-)
 create mode 100644 combo/apps/maps/templates/maps/map_layer_request_parameters_form.html
combo/apps/maps/forms.py
37 37

  
38 38
    class Meta:
39 39
        model = MapLayer
40
        exclude = ('kind',)
40
        exclude = (
41
            'kind',
42
            'include_user_identifier',
43
            'geojson_query_parameter',
44
            'geojson_accepts_circle_param',
45
        )
41 46
        widgets = {
42 47
            'marker_colour': ColourOrTextInput,
43 48
            'icon_colour': forms.TextInput(attrs={'type': 'color'}),
......
49 54
            # new instance, delete some fields
50 55
            del self.fields['slug']
51 56
            del self.fields['cache_duration']
52
            del self.fields['include_user_identifier']
53 57
        else:
54 58
            # new widget for icon field
55 59
            self.fields['icon'].widget = IconRadioSelect()
......
65 69
                'icon',
66 70
                'icon_colour',
67 71
                'cache_duration',
68
                'include_user_identifier',
69
                'geojson_query_parameter',
70
                'geojson_accepts_circle_param',
71 72
            ]
72 73
        for field in todelete_fields:
73 74
            if field in self.fields:
......
83 84
        return cleaned_data
84 85

  
85 86

  
87
class MapLayerRequestParametersForm(forms.ModelForm):
88
    class Meta:
89
        model = MapLayer
90
        fields = ('include_user_identifier', 'geojson_query_parameter', 'geojson_accepts_circle_param')
91

  
92

  
86 93
class MapLayerOptionsForm(forms.ModelForm):
87 94
    class Meta:
88 95
        model = MapLayerOptions
combo/apps/maps/manager_views.py
22 22

  
23 23
from combo.data.models import CellBase, PageSnapshot
24 24

  
25
from .forms import MapLayerForm, MapLayerOptionsForm
25
from .forms import MapLayerForm, MapLayerOptionsForm, MapLayerRequestParametersForm
26 26
from .models import Map, MapLayer, MapLayerOptions
27 27

  
28 28

  
......
56 56
    template_name = 'maps/map_layer_form.html'
57 57

  
58 58

  
59
class LayerEditRequestParametersView(MapLayerMixin, UpdateView):
60
    form_class = MapLayerRequestParametersForm
61
    template_name = 'maps/map_layer_request_parameters_form.html'
62

  
63
    def get_success_url(self):
64
        return reverse('maps-manager-layer-edit', kwargs={'slug': self.object.slug})
65

  
66

  
59 67
class LayerDeleteView(MapLayerMixin, DeleteView):
60 68
    template_name = 'maps/map_layer_confirm_delete.html'
61 69

  
combo/apps/maps/templates/maps/map_layer_form.html
4 4
{% block appbar %}
5 5
{% if object.id %}
6 6
<h2>{% trans "Edit Map Layer" %}</h2>
7
{% if object.kind == 'geojson' %}
8
<span class="actions">
9
<a rel="popup" href="{% url 'maps-manager-layer-edit-request-parameters' slug=object.slug %}">{% trans 'Request parameters' %}</a>
10
</span>
11
{% endif %}
7 12
{% else %}
8 13
<h2>{% trans "New Map Layer" %}</h2>
9 14
{% endif %}
......
11 16

  
12 17
{% block breadcrumb %}
13 18
{{ block.super }}
14
<a href="{% url 'maps-manager-homepage' %}">{% trans 'Maps' %}</a>
19
{% if object.id %}
20
<a href="{% url 'maps-manager-layer-edit' slug=object.slug %}">{% trans 'Edit Map Layer' %}</a>
21
{% else %}
22
<a href="#">{% trans "New Map Layer" %}</a>
23
{% endif %}
15 24
{% endblock %}
16 25

  
17 26
{% block content %}
combo/apps/maps/templates/maps/map_layer_request_parameters_form.html
1
{% extends "maps/map_layer_form.html" %}
2
{% load i18n %}
3

  
4
{% block appbar %}
5
<h2>{% trans "Edit request parameters" %}</h2>
6
{% endblock %}
7

  
8
{% block breadcrumb %}
9
{{ block.super }}
10
<a rel="popup" href="{% url 'maps-manager-layer-edit-request-parameters' slug=object.slug %}">{% trans "Edit request parameters" %}</a>
11
{% endblock %}
combo/apps/maps/urls.py
33 33
        manager_views.LayerEditView.as_view(),
34 34
        name='maps-manager-layer-edit',
35 35
    ),
36
    url(
37
        r'^layers/(?P<slug>[\w-]+)/edit/request-parameters/$',
38
        manager_views.LayerEditRequestParametersView.as_view(),
39
        name='maps-manager-layer-edit-request-parameters',
40
    ),
36 41
    url(
37 42
        r'^layers/(?P<slug>[\w-]+)/delete/$',
38 43
        manager_views.LayerDeleteView.as_view(),
tests/test_maps_manager.py
53 53
    resp = resp.click('New GeoJSON layer')
54 54
    assert 'slug' not in resp.context['form'].fields
55 55
    assert 'cache_duration' not in resp.context['form'].fields
56
    assert 'include_user_identifier' not in resp.context['form'].fields
57 56
    assert 'tiles_template_url' not in resp.context['form'].fields
58 57
    assert 'tiles_attribution' not in resp.context['form'].fields
59 58
    assert 'tiles_default' not in resp.context['form'].fields
......
64 63
    resp.form['icon'] = 'bicycle'
65 64
    assert resp.form['icon_colour'].value == '#000000'
66 65
    resp.form['icon_colour'] = '#FFFFFF'
67
    resp.form['geojson_query_parameter'] = 'foobar'
68
    resp.form['geojson_accepts_circle_param'] = True
69 66
    resp = resp.forms[0].submit()
70 67
    assert resp.location.endswith('/manage/maps/')
71 68
    assert MapLayer.objects.count() == 1
72 69
    layer = MapLayer.objects.get()
73 70
    assert layer.label == 'Test'
74 71
    assert layer.slug == 'test'
75
    assert layer.geojson_query_parameter == 'foobar'
76
    assert layer.geojson_accepts_circle_param is True
77 72
    assert layer.kind == 'geojson'
78 73

  
79 74

  
......
83 78
    resp = resp.click('New tiles layer')
84 79
    assert 'slug' not in resp.context['form'].fields
85 80
    assert 'cache_duration' not in resp.context['form'].fields
86
    assert 'include_user_identifier' not in resp.context['form'].fields
87 81
    assert 'geojson_url' not in resp.context['form'].fields
88 82
    assert 'marker_colour' not in resp.context['form'].fields
89 83
    assert 'icon' not in resp.context['form'].fields
90 84
    assert 'icon_colour' not in resp.context['form'].fields
91
    assert 'geojson_query_parameter' not in resp.context['form'].fields
92
    assert 'geojson_accepts_circle_param' not in resp.context['form'].fields
93 85
    resp.forms[0]['label'] = 'Test'
94 86
    resp.forms[0]['tiles_template_url'] = 'http://somedomain.com/blabla/{z}/{x}/{y}{r}.png'
95 87
    resp.forms[0]['tiles_attribution'] = 'Foo bar'
......
138 130
    layer.refresh_from_db()
139 131
    assert layer.geojson_url == 'http://example.net/new_geojson'
140 132

  
133
    resp = resp.follow().click('Test')
134
    resp = resp.click('Request parameters')
135
    resp.form['geojson_query_parameter'] = 'foobar'
136
    resp.form['geojson_accepts_circle_param'] = True
137
    resp.form['include_user_identifier'] = True
138
    resp = resp.form.submit()
139
    assert resp.location.endswith('/manage/maps/layers/%s/edit/' % layer.slug)
140
    layer.refresh_from_db()
141
    assert layer.geojson_query_parameter == 'foobar'
142
    assert layer.geojson_accepts_circle_param is True
143
    assert layer.include_user_identifier is True
144

  
141 145

  
142 146
def test_edit_tiles_layer(app, admin_user, tiles_layer):
143 147
    app = login(app)
144 148
    resp = app.get('/manage/maps/', status=200)
145 149
    resp = resp.click('Test')
146 150
    assert 'cache_duration' not in resp.context['form']
147
    assert 'include_user_identifier' not in resp.context['form']
148 151
    assert 'geojson_url' not in resp.context['form']
149 152
    assert 'marker_colour' not in resp.context['form']
150 153
    assert 'icon' not in resp.context['form']
151 154
    assert 'icon_colour' not in resp.context['form']
155
    assert 'Request parameters' not in resp.text
152 156
    resp.forms[0]['tiles_default'] = False
153 157
    resp = resp.forms[0].submit()
154 158
    assert resp.location.endswith('/manage/maps/')
155
-