* Fix some decorators in private index and private merge views

* Add edit chair test
 * Add new roles in nomcom_test_data function
 * Add member rolename to name app fixtures
 * Change urls names
See #904 #919
 - Legacy-Id: 5163
This commit is contained in:
Emilio Jiménez 2013-01-03 14:40:34 +00:00
parent 8b0c358810
commit 140ebaad31
6 changed files with 175 additions and 40 deletions

View file

@ -649,6 +649,12 @@
<field type="BooleanField" name="used">True</field>
<field type="IntegerField" name="order">0</field>
</object>
<object pk="member" model="name.rolename">
<field type="CharField" name="name">Member</field>
<field type="TextField" name="desc"></field>
<field type="BooleanField" name="used">True</field>
<field type="IntegerField" name="order">0</field>
</object>
<object pk="schedw" model="name.sessionstatusname">
<field type="CharField" name="name">Waiting for Scheduling</field>
<field type="TextField" name="desc"></field>

View file

@ -112,7 +112,7 @@ class EditMembersFormPreview(FormPreview):
person=member['person'],
email=member['email_obj'])
return HttpResponseRedirect(reverse('edit_members', kwargs={'year': self.year}))
return HttpResponseRedirect(reverse('nomcom_edit_members', kwargs={'year': self.year}))
class EditChairForm(BaseNomcomForm, forms.Form):
@ -167,7 +167,7 @@ class EditChairFormPreview(FormPreview):
person=chair_info['person'],
email=chair_info['email_obj'])
return HttpResponseRedirect(reverse('edit_chair', kwargs={'year': self.year}))
return HttpResponseRedirect(reverse('nomcom_edit_chair', kwargs={'year': self.year}))
class EditPublicKeyForm(BaseNomcomForm, forms.ModelForm):

View file

