Projet

Général

Profil

0001-opengis-check-slug-and-name-unicity-in-forms-43002.patch

Lauréline Guérin, 02 juin 2020 11:17

Télécharger (5 ko)

Voir les différences:

Subject: [PATCH] opengis: check slug and name unicity in forms (#43002)

 passerelle/apps/opengis/forms.py | 22 +++++++++++++
 passerelle/apps/opengis/views.py |  6 +++-
 tests/test_opengis.py            | 55 ++++++++++++++++++++++++++++++++
 3 files changed, 82 insertions(+), 1 deletion(-)
passerelle/apps/opengis/forms.py
28 28
        fields = '__all__'
29 29
        exclude = ['resource']
30 30

  
31
    def clean_slug(self):
32
        slug = self.cleaned_data['slug']
33

  
34
        queryset = models.Query.objects.filter(slug=slug, resource=self.instance.resource)
35
        if self.instance.pk:
36
            queryset = queryset.exclude(pk=self.instance.pk)
37
        if queryset.exists():
38
            raise forms.ValidationError(_('A query with this slug already exists'))
39

  
40
        return slug
41

  
42
    def clean_name(self):
43
        name = self.cleaned_data['name']
44

  
45
        queryset = models.Query.objects.filter(name=name, resource=self.instance.resource)
46
        if self.instance.pk:
47
            queryset = queryset.exclude(pk=self.instance.pk)
48
        if queryset.exists():
49
            raise forms.ValidationError(_('A query with this name already exists'))
50

  
51
        return name
52

  
31 53
    def clean_filter_expression(self):
32 54
        filter_expression = self.cleaned_data['filter_expression']
33 55
        if filter_expression:
passerelle/apps/opengis/views.py
26 26
    model = models.Query
27 27
    form_class = QueryForm
28 28

  
29
    def get_form_kwargs(self):
30
        kwargs = super(QueryNew, self).get_form_kwargs()
31
        kwargs['instance'] = models.Query(resource=self.resource)
32
        return kwargs
33

  
29 34
    def form_valid(self, form):
30
        form.instance.resource = self.resource
31 35
        return super(QueryNew, self).form_valid(form)
32 36

  
33 37
    def get_changed_url(self):
tests/test_opengis.py
8 8
from passerelle.base.models import Job
9 9
from passerelle.utils import import_site
10 10

  
11
from test_manager import login, admin_user
12

  
11 13
import utils
12 14

  
13 15
FAKE_FEATURE_INFO = '''<?xml version="1.0" encoding="UTF-8"?>
......
805 807
    assert 'extra parameter' in resp.json['err_desc']
806 808

  
807 809

  
810
def test_opengis_query_unicity(app, connector, query, admin_user):
811
    connector2 = OpenGIS.objects.create(
812
        slug='test2',
813
        wms_service_url='http://example.net/wms',
814
        wfs_service_url='http://example.net/wfs')
815
    Query.objects.create(
816
        resource=connector2,
817
        name='Foo Bar',
818
        slug='foo-bar',
819
    )
820

  
821
    app = login(app)
822
    resp = app.get('/manage/opengis/%s/query/new/' % connector.slug)
823
    resp.form['slug'] = query.slug
824
    resp.form['name'] = 'Foo Bar'
825
    resp.form['typename'] = 'foo'
826
    resp = resp.form.submit()
827
    assert resp.status_code == 200
828
    assert Query.objects.filter(resource=connector).count() == 1
829
    assert 'A query with this slug already exists' in resp.text
830
    resp.form['slug'] = 'foo-bar'
831
    resp.form['name'] = query.name
832
    resp.form['typename'] = 'foo'
833
    resp = resp.form.submit()
834
    assert Query.objects.filter(resource=connector).count() == 1
835
    assert resp.status_code == 200
836
    assert 'A query with this name already exists' in resp.text
837
    resp.form['slug'] = 'foo-bar'
838
    resp.form['name'] = 'Foo Bar'
839
    resp.form['typename'] = 'foo'
840
    resp = resp.form.submit()
841
    assert resp.status_code == 302
842
    assert Query.objects.filter(resource=connector).count() == 2
843
    new_query = Query.objects.latest('pk')
844
    assert new_query.resource == connector
845

  
846
    resp = app.get('/manage/opengis/%s/query/%s/' % (connector.slug, new_query.pk))
847
    resp.form['slug'] = query.slug
848
    resp.form['name'] = 'Foo Bar'
849
    resp = resp.form.submit()
850
    assert resp.status_code == 200
851
    assert 'A query with this slug already exists' in resp.text
852
    resp.form['slug'] = 'foo-bar'
853
    resp.form['name'] = query.name
854
    resp = resp.form.submit()
855
    assert resp.status_code == 200
856
    assert 'A query with this name already exists' in resp.text
857
    resp.form['slug'] = 'foo-bar'
858
    resp.form['name'] = 'Foo Bar'
859
    resp = resp.form.submit()
860
    assert resp.status_code == 302
861

  
862

  
808 863
def test_opengis_export_import(query):
809 864
    assert OpenGIS.objects.count() == 1
810 865
    assert Query.objects.count() == 1
811
-