manager: fix desk edition & slug unicity (#50640)

This commit is contained in:
Lauréline Guérin 2021-01-28 10:31:19 +01:00
parent 7beef8f747
commit a11173e9ed
No known key found for this signature in database
GPG Key ID: 1FAB9B9B4F93D473
2 changed files with 35 additions and 0 deletions

View File

@ -297,6 +297,14 @@ class DeskForm(forms.ModelForm):
model = Desk
exclude = ['agenda']
def clean_slug(self):
slug = self.cleaned_data['slug']
if self.instance.agenda.desk_set.filter(slug=slug).exclude(pk=self.instance.pk).exists():
raise ValidationError(_('Another desk exists with the same identifier.'))
return slug
class TimePeriodExceptionForm(forms.ModelForm):
all_desks = forms.BooleanField(label=_('Apply exception on all desks of the agenda'), required=False)

View File

@ -2078,6 +2078,33 @@ def test_meetings_agenda_add_desk(app, admin_user):
assert 'Desk B' in resp.text
def test_meetings_agenda_edit_desk(app, admin_user):
agenda = Agenda.objects.create(label=u'Foo bar', kind='meetings')
desk = Desk.objects.create(agenda=agenda, label='Desk A')
desk2 = Desk.objects.create(agenda=agenda, label='Desk B')
other_agenda = Agenda.objects.create(label=u'Foo bar', kind='meetings')
other_desk = Desk.objects.create(agenda=other_agenda, label='Desk A')
assert other_desk.slug == desk.slug
app = login(app)
resp = app.get('/manage/desks/%s/edit' % desk.pk)
resp.form['label'] = 'Desk C'
resp.form['slug'] = desk.slug
resp = resp.form.submit().follow()
assert 'Desk A' not in resp.text
assert 'Desk B' in resp.text
assert 'Desk C' in resp.text
desk.refresh_from_db()
assert desk.label == 'Desk C'
assert desk.slug == other_desk.slug
# check slug edition
resp = app.get('/manage/desks/%s/edit' % desk.pk)
resp.form['slug'] = desk2.slug
resp = resp.form.submit()
assert resp.context['form'].errors['slug'] == ['Another desk exists with the same identifier.']
def test_meetings_agenda_add_desk_from_another(app, admin_user):
agenda = Agenda.objects.create(label=u'Foo bar', kind='meetings')
desk = Desk.objects.create(agenda=agenda, label='Desk A')