@ -1,9 +1,17 @@
from django.contrib.auth.models import User
from ietf.group.models import Group
from ietf.group.models import Group, Role
from ietf.person.models import Email, Person
from ietf.name.models import GroupStateName, GroupTypeName
from ietf.nomcom.models import NomCom, Position, NomineePosition, Nominee
from ietf.name.models import RoleName
from ietf.nomcom.models import NomCom, Position, Nominee
COMMUNITY_USER = 'plain'
CHAIR_USER = 'chair'
MEMBER_USER = 'member'
SECRETARIAT_USER = 'secretariat'
EMAIL_DOMAIN = '@example.com'
USERS = [COMMUNITY_USER, CHAIR_USER, MEMBER_USER, SECRETARIAT_USER]
POSITIONS = {
"GEN": "IETF Chair/Gen AD",
@ -21,25 +29,55 @@ POSITIONS = {
def nomcom_test_data():
# groups
group, created = Group.objects.get_or_create(name='IAB/IESG Nominating Committee 2013/2014',
state=GroupStateName.objects.get(slug='active'),
type=GroupTypeName.objects.get(slug='nomcom'),
state_id='active',
type_id='nomcom',
acronym='nomcom2013')
nomcom, created = NomCom.objects.get_or_create(group=group)
u, created = User.objects.get_or_create(username="plain", password="plain")
plainman, created = Person.objects.get_or_create(
name="Plain Man",
ascii="Plain Man",
user=u)
email, cerated = Email.objects.get_or_create(
address="plain@example.com",
person=plainman)
secretariat, created = Group.objects.get_or_create(name="Secretariat",
acronym="secretariat",
state_id="active",
type_id="ietf",
parent=None)
# users
for user in USERS:
u, created = User.objects.get_or_create(username=user, password=user)
person, created = Person.objects.get_or_create(
name=user,
ascii=user,
user=u)
email, created = Email.objects.get_or_create(
address="%s%s" % (user, EMAIL_DOMAIN),
person=person)
if user == CHAIR_USER:
role, created = RoleName.objects.get_or_create(slug="chair")
Role.objects.get_or_create(name=role,
group=group,
person=person,
email=email)
if user == MEMBER_USER:
role, created = RoleName.objects.get_or_create(slug="member")
Role.objects.get_or_create(name=role,
group=group,
person=person,
email=email)
if user == SECRETARIAT_USER:
role, created = RoleName.objects.get_or_create(slug="secr")
Role.objects.create(name=role,
group=secretariat,
person=person,
email=email)
# nominee
email = Email.objects.get(person__name=COMMUNITY_USER)
nominee, created = Nominee.objects.get_or_create(email=email)
# positions
for name, description in POSITIONS.iteritems():
position, created = Position.objects.get_or_create(nomcom=nomcom,
name=name,
description=description,
is_open=True,
incumbent=email)
Position.objects.get(name='GEN')
nominee, created = Nominee.objects.get_or_create(email=email)
nominee_position, created = NomineePosition.objects.get_or_create(position=position, nominee=nominee)

View file

@ -6,12 +6,16 @@ from django.test import TestCase
from django.db import IntegrityError
from django.core.urlresolvers import reverse
from django.core.files import File
from django.contrib.formtools.preview import security_hash
from ietf.utils.test_utils import login_testing_unauthorized
from ietf.utils.pipe import pipe
from ietf.nomcom.test_data import nomcom_test_data
from ietf.nomcom.test_data import nomcom_test_data, COMMUNITY_USER, CHAIR_USER, \
MEMBER_USER, SECRETARIAT_USER, EMAIL_DOMAIN
from ietf.nomcom.models import NomineePosition, Position, Nominee, \
NomineePositionState, Feedback, FeedbackType
from ietf.nomcom.forms import EditChairForm
class NomcomViewsTest(TestCase):
@ -26,32 +30,117 @@ class NomcomViewsTest(TestCase):
nomcom_test_data()
self.year = 2013
def test_home_view(self):
"""Verify home view"""
url = reverse('nomcom_index', kwargs={'year': self.year})
# private urls
self.private_index_url = reverse('nomcom_private_index', kwargs={'year': self.year})
self.private_merge_url = reverse('nomcom_private_merge', kwargs={'year': self.year})
self.edit_members_url = reverse('nomcom_edit_members', kwargs={'year': self.year})
self.edit_chair_url = reverse('nomcom_edit_chair', kwargs={'year': self.year})
self.public_key_url = reverse('nomcom_edit_publickey', kwargs={'year': self.year})
# public urls
self.index_url = reverse('nomcom_index', kwargs={'year': self.year})
self.requirements_url = reverse('nomcom_requirements', kwargs={'year': self.year})
self.questionnaires_url = reverse('nomcom_questionnaires', kwargs={'year': self.year})
self.comments_url = reverse('nomcom_comments', kwargs={'year': self.year})
self.nominate_url = reverse('nomcom_nominate', kwargs={'year': self.year})
def access_member_url(self, url):
login_testing_unauthorized(self, COMMUNITY_USER, url)
login_testing_unauthorized(self, CHAIR_USER, url)
self.check_url_status(url, 200)
self.client.logout()
login_testing_unauthorized(self, MEMBER_USER, url)
self.check_url_status(url, 200)
def test_nominate_view(self):
"""Verify nominate view"""
url = reverse('nomcom_nominate', kwargs={'year': self.year})
login_testing_unauthorized(self, 'kaligula', url)
def access_chair_url(self, url):
login_testing_unauthorized(self, COMMUNITY_USER, url)
login_testing_unauthorized(self, MEMBER_USER, url)
login_testing_unauthorized(self, CHAIR_USER, url)
self.check_url_status(url, 200)
def test_private_index_view(self):
"""Verify private home view"""
self.access_member_url(self.private_index_url)
self.client.logout()
def test_private_merge_view(self):
"""Verify private merge view"""
# TODO: complete merge nominations
self.access_chair_url(self.private_merge_url)
self.client.logout()
def test_edit_members_view(self):
"""Verify edit member view"""
# TODO: complete chage edit memebers
self.access_chair_url(self.edit_members_url)
self.client.logout()
def change_chair(self, user):
test_data = {'chair': '%s%s' % (user, EMAIL_DOMAIN),
'stage': 1}
# preview
self.client.post(self.edit_chair_url, test_data)
hash = security_hash(None, EditChairForm(test_data))
test_data.update({'hash': hash, 'stage': 2})
# submit
self.client.post(self.edit_chair_url, test_data)
def test_edit_chair_view(self):
"""Verify edit chair view"""
login_testing_unauthorized(self, COMMUNITY_USER, self.edit_chair_url)
login_testing_unauthorized(self, CHAIR_USER, self.edit_chair_url)
login_testing_unauthorized(self, SECRETARIAT_USER, self.edit_chair_url)
self.check_url_status(self.edit_chair_url, 200)
self.change_chair(COMMUNITY_USER)
# check chair actions
self.client.login(remote_user=COMMUNITY_USER)
url = reverse('nomcom_edit_members', kwargs={'year': self.year})
self.check_url_status(url, 200)
url = reverse('nomcom_edit_publickey', kwargs={'year': self.year})
self.check_url_status(url, 200)
# revert edit nomcom chair
login_testing_unauthorized(self, SECRETARIAT_USER, self.edit_chair_url)
self.change_chair(CHAIR_USER)
self.client.logout()
def test_edit_publickey_view(self):
"""Verify edit publickey view"""
# TODO: complete chage edit public key
login_testing_unauthorized(self, COMMUNITY_USER, self.public_key_url)
login_testing_unauthorized(self, CHAIR_USER, self.public_key_url)
self.check_url_status(self.public_key_url, 200)
self.client.logout()
def test_index_view(self):
"""Verify home view"""
self.check_url_status(self.index_url, 200)
def test_requirements_view(self):
"""Verify requirements view"""
url = reverse('nomcom_requirements', kwargs={'year': self.year})
self.check_url_status(url, 200)
self.check_url_status(self.requirements_url, 200)
def test_questionnaires_view(self):
"""Verify questionnaires view"""
url = reverse('nomcom_questionnaires', kwargs={'year': self.year})
self.check_url_status(url, 200)
self.check_url_status(self.questionnaires_url, 200)
def test_comments_view(self):
"""Verify comments view"""
url = reverse('nomcom_comments', kwargs={'year': self.year})
login_testing_unauthorized(self, 'plain', url)
self.check_url_status(url, 200)
# TODO: comments view
login_testing_unauthorized(self, COMMUNITY_USER, self.comments_url)
self.check_url_status(self.comments_url, 200)
self.client.logout()
def test_nominate_view(self):
"""Verify nominate view"""
# TODO: complete to do a nomination
login_testing_unauthorized(self, COMMUNITY_USER, self.nominate_url)
self.check_url_status(self.nominate_url, 200)
self.client.logout()
class NomineePositionStateSaveTest(TestCase):
@ -60,7 +149,7 @@ class NomineePositionStateSaveTest(TestCase):
def setUp(self):
nomcom_test_data()
self.nominee = Nominee.objects.get(email__address="plain@example.com")
self.nominee = Nominee.objects.get(email__person__name=COMMUNITY_USER)
def test_state_autoset(self):
"""Verify state is autoset correctly"""
@ -132,7 +221,7 @@ class FeedbackTest(TestCase):
def test_encrypted_comments(self):
nominee = Nominee.objects.get(email__address="plain@example.com")
nominee = Nominee.objects.get(email__person__name=COMMUNITY_USER)
position = Position.objects.get(name='OAM')
nomcom = position.nomcom

View file

@ -5,9 +5,9 @@ from ietf.nomcom.forms import EditChairForm, EditChairFormPreview, \
urlpatterns = patterns('ietf.nomcom.views',
url(r'^(?P<year>\d{4})/private/$', 'private_index', name='nomcom_private_index'),
url(r'^(?P<year>\d{4})/private/merge/$', 'private_merge', name='nomcom_private_merge'),
url(r'^(?P<year>\d{4})/private/edit-members/$', EditMembersFormPreview(EditMembersForm), name='edit_members'),
url(r'^(?P<year>\d{4})/private/edit-chair/$', EditChairFormPreview(EditChairForm), name='edit_chair'),
url(r'^(?P<year>\d{4})/private/edit-publickey/$', 'edit_publickey', name='edit_publickey'),
url(r'^(?P<year>\d{4})/private/edit-members/$', EditMembersFormPreview(EditMembersForm), name='nomcom_edit_members'),
url(r'^(?P<year>\d{4})/private/edit-chair/$', EditChairFormPreview(EditChairForm), name='nomcom_edit_chair'),
url(r'^(?P<year>\d{4})/private/edit-publickey/$', 'edit_publickey', name='nomcom_edit_publickey'),
url(r'^(?P<year>\d{4})/$', 'index', name='nomcom_index'),
url(r'^(?P<year>\d{4})/requirements/$', 'requirements', name='nomcom_requirements'),

View file

@ -24,7 +24,7 @@ def index(request, year):
'template': template}, RequestContext(request))
@member_required(role='chair')
@member_required(role='member')
def private_index(request, year):
nomcom = get_nomcom_by_year(year)
is_nomcom_member(request.user, nomcom)
@ -34,8 +34,9 @@ def private_index(request, year):
'selected': 'index'}, RequestContext(request))
@member_required(role='member')
@member_required(role='chair')
def private_merge(request, year):
# TODO: complete merge nominations
nomcom = get_nomcom_by_year(year)
is_nomcom_member(request.user, nomcom)
return render_to_response('nomcom/private_merge.html',
@ -86,6 +87,7 @@ def nominate(request, year):
@login_required
def comments(request, year):
# TODO: complete to do comments
nomcom = get_nomcom_by_year(year)
return render_to_response('nomcom/comments.html',
{'nomcom': nomcom,