* 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:
parent
1f05730851
commit
eb8b6af4ed
|
@ -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>
|
||||
|
|
|
@ -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
45
ietf/nomcom/test_data.py
Normal 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)
|
|
@ -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)
|
||||
|
|
Loading…
Reference in a new issue