virtual agenda: don't check deleted meeting types (#46974)

This commit is contained in:
Lauréline Guérin 2020-09-25 14:51:55 +02:00
parent c7d442f97a
commit d7a75f172c
No known key found for this signature in database
GPG Key ID: 1FAB9B9B4F93D473
2 changed files with 29 additions and 13 deletions

View File

@ -515,6 +515,7 @@ class VirtualMember(models.Model):
label=meetingtype.label,
slug=meetingtype.slug,
duration=meetingtype.duration,
deleted=False,
)
except MeetingType.DoesNotExist:
error = True
@ -531,7 +532,8 @@ class VirtualMember(models.Model):
num_virt_meetingtypes = len(virtual_meetingtypes)
if (
num_virt_meetingtypes
and num_virt_meetingtypes != MeetingType.objects.filter(agenda=self.real_agenda).count()
and num_virt_meetingtypes
!= MeetingType.objects.filter(agenda=self.real_agenda, deleted=False).count()
):
extra_qs = MeetingType.objects.filter(agenda=self.real_agenda)
for virt_meetingtype in virtual_meetingtypes:

View File

@ -17,7 +17,6 @@ from django.urls import reverse
from django.utils.encoding import force_text
from django.utils.timezone import make_aware, now, localtime
import datetime
import freezegun
import pytest
import requests
@ -3431,7 +3430,7 @@ def test_virtual_agenda_settings_include(app, admin_user):
agenda = Agenda.objects.create(label='My Virtual agenda', kind='virtual')
Agenda.objects.create(label='Event agenda', kind='events')
meeting_agenda_1 = Agenda.objects.create(label='Meeting agenda 1', kind='meetings')
mt1 = MeetingType.objects.create(label='MT', duration=30, agenda=meeting_agenda_1)
MeetingType.objects.create(label='MT', duration=30, agenda=meeting_agenda_1)
Agenda.objects.create(label='Meeting agenda 2', kind='meetings')
app = login(app)
@ -3516,8 +3515,7 @@ def test_virtual_agenda_settings_include_incompatible_agenda(app, admin_user):
# refused because different slug
mt = MeetingType.objects.create(agenda=meeting_agenda_2, label='MT', slug='mtt', duration=10)
resp = app.get('/manage/agendas/%s/settings' % agenda.pk)
resp = resp.click('Include Agenda')
resp = app.get('/manage/agendas/%s/add-virtual-member' % agenda.pk)
resp.form['real_agenda'].value = meeting_agenda_2.pk
resp = resp.form.submit()
assert 'This agenda does not have the same meeting types provided by the virtual agenda.' in resp.text
@ -3527,8 +3525,7 @@ def test_virtual_agenda_settings_include_incompatible_agenda(app, admin_user):
# refused because different duration
mt = MeetingType.objects.create(agenda=meeting_agenda_2, label='MT', slug='mt', duration=15)
resp = app.get('/manage/agendas/%s/settings' % agenda.pk)
resp = resp.click('Include Agenda')
resp = app.get('/manage/agendas/%s/add-virtual-member' % agenda.pk)
resp.form['real_agenda'].value = meeting_agenda_2.pk
resp = resp.form.submit()
assert 'This agenda does not have the same meeting types provided by the virtual agenda.' in resp.text
@ -3538,32 +3535,39 @@ def test_virtual_agenda_settings_include_incompatible_agenda(app, admin_user):
# refused because different label
mt = MeetingType.objects.create(agenda=meeting_agenda_2, label='MTT', slug='mt', duration=10)
resp = app.get('/manage/agendas/%s/settings' % agenda.pk)
resp = resp.click('Include Agenda')
resp = app.get('/manage/agendas/%s/add-virtual-member' % agenda.pk)
resp.form['real_agenda'].value = meeting_agenda_2.pk
resp = resp.form.submit()
assert 'This agenda does not have the same meeting types provided by the virtual agenda.' in resp.text
assert 'Meeting type "MT" (10 minutes) (identifier: mt) does no exist.' in resp.text
assert meeting_agenda_2.virtual_agendas.count() == 0
mt.delete()
# refused because has one more meeting type
mt = MeetingType.objects.create(agenda=meeting_agenda_2, label='MT', slug='mt', duration=10)
mt2 = MeetingType.objects.create(agenda=meeting_agenda_2, label='AA', slug='aa', duration=30)
resp = app.get('/manage/agendas/%s/settings' % agenda.pk)
resp = resp.click('Include Agenda')
resp = app.get('/manage/agendas/%s/add-virtual-member' % agenda.pk)
resp.form['real_agenda'].value = meeting_agenda_2.pk
resp = resp.form.submit()
assert 'This agenda does not have the same meeting types provided by the virtual agenda.' in resp.text
assert 'Extra meeting type, "AA".' in resp.text
assert meeting_agenda_2.virtual_agendas.count() == 0
# ok because mt2 is marked as deleted
mt2.deleted = True
mt2.save()
resp = app.get('/manage/agendas/%s/add-virtual-member' % agenda.pk)
resp.form['real_agenda'].value = meeting_agenda_2.pk
resp = resp.form.submit()
assert meeting_agenda_2.virtual_agendas.count() == 1
VirtualMember.objects.filter(real_agenda=meeting_agenda_2).delete()
mt.delete()
mt2.delete()
# refused because has one less meeting type
mt = MeetingType.objects.create(agenda=meeting_agenda_2, label='MT', slug='mt', duration=10)
mt2 = MeetingType.objects.create(agenda=meeting_agenda_1, label='AA', slug='aa', duration=30)
resp = app.get('/manage/agendas/%s/settings' % agenda.pk)
resp = resp.click('Include Agenda')
resp = app.get('/manage/agendas/%s/add-virtual-member' % agenda.pk)
resp.form['real_agenda'].value = meeting_agenda_2.pk
resp = resp.form.submit()
assert 'This agenda does not have the same meeting types provided by the virtual agenda.' in resp.text
@ -3572,6 +3576,16 @@ def test_virtual_agenda_settings_include_incompatible_agenda(app, admin_user):
mt.delete()
mt2.delete()
# deleted meeting type is not checked
mt = MeetingType.objects.create(agenda=meeting_agenda_2, label='MT', slug='mt', duration=10, deleted=True)
resp = app.get('/manage/agendas/%s/add-virtual-member' % agenda.pk)
resp.form['real_agenda'].value = meeting_agenda_2.pk
resp = resp.form.submit()
assert 'This agenda does not have the same meeting types provided by the virtual agenda.' in resp.text
assert 'Meeting type "MT" (10 minutes) (identifier: mt) does no exist.' in resp.text
assert meeting_agenda_2.virtual_agendas.count() == 0
mt.delete()
def test_cant_delete_meetingtype_used_by_virtual_agenda(app, admin_user):
agenda = Agenda.objects.create(label='My Virtual agenda', kind='virtual')