Add group field to Roles add form validation. Fixes #2292. Commit ready for merge.

- Legacy-Id: 13276
This commit is contained in:
Ryan Cross 2017-05-09 00:33:55 +00:00
parent 462fc1a2e5
commit 4d9bdcad6a
9 changed files with 38 additions and 20 deletions

View file

@ -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):

View file

@ -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'}

View file

@ -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,

View file

@ -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()

View file

@ -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"

View file

@ -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,

View file

@ -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)

View file

@ -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},

View file

@ -45,6 +45,7 @@
<h3>Add Role</h3>
<form id="groups-people" action="" method="post">{% csrf_token %}
{{ form.non_field_errors }}
{{ form.group_acronym }}
<table class="full-width">
<tr>
<td>{{ form.name.errors }}{{ form.name }}</td>