* Add news fixtures of name for testing

* Add test data fuction for testing
* Add test case to check the default state and the unique constraint in NomineePosition class
* Override the save fuction of the NomineePosition class to set the state to pending by default
See #909
 - Legacy-Id: 5127
This commit is contained in:
Emilio Jiménez 2012-12-14 18:53:10 +00:00
parent 1f05730851
commit eb8b6af4ed
4 changed files with 145 additions and 13 deletions

View file

@ -445,6 +445,12 @@
<field type="BooleanField" name="used">True</field>
<field type="IntegerField" name="order">0</field>
</object>
<object pk="nomcom" model="name.grouptypename">
<field type="CharField" name="name">NomCom</field>
<field type="TextField" name="desc"></field>
<field type="BooleanField" name="used">True</field>
<field type="IntegerField" name="order">0</field>
</object>
<object pk="ps" model="name.intendedstdlevelname">
<field type="CharField" name="name">Proposed Standard</field>
<field type="TextField" name="desc"></field>
@ -511,6 +517,60 @@
<field type="BooleanField" name="used">True</field>
<field type="IntegerField" name="order">4</field>
</object>
<object pk="pending" model="name.nomineepositionstate">
<field type="CharField" name="name">Pending</field>
<field type="TextField" name="desc"></field>
<field type="BooleanField" name="used">True</field>
<field type="IntegerField" name="order">0</field>
</object>
<object pk="accepted" model="name.nomineepositionstate">
<field type="CharField" name="name">Accepted</field>
<field type="TextField" name="desc"></field>
<field type="BooleanField" name="used">True</field>
<field type="IntegerField" name="order">0</field>
</object>
<object pk="declined" model="name.nomineepositionstate">
<field type="CharField" name="name">Declined</field>
<field type="TextField" name="desc"></field>
<field type="BooleanField" name="used">True</field>
<field type="IntegerField" name="order">0</field>
</object>
<object pk="comment" model="name.feedbacktype">
<field type="CharField" name="name">Comment</field>
<field type="TextField" name="desc"></field>
<field type="BooleanField" name="used">True</field>
<field type="IntegerField" name="order">0</field>
</object>
<object pk="questio" model="name.feedbacktype">
<field type="CharField" name="name">Questionnaire</field>
<field type="TextField" name="desc"></field>
<field type="BooleanField" name="used">True</field>
<field type="IntegerField" name="order">0</field>
</object>
<object pk="nomina" model="name.feedbacktype">
<field type="CharField" name="name">Nomination</field>
<field type="TextField" name="desc"></field>
<field type="BooleanField" name="used">True</field>
<field type="IntegerField" name="order">0</field>
</object>
<object pk="rst" model="name.dbtemplatetypename">
<field type="CharField" name="name">reStructuredText</field>
<field type="TextField" name="desc"></field>
<field type="BooleanField" name="used">True</field>
<field type="IntegerField" name="order">0</field>
</object>
<object pk="plain" model="name.dbtemplatetypename">
<field type="CharField" name="name">Plain</field>
<field type="TextField" name="desc"></field>
<field type="BooleanField" name="used">True</field>
<field type="IntegerField" name="order">0</field>
</object>
<object pk="django" model="name.dbtemplatetypename">
<field type="CharField" name="name">Django</field>
<field type="TextField" name="desc"></field>
<field type="BooleanField" name="used">True</field>
<field type="IntegerField" name="order">0</field>
</object>
<object pk="ietf" model="name.meetingtypename">
<field type="CharField" name="name">IETF</field>
<field type="TextField" name="desc"></field>

View file

@ -86,6 +86,11 @@ class NomineePosition(models.Model):
verbose_name_plural = 'Nominee positions'
unique_together = ('position', 'nominee')
def save(self, **kwargs):
if not self.pk and not self.state_id:
self.state = NomineePositionState.objects.get(slug='pending')
super(NomineePosition, self).save(**kwargs)
def __unicode__(self):
return u"%s - %s" % (self.nominee, self.position)

45
ietf/nomcom/test_data.py Normal file
View file

@ -0,0 +1,45 @@
from django.contrib.auth.models import User
from ietf.group.models import Group
from ietf.person.models import Email, Person
from ietf.name.models import GroupStateName, GroupTypeName
from ietf.nomcom.models import NomCom, Position, NomineePosition, Nominee
POSITIONS = {
"GEN": "IETF Chair/Gen AD",
"APP": "APP Area Director",
"INT": "INT Area Director",
"OAM": "OPS Area Director",
"OPS": "OPS Area Director",
"RAI": "RAI Area Director",
"RTG": "RTG Area Director",
"SEC": "SEC Area Director",
"TSV": "TSV Area Director",
"IAB": "IAB Member",
"IAOC": "IAOC Member",
}
def nomcom_test_data():
group, created = Group.objects.get_or_create(name='IAB/IESG Nominating Committee 2013/2014',
state=GroupStateName.objects.get(='active'),
type=GroupTypeName.objects.get(slug='nomcom'),
acronym='nomcom2013')
nomcom, created = NomCom.objects.get_or_create(group=group)
u, created = User.objects.get_or_create(username="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)
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

@ -1,16 +1,38 @@
"""
This file demonstrates writing tests using the unittest module. These will pass
when you run "manage.py test".
Replace this with more appropriate tests for your application.
"""
from django.test import TestCase
from django.db import IntegrityError
from ietf.nomcom.test_data import nomcom_test_data
from ietf.nomcom.models import NomineePosition, Position, Nominee, NomineePositionState
class SimpleTest(TestCase):
def test_basic_addition(self):
"""
Tests that 1 + 1 always equals 2.
"""
self.assertEqual(1 + 1, 2)
class NomineePositionStateSaveTest(TestCase):
"""Tests for the NomineePosition save override method"""
fixtures = ['names', 'nomcom_templates']
def setUp(self):
nomcom_test_data()
self.nominee = Nominee.objects.get(email__address="plain@example.com")
def test_state_autoset(self):
"""Verify state is autoset correctly"""
position = Position.objects.get(name='APP')
nominee_position = NomineePosition.objects.create(position=position,
nominee=self.nominee)
self.assertEqual(nominee_position.state.slug, 'pending')
def test_state_specified(self):
"""Verify state if specified"""
position = Position.objects.get(name='INT')
nominee_position = NomineePosition.objects.create(position=position,
nominee=self.nominee,
state=NomineePositionState.objects.get(slug='accepted'))
self.assertEqual(nominee_position.state.slug, 'accepted')
def test_nomine_position_unique(self):
"""Verify nomine and position are unique together"""
position = Position.objects.get(name='OAM')
NomineePosition.objects.create(position=position,
nominee=self.nominee)
nominee_position = NomineePosition(position=position, nominee=self.nominee)
self.assertRaises(IntegrityError, nominee_position.save)