Projet

Général

Profil

0002-visualization-add-a-duplicate-button-39637.patch

Benjamin Dauvergne, 13 février 2020 14:28

Télécharger (4,29 ko)

Voir les différences:

Subject: [PATCH 2/2] visualization: add a duplicate button (#39637)

 bijoe/templates/bijoe/visualization.html |  1 +
 bijoe/visualization/urls.py              |  1 +
 bijoe/visualization/views.py             | 17 +++++++++++++++++
 tests/test_views.py                      | 11 +++++++++++
 4 files changed, 30 insertions(+)
bijoe/templates/bijoe/visualization.html
15 15
{% block actions %}
16 16
  <a rel="popup" class="button" href="{% url "rename-visualization" pk=object.pk %}">{% trans "Rename" %}</a>
17 17
  <a rel="popup" class="button" href="{% url "delete-visualization" pk=object.pk %}">{% trans "Delete" %}</a>
18
  <a rel="popup" href="{% url "save-as-visualization" pk=object.pk %}" title="{{ visualization.title }}" class="button">{% trans "Duplicate" %}</a>
18 19
  <a class="button" href="{% url "visualization-ods" pk=object.pk %}">{% trans "Export as ODS" %}</a>
19 20
  <a download class="button" href="{% url "export-visualization" pk=object.pk %}">{% trans "Export as JSON" %}</a>
20 21
  <a href="{{ iframe_url }}" class="button">{% trans "URL for IFRAME" %}</a>
bijoe/visualization/urls.py
41 41
    url(r'(?P<pk>\d+)/rename/$', views.rename_visualization, name='rename-visualization'),
42 42
    url(r'(?P<pk>\d+)/delete/$', views.delete_visualization, name='delete-visualization'),
43 43
    url(r'(?P<pk>\d+)/export$', views.export_visualization, name='export-visualization'),
44
    url(r'(?P<pk>\d+)/save-as/$', views.save_as_visualization, name='save-as-visualization'),
44 45
]
bijoe/visualization/views.py
120 120
        return super(CreateVisualizationView, self).form_valid(form)
121 121

  
122 122

  
123
class SaveAsVisualizationView(views.AuthorizationMixin, DetailView, CreateView):
124
    model = models.Visualization
125
    form_class = forms.VisualizationForm
126
    template_name = 'bijoe/create_visualization.html'
127
    success_url = '/visualization/{id}/'
128

  
129
    def form_valid(self, form):
130
        form.instance.parameters = self.get_object().parameters
131
        return super(SaveAsVisualizationView, self).form_valid(form)
132

  
133
    def get_initial(self):
134
        return {
135
            'name': '%s %s' % (self.object.name, _('(Copy)'))
136
        }
137

  
138

  
123 139
class VisualizationView(views.AuthorizationMixin, CubeDisplayMixin, DetailView):
124 140
    model = models.Visualization
125 141
    template_name = 'bijoe/visualization.html'
......
408 424
delete_visualization = DeleteVisualizationView.as_view()
409 425
rename_visualization = RenameVisualization.as_view()
410 426
export_visualization = ExportVisualizationView.as_view()
427
save_as_visualization = SaveAsVisualizationView.as_view()
411 428
visualization = VisualizationView.as_view()
412 429
visualization_iframe = xframe_options_exempt(VisualizationIframeView.as_view())
413 430
visualization_geojson = VisualizationGeoJSONView.as_view()
tests/test_views.py
186 186
    resp = resp.form.submit().follow()
187 187
    assert '3 visualizations have been created. No visualization updated.' in resp.text
188 188
    assert Visualization.objects.count() == 3
189

  
190

  
191
def test_save_as(schema1, app, admin, visualization):
192
    login(app, admin)
193
    resp = app.get('/visualization/%s/' % visualization.id)
194
    resp = resp.click('Duplicate')
195
    resp.form['name'] = 'zob'
196
    resp = resp.form.submit().follow()
197
    assert Visualization.objects.count() == 2
198
    new_visualization = Visualization.objects.get(name='zob')
199
    assert new_visualization.parameters == visualization.parameters
189
-