From 4d9bdcad6aa4e81837b40d516b6c7e2cb78b6c3b Mon Sep 17 00:00:00 2001 From: Ryan Cross Date: Tue, 9 May 2017 00:33:55 +0000 Subject: [PATCH] Add group field to Roles add form validation. Fixes #2292. Commit ready for merge. - Legacy-Id: 13276 --- ietf/secr/groups/forms.py | 4 ++++ ietf/secr/groups/tests.py | 3 ++- ietf/secr/groups/views.py | 2 +- ietf/secr/meetings/forms.py | 8 ++++++++ ietf/secr/meetings/tests.py | 4 ++++ ietf/secr/meetings/views.py | 6 +++--- ietf/secr/roles/tests.py | 14 ++++++++++++++ ietf/secr/sreq/views.py | 16 +--------------- ietf/secr/templates/groups/people.html | 1 + 9 files changed, 38 insertions(+), 20 deletions(-) diff --git a/ietf/secr/groups/forms.py b/ietf/secr/groups/forms.py index c79f7cb14..9dbbaed9d 100644 --- a/ietf/secr/groups/forms.py +++ b/ietf/secr/groups/forms.py @@ -182,10 +182,14 @@ class RoleForm(forms.Form): person = cleaned_data['person'] email = cleaned_data['email'] name = cleaned_data['name'] + group_acronym = cleaned_data['group_acronym'] if Role.objects.filter(name=name,group=self.group,person=person,email=email): raise forms.ValidationError('ERROR: This is a duplicate entry') + if not group_acronym: + raise forms.ValidationError('You must select a group.') + return cleaned_data class SearchForm(forms.Form): diff --git a/ietf/secr/groups/tests.py b/ietf/secr/groups/tests.py index fbc2ea2e3..551cff4e4 100644 --- a/ietf/secr/groups/tests.py +++ b/ietf/secr/groups/tests.py @@ -124,7 +124,8 @@ class GroupsTest(TestCase): person = Person.objects.get(name='AreaĆ° Irector') group = Group.objects.filter(acronym='mars')[0] url = reverse('ietf.secr.groups.views.people', kwargs={'acronym':group.acronym}) - post_data = {'name':'chair', + post_data = {'group_acronym':group.acronym, + 'name':'chair', 'person':'Joe Smith - (%s)' % person.id, 'email':person.email_set.all()[0].address, 'submit':'Add'} diff --git a/ietf/secr/groups/views.py b/ietf/secr/groups/views.py index 220ead8b8..1dcd3bf62 100644 --- a/ietf/secr/groups/views.py +++ b/ietf/secr/groups/views.py @@ -347,7 +347,7 @@ def people(request, acronym): messages.success(request, 'New %s added successfully!' % name) return redirect('ietf.secr.groups.views.people', acronym=group.acronym) else: - form = RoleForm(initial={'name':'chair'},group=group) + form = RoleForm(initial={'name':'chair', 'group_acronym':group.acronym}, group=group) return render(request, 'groups/people.html', { 'form':form, diff --git a/ietf/secr/meetings/forms.py b/ietf/secr/meetings/forms.py index c25cdff8d..9f6a5d589 100644 --- a/ietf/secr/meetings/forms.py +++ b/ietf/secr/meetings/forms.py @@ -88,6 +88,14 @@ class TimeChoiceField(forms.ChoiceField): #---------------------------------------------------------- # Forms #---------------------------------------------------------- +class MeetingSelectForm(forms.Form): + meeting = forms.ChoiceField() + + def __init__(self,*args,**kwargs): + choices = kwargs.pop('choices') + super(MeetingSelectForm, self).__init__(*args,**kwargs) + self.fields['meeting'].widget.choices = choices + class MeetingModelForm(forms.ModelForm): idsubmit_cutoff_time_utc = ietf.utils.fields.DurationField() idsubmit_cutoff_warning_days = ietf.utils.fields.DurationField() diff --git a/ietf/secr/meetings/tests.py b/ietf/secr/meetings/tests.py index f6aa1fe72..46eb53a96 100644 --- a/ietf/secr/meetings/tests.py +++ b/ietf/secr/meetings/tests.py @@ -43,10 +43,14 @@ class SecrMeetingTestCase(TestCase): def test_main(self): "Main Test" + meeting = make_meeting_test_data() url = reverse('ietf.secr.meetings.views.main') self.client.login(username="secretary", password="secretary+password") response = self.client.get(url) self.assertEqual(response.status_code, 200) + response = self.client.post(url, {'meeting':meeting.number}) + url = reverse('ietf.secr.meetings.views.view', kwargs={'meeting_id':meeting.number}) + self.assertRedirects(response,url) def test_view(self): "View Test" diff --git a/ietf/secr/meetings/views.py b/ietf/secr/meetings/views.py index c75ad3700..8b0675481 100644 --- a/ietf/secr/meetings/views.py +++ b/ietf/secr/meetings/views.py @@ -20,7 +20,7 @@ from ietf.meeting.models import Meeting, Session, Room, TimeSlot, SchedTimeSessA from ietf.group.models import Group, GroupEvent from ietf.person.models import Person from ietf.secr.meetings.blue_sheets import create_blue_sheets -from ietf.secr.meetings.forms import ( BaseMeetingRoomFormSet, MeetingModelForm, +from ietf.secr.meetings.forms import ( BaseMeetingRoomFormSet, MeetingModelForm, MeetingSelectForm, MeetingRoomForm, NewSessionForm, NonSessionEditForm, NonSessionForm, TimeSlotForm, UploadBlueSheetForm, get_next_slot ) from ietf.secr.proceedings.views import build_choices @@ -433,10 +433,10 @@ def main(request): meetings = Meeting.objects.filter(type='ietf').order_by('-number') if request.method == 'POST': - return redirect('ietf.secr.meetings.views.view', meeting_id=request.POST['group']) + return redirect('ietf.secr.meetings.views.view', meeting_id=request.POST['meeting']) choices = [ (str(x.number),str(x.number)) for x in meetings ] - form = GroupSelectForm(choices=choices) + form = MeetingSelectForm(choices=choices) return render(request, 'meetings/main.html', { 'form': form, diff --git a/ietf/secr/roles/tests.py b/ietf/secr/roles/tests.py index 7bd041966..6305c884a 100644 --- a/ietf/secr/roles/tests.py +++ b/ietf/secr/roles/tests.py @@ -52,3 +52,17 @@ class SecrRolesMainTestCase(TestCase): self.assertRedirects(response, target) self.failUnless('added successfully' in response.content) + def test_roles_add_no_group(self): + make_test_data() + augment_data() + person = Person.objects.get(name='AreaĆ° Irector') + url = reverse('ietf.secr.roles.views.main') + post_data = {'group_acronym':'', + 'name':'chair', + 'person':'Joe Smith - (%s)' % person.id, + 'email':person.email_set.all()[0].address, + 'submit':'Add'} + self.client.login(username="secretary", password="secretary+password") + response = self.client.post(url,post_data,follow=True) + self.assertEqual(response.status_code, 200) + self.failUnless('You must select a group' in response.content) diff --git a/ietf/secr/sreq/views.py b/ietf/secr/sreq/views.py index 019ede3f4..5c6d56124 100644 --- a/ietf/secr/sreq/views.py +++ b/ietf/secr/sreq/views.py @@ -12,7 +12,7 @@ from ietf.ietfauth.utils import has_role, role_required from ietf.meeting.models import Meeting, Session, Constraint, ResourceAssociation from ietf.meeting.helpers import get_meeting from ietf.name.models import SessionStatusName, ConstraintName -from ietf.secr.sreq.forms import SessionForm, GroupSelectForm, ToolStatusForm +from ietf.secr.sreq.forms import SessionForm, ToolStatusForm from ietf.secr.utils.decorators import check_permissions from ietf.secr.utils.group import groups_by_session from ietf.utils.mail import send_mail @@ -487,14 +487,6 @@ def main(request): 'message': message}, ) - # TODO this is not currently used in the main template - if request.method == 'POST': - button_text = request.POST.get('submit', '') - if button_text == 'Group will not meet': - return redirect('ietf.secr.sreq.views.no_session', acronym=request.POST['group']) - else: - return redirect('ietf.secr.sreq.views.new', acronym=request.POST['group']) - meeting = get_meeting() scheduled_groups,unscheduled_groups = groups_by_session(request.user, meeting, types=['wg','rg','ag']) @@ -502,11 +494,6 @@ def main(request): if not scheduled_groups and not unscheduled_groups: messages.warning(request, 'The account %s is not associated with any groups. If you have multiple Datatracker accounts you may try another or report a problem to ietf-action@ietf.org' % request.user) - # load form select with unscheduled groups - choices = zip([ g.pk for g in unscheduled_groups ], - [ str(g) for g in unscheduled_groups ]) - form = GroupSelectForm(choices=choices) - # add session status messages for use in template for group in scheduled_groups: sessions = group.session_set.filter(meeting=meeting) @@ -522,7 +509,6 @@ def main(request): return render(request, 'sreq/main.html', { 'is_locked': is_locked, - 'form': form, 'meeting': meeting, 'scheduled_groups': scheduled_groups, 'unscheduled_groups': unscheduled_groups}, diff --git a/ietf/secr/templates/groups/people.html b/ietf/secr/templates/groups/people.html index 920be7095..46ebffa63 100644 --- a/ietf/secr/templates/groups/people.html +++ b/ietf/secr/templates/groups/people.html @@ -45,6 +45,7 @@

Add Role

{% csrf_token %} {{ form.non_field_errors }} + {{ form.group_acronym }}
{{ form.name.errors }}{{ form.name }}