Skip to content

Commit eb8b6af

Browse files
committed
* 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 ietf-tools#909 - Legacy-Id: 5127
1 parent 1f05730 commit eb8b6af

File tree

4 files changed

+144
-12
lines changed

4 files changed

+144
-12
lines changed

ietf/name/fixtures/names.xml

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -445,6 +445,12 @@
445445
<field type="BooleanField" name="used">True</field>
446446
<field type="IntegerField" name="order">0</field>
447447
</object>
448+
<object pk="nomcom" model="name.grouptypename">
449+
<field type="CharField" name="name">NomCom</field>
450+
<field type="TextField" name="desc"></field>
451+
<field type="BooleanField" name="used">True</field>
452+
<field type="IntegerField" name="order">0</field>
453+
</object>
448454
<object pk="ps" model="name.intendedstdlevelname">
449455
<field type="CharField" name="name">Proposed Standard</field>
450456
<field type="TextField" name="desc"></field>
@@ -511,6 +517,60 @@
511517
<field type="BooleanField" name="used">True</field>
512518
<field type="IntegerField" name="order">4</field>
513519
</object>
520+
<object pk="pending" model="name.nomineepositionstate">
521+
<field type="CharField" name="name">Pending</field>
522+
<field type="TextField" name="desc"></field>
523+
<field type="BooleanField" name="used">True</field>
524+
<field type="IntegerField" name="order">0</field>
525+
</object>
526+
<object pk="accepted" model="name.nomineepositionstate">
527+
<field type="CharField" name="name">Accepted</field>
528+
<field type="TextField" name="desc"></field>
529+
<field type="BooleanField" name="used">True</field>
530+
<field type="IntegerField" name="order">0</field>
531+
</object>
532+
<object pk="declined" model="name.nomineepositionstate">
533+
<field type="CharField" name="name">Declined</field>
534+
<field type="TextField" name="desc"></field>
535+
<field type="BooleanField" name="used">True</field>
536+
<field type="IntegerField" name="order">0</field>
537+
</object>
538+
<object pk="comment" model="name.feedbacktype">
539+
<field type="CharField" name="name">Comment</field>
540+
<field type="TextField" name="desc"></field>
541+
<field type="BooleanField" name="used">True</field>
542+
<field type="IntegerField" name="order">0</field>
543+
</object>
544+
<object pk="questio" model="name.feedbacktype">
545+
<field type="CharField" name="name">Questionnaire</field>
546+
<field type="TextField" name="desc"></field>
547+
<field type="BooleanField" name="used">True</field>
548+
<field type="IntegerField" name="order">0</field>
549+
</object>
550+
<object pk="nomina" model="name.feedbacktype">
551+
<field type="CharField" name="name">Nomination</field>
552+
<field type="TextField" name="desc"></field>
553+
<field type="BooleanField" name="used">True</field>
554+
<field type="IntegerField" name="order">0</field>
555+
</object>
556+
<object pk="rst" model="name.dbtemplatetypename">
557+
<field type="CharField" name="name">reStructuredText</field>
558+
<field type="TextField" name="desc"></field>
559+
<field type="BooleanField" name="used">True</field>
560+
<field type="IntegerField" name="order">0</field>
561+
</object>
562+
<object pk="plain" model="name.dbtemplatetypename">
563+
<field type="CharField" name="name">Plain</field>
564+
<field type="TextField" name="desc"></field>
565+
<field type="BooleanField" name="used">True</field>
566+
<field type="IntegerField" name="order">0</field>
567+
</object>
568+
<object pk="django" model="name.dbtemplatetypename">
569+
<field type="CharField" name="name">Django</field>
570+
<field type="TextField" name="desc"></field>
571+
<field type="BooleanField" name="used">True</field>
572+
<field type="IntegerField" name="order">0</field>
573+
</object>
514574
<object pk="ietf" model="name.meetingtypename">
515575
<field type="CharField" name="name">IETF</field>
516576
<field type="TextField" name="desc"></field>

ietf/nomcom/models.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,11 @@ class Meta:
8686
verbose_name_plural = 'Nominee positions'
8787
unique_together = ('position', 'nominee')
8888

89+
def save(self, **kwargs):
90+
if not self.pk and not self.state_id:
91+
self.state = NomineePositionState.objects.get(slug='pending')
92+
super(NomineePosition, self).save(**kwargs)
93+
8994
def __unicode__(self):
9095
return u"%s - %s" % (self.nominee, self.position)
9196

ietf/nomcom/test_data.py

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
from django.contrib.auth.models import User
2+
3+
from ietf.group.models import Group
4+
from ietf.person.models import Email, Person
5+
from ietf.name.models import GroupStateName, GroupTypeName
6+
from ietf.nomcom.models import NomCom, Position, NomineePosition, Nominee
7+
8+
POSITIONS = {
9+
"GEN": "IETF Chair/Gen AD",
10+
"APP": "APP Area Director",
11+
"INT": "INT Area Director",
12+
"OAM": "OPS Area Director",
13+
"OPS": "OPS Area Director",
14+
"RAI": "RAI Area Director",
15+
"RTG": "RTG Area Director",
16+
"SEC": "SEC Area Director",
17+
"TSV": "TSV Area Director",
18+
"IAB": "IAB Member",
19+
"IAOC": "IAOC Member",
20+
}
21+
22+
23+
def nomcom_test_data():
24+
group, created = Group.objects.get_or_create(name='IAB/IESG Nominating Committee 2013/2014',
25+
state=GroupStateName.objects.get(='active'),
26+
type=GroupTypeName.objects.get(slug='nomcom'),
27+
acronym='nomcom2013')
28+
nomcom, created = NomCom.objects.get_or_create(group=group)
29+
u, created = User.objects.get_or_create(username="plain")
30+
plainman, created = Person.objects.get_or_create(
31+
name="Plain Man",
32+
ascii="Plain Man",
33+
user=u)
34+
email, cerated = Email.objects.get_or_create(
35+
address="plain@example.com",
36+
person=plainman)
37+
for name, description in POSITIONS.iteritems():
38+
position, created = Position.objects.get_or_create(nomcom=nomcom,
39+
name=name,
40+
description=description,
41+
is_open=True,
42+
incumbent=email)
43+
Position.objects.get(name='GEN')
44+
nominee, created = Nominee.objects.get_or_create(email=email)
45+
nominee_position, created = NomineePosition.objects.get_or_create(position=position, nominee=nominee)

ietf/nomcom/tests.py

Lines changed: 34 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,38 @@
1-
"""
2-
This file demonstrates writing tests using the unittest module. These will pass
3-
when you run "manage.py test".
1+
from django.test import TestCase
2+
from django.db import IntegrityError
43

5-
Replace this with more appropriate tests for your application.
6-
"""
4+
from ietf.nomcom.test_data import nomcom_test_data
5+
from ietf.nomcom.models import NomineePosition, Position, Nominee, NomineePositionState
76

8-
from django.test import TestCase
97

8+
class NomineePositionStateSaveTest(TestCase):
9+
"""Tests for the NomineePosition save override method"""
10+
fixtures = ['names', 'nomcom_templates']
11+
12+
def setUp(self):
13+
nomcom_test_data()
14+
self.nominee = Nominee.objects.get(email__address="plain@example.com")
15+
16+
def test_state_autoset(self):
17+
"""Verify state is autoset correctly"""
18+
position = Position.objects.get(name='APP')
19+
nominee_position = NomineePosition.objects.create(position=position,
20+
nominee=self.nominee)
21+
self.assertEqual(nominee_position.state.slug, 'pending')
22+
23+
def test_state_specified(self):
24+
"""Verify state if specified"""
25+
position = Position.objects.get(name='INT')
26+
nominee_position = NomineePosition.objects.create(position=position,
27+
nominee=self.nominee,
28+
state=NomineePositionState.objects.get(slug='accepted'))
29+
self.assertEqual(nominee_position.state.slug, 'accepted')
30+
31+
def test_nomine_position_unique(self):
32+
"""Verify nomine and position are unique together"""
33+
position = Position.objects.get(name='OAM')
34+
NomineePosition.objects.create(position=position,
35+
nominee=self.nominee)
36+
nominee_position = NomineePosition(position=position, nominee=self.nominee)
1037

11-
class SimpleTest(TestCase):
12-
def test_basic_addition(self):
13-
"""
14-
Tests that 1 + 1 always equals 2.
15-
"""
16-
self.assertEqual(1 + 1, 2)
38+
self.assertRaises(IntegrityError, nominee_position.save)

0 commit comments

Comments
 (0)