Projet

Général

Profil

0001-backoffice-check-slug-for-uniqueness-65526.patch

Frédéric Péters, 23 mai 2022 13:59

Télécharger (2,85 ko)

Voir les différences:

Subject: [PATCH] backoffice: check slug for uniqueness (#65526)

 tests/admin_pages/test_block.py | 30 ++++++++++++++++++++++++++++++
 wcs/admin/blocks.py             |  5 ++++-
 2 files changed, 34 insertions(+), 1 deletion(-)
tests/admin_pages/test_block.py
102 102
    resp = resp.follow()
103 103

  
104 104

  
105
def test_block_options_slug(pub):
106
    create_superuser(pub)
107
    BlockDef.wipe()
108
    block = BlockDef()
109
    block.name = 'foo'
110
    block.fields = []
111
    block.store()
112

  
113
    block2 = BlockDef()
114
    block2.name = 'bar'
115
    block2.fields = []
116
    block2.store()
117

  
118
    app = login(get_app(pub))
119
    resp = app.get('/backoffice/forms/blocks/%s/settings' % block.id)
120
    resp.form['slug'] = 'bar'
121
    resp = resp.form.submit('submit')
122
    assert 'This identifier is already used.' in resp.text
123

  
124
    resp = app.get('/backoffice/forms/blocks/%s/settings' % block.id)
125
    resp.form['slug'] = 'foo'
126
    resp = resp.form.submit('submit').follow()
127

  
128
    resp = app.get('/backoffice/forms/blocks/%s/settings' % block.id)
129
    resp.form['slug'] = 'foo2'
130
    resp = resp.form.submit('submit').follow()
131
    block.refresh_from_storage()
132
    assert block.slug == 'foo2'
133

  
134

  
105 135
def test_block_options_digest_template(pub):
106 136
    create_superuser(pub)
107 137
    BlockDef.wipe()
wcs/admin/blocks.py
184 184
            self.objectdef.name = form.get_widget('name').parse()
185 185
            if form.get_widget('slug'):
186 186
                self.objectdef.slug = form.get_widget('slug').parse()
187
            existing_slug = BlockDef.get_by_slug(self.objectdef.slug)
188
            if existing_slug and existing_slug.id != self.objectdef.id:
189
                form.get_widget('slug').set_error(_('This identifier is already used.'))
187 190
            if form.get_widget('category_id'):
188 191
                self.objectdef.category_id = form.get_widget('category_id').parse()
189 192
            widget_template = form.get_widget('digest_template')
......
191 194
                widget_template.set_error(
192 195
                    _('Wrong variable "form_var_…" detected. Please replace it by "block_var_…".')
193 196
                )
194
            else:
197
            if not form.has_errors():
195 198
                self.objectdef.digest_template = widget_template.parse()
196 199
                self.objectdef.store()
197 200
                return redirect('.')
198
-