Refactored the handling of BallotDocEvent in tests, only creating them as needed, in preparation for stricter checks on state transitions to avoid mismatches between state and ballot.

- Legacy-Id: 14380
This commit is contained in:
Henrik Levkowetz 2017-11-30 16:02:31 +00:00
parent 0cb9155dd6
commit 98d234cd86
10 changed files with 46 additions and 35 deletions

View file

@ -23,6 +23,7 @@ import debug # pyflakes:ignore
from ietf.doc.models import ( Document, DocAlias, DocRelationshipName, RelatedDocument, State,
DocEvent, BallotPositionDocEvent, LastCallDocEvent, WriteupDocEvent, NewRevisionDocEvent )
from ietf.doc.factories import DocumentFactory, DocEventFactory
from ietf.doc.utils import create_ballot_if_not_open
from ietf.group.models import Group
from ietf.group.factories import GroupFactory
from ietf.meeting.models import Meeting, Session, SessionPresentation
@ -642,10 +643,13 @@ class DocTestCase(TestCase):
def test_document_ballot(self):
doc = make_test_data()
ballot = doc.active_ballot()
ad = Person.objects.get(user__username="ad")
ballot = create_ballot_if_not_open(None, doc, ad, 'approve')
assert ballot == doc.active_ballot()
# make sure we have some history
doc.save_with_history([DocEvent.objects.create(doc=doc, rev=doc.rev, type="changed_document", by=Person.objects.get(user__username="secretary"), desc="Test")])
doc.save_with_history([DocEvent.objects.create(doc=doc, rev=doc.rev, type="changed_document",
by=Person.objects.get(user__username="secretary"), desc="Test")])
pos = BallotPositionDocEvent.objects.create(
doc=doc,
@ -681,10 +685,11 @@ class DocTestCase(TestCase):
self.assertTrue( '(%s for -%s)' % (pos.comment_time.strftime('%Y-%m-%d'), oldrev) in unicontent(r))
def test_document_ballot_needed_positions(self):
make_test_data()
# draft
doc = Document.objects.get(name='draft-ietf-mars-test')
doc = make_test_data()
ad = Person.objects.get(user__username="ad")
create_ballot_if_not_open(None, doc, ad, 'approve')
r = self.client.get(urlreverse("ietf.doc.views_doc.document_ballot", kwargs=dict(name=doc.name)))
self.assertTrue('more YES or NO' in unicontent(r))
Document.objects.filter(pk=doc.pk).update(intended_std_level='inf')

View file

@ -6,9 +6,10 @@ import debug # pyflakes:ignore
from django.urls import reverse as urlreverse
from ietf.doc.models import ( Document, State, DocEvent, BallotDocEvent,
from ietf.doc.models import ( Document, State, DocEvent,
BallotPositionDocEvent, LastCallDocEvent, WriteupDocEvent, TelechatDocEvent )
from ietf.doc.factories import DocumentFactory
from ietf.doc.utils import create_ballot_if_not_open
from ietf.group.models import Group, Role
from ietf.name.models import BallotPositionName
from ietf.iesg.models import TelechatDate
@ -22,8 +23,10 @@ from ietf.utils.test_utils import login_testing_unauthorized
class EditPositionTests(TestCase):
def test_edit_position(self):
draft = make_test_data()
ad = Person.objects.get(user__username="ad")
ballot = create_ballot_if_not_open(None, draft, ad, 'approve')
url = urlreverse('ietf.doc.views_ballot.edit_position', kwargs=dict(name=draft.name,
ballot_id=draft.latest_event(BallotDocEvent, type="created_ballot").pk))
ballot_id=ballot.pk))
login_testing_unauthorized(self, "ad", url)
ad = Person.objects.get(name="Areað Irector")
@ -84,8 +87,9 @@ class EditPositionTests(TestCase):
def test_edit_position_as_secretary(self):
draft = make_test_data()
url = urlreverse('ietf.doc.views_ballot.edit_position', kwargs=dict(name=draft.name,
ballot_id=draft.latest_event(BallotDocEvent, type="created_ballot").pk))
ad = Person.objects.get(user__username="ad")
ballot = create_ballot_if_not_open(None, draft, ad, 'approve')
url = urlreverse('ietf.doc.views_ballot.edit_position', kwargs=dict(name=draft.name, ballot_id=ballot.pk))
ad = Person.objects.get(name="Areað Irector")
url += "?ad=%s" % ad.pk
login_testing_unauthorized(self, "secretary", url)
@ -109,8 +113,9 @@ class EditPositionTests(TestCase):
def test_cannot_edit_position_as_pre_ad(self):
draft = make_test_data()
url = urlreverse('ietf.doc.views_ballot.edit_position', kwargs=dict(name=draft.name,
ballot_id=draft.latest_event(BallotDocEvent, type="created_ballot").pk))
ad = Person.objects.get(user__username="ad")
ballot = create_ballot_if_not_open(None, draft, ad, 'approve')
url = urlreverse('ietf.doc.views_ballot.edit_position', kwargs=dict(name=draft.name, ballot_id=ballot.pk))
# transform to pre-ad
ad_role = Role.objects.filter(name="ad")[0]
@ -129,9 +134,8 @@ class EditPositionTests(TestCase):
draft.notify = "somebody@example.com"
draft.save_with_history([DocEvent.objects.create(doc=draft, rev=draft.rev, type="changed_document", by=Person.objects.get(user__username="secretary"), desc="Test")])
ad = Person.objects.get(name="Areað Irector")
ballot = draft.latest_event(BallotDocEvent, type="created_ballot")
ad = Person.objects.get(user__username="ad")
ballot = create_ballot_if_not_open(None, draft, ad, 'approve')
BallotPositionDocEvent.objects.create(
doc=draft, rev=draft.rev, type="changed_ballot_position",

View file

@ -268,7 +268,7 @@ class ConflictReviewTests(TestCase):
login_testing_unauthorized(self, "secretary", url)
# Some additional setup
create_ballot_if_not_open(doc,Person.objects.get(name="Sec Retary"),"conflrev")
create_ballot_if_not_open(None, doc, Person.objects.get(name="Sec Retary"), "conflrev")
doc.set_state(State.objects.get(used=True, slug=approve_type+'-pend',type='conflrev'))
# get

View file

@ -13,8 +13,8 @@ import debug # pyflakes:ignore
from ietf.doc.factories import DocumentFactory
from ietf.doc.models import ( Document, DocAlias, DocReminder, DocumentAuthor, DocEvent,
ConsensusDocEvent, LastCallDocEvent, RelatedDocument, State, TelechatDocEvent,
WriteupDocEvent, BallotDocEvent, DocRelationshipName)
from ietf.doc.utils import get_tags_for_stream_id
WriteupDocEvent, DocRelationshipName)
from ietf.doc.utils import get_tags_for_stream_id, create_ballot_if_not_open
from ietf.name.models import StreamName, IntendedStdLevelName, DocTagName
from ietf.group.factories import GroupFactory
from ietf.group.models import Group
@ -332,7 +332,8 @@ class EditInfoTests(TestCase):
# First, make it appear that the previous telechat has already passed
telechat_event.telechat_date = datetime.date.today()-datetime.timedelta(days=7)
telechat_event.save()
ballot = draft.latest_event(BallotDocEvent, type="created_ballot")
ad = Person.objects.get(user__username="ad")
ballot = create_ballot_if_not_open(None, draft, ad, 'approve')
ballot.time = telechat_event.telechat_date
ballot.save()

View file

@ -296,7 +296,7 @@ class StatusChangeTests(TestCase):
# Some additional setup
doc.relateddocument_set.create(target=DocAlias.objects.get(name='rfc9999'),relationship_id='tois')
doc.relateddocument_set.create(target=DocAlias.objects.get(name='rfc9998'),relationship_id='tohist')
create_ballot_if_not_open(doc,Person.objects.get(user__username="secretary"),"statchg")
create_ballot_if_not_open(None, doc, Person.objects.get(user__username="secretary"), "statchg")
doc.set_state(State.objects.get(slug='appr-pend',type='statchg'))
# get

View file

@ -10,8 +10,9 @@ from django.urls import reverse as urlreverse
import debug # pyflakes:ignore
from ietf.doc.models import DocEvent, BallotDocEvent, BallotPositionDocEvent, TelechatDocEvent
from ietf.doc.models import DocEvent, BallotPositionDocEvent, TelechatDocEvent
from ietf.doc.models import Document, DocAlias, State, RelatedDocument
from ietf.doc.utils import create_ballot_if_not_open
from ietf.group.models import Group, GroupMilestone, Role
from ietf.iesg.agenda import get_agenda_date, agenda_data
from ietf.iesg.models import TelechatDate
@ -25,8 +26,10 @@ class IESGTests(TestCase):
draft = make_test_data()
draft.set_state(State.objects.get(type="draft-iesg", slug="iesg-eva"))
ad = Person.objects.get(user__username="ad")
ballot = create_ballot_if_not_open(None, draft, ad, 'approve')
pos = BallotPositionDocEvent()
pos.ballot = draft.latest_event(BallotDocEvent, type="created_ballot")
pos.ballot = ballot
pos.pos_id = "discuss"
pos.type = "changed_ballot_position"
pos.doc = draft

View file

@ -416,11 +416,13 @@ class MeetingTests(TestCase):
def test_important_dates(self):
meeting=MeetingFactory(type_id='ietf')
meeting.show_important_dates = True
meeting.save()
populate_important_dates(meeting)
url = urlreverse('ietf.meeting.views.important_dates',kwargs={'num':meeting.number})
r = self.client.get(url)
self.assertEqual(r.status_code, 200)
self.assertTrue(str(meeting.importantdate_set.first().date) in unicontent(r))
self.assertIn(str(meeting.importantdate_set.first().date), unicontent(r))
class EditTests(TestCase):
def setUp(self):

View file

@ -4,7 +4,7 @@ from pyquery import PyQuery
from django.urls import reverse
from ietf.doc.models import Document, State, BallotDocEvent, BallotType
from ietf.doc.utils import update_telechat
from ietf.doc.utils import update_telechat, create_ballot_if_not_open
from ietf.utils.test_utils import TestCase
from ietf.iesg.models import TelechatDate
from ietf.person.models import Person
@ -37,6 +37,8 @@ class SecrTelechatTestCase(TestCase):
def test_doc_detail_draft(self):
draft = make_test_data()
ad = Person.objects.get(user__username="ad")
create_ballot_if_not_open(None, draft, ad, 'approve')
d = get_next_telechat_date()
date = d.strftime('%Y-%m-%d')
by=Person.objects.get(name="(System)")

View file

@ -19,7 +19,8 @@ from django.urls import reverse as urlreverse
import debug # pyflakes:ignore
from ietf.submit.utils import expirable_submissions, expire_submission, ensure_person_email_info_exists
from ietf.doc.models import Document, DocAlias, DocEvent, State, BallotDocEvent, BallotPositionDocEvent, DocumentAuthor
from ietf.doc.models import Document, DocAlias, DocEvent, State, BallotPositionDocEvent, DocumentAuthor
from ietf.doc.utils import create_ballot_if_not_open
from ietf.group.models import Group
from ietf.group.utils import setup_default_community_list_for_group
from ietf.meeting.models import Meeting
@ -336,8 +337,10 @@ class SubmitTests(TestCase):
e.save()
# make a discuss to see if the AD gets an email
ad = Person.objects.get(user__username="ad")
ballot = create_ballot_if_not_open(None, draft, ad, 'approve')
ballot_position = BallotPositionDocEvent()
ballot_position.ballot = draft.latest_event(BallotDocEvent, type="created_ballot")
ballot_position.ballot = ballot
ballot_position.pos_id = "discuss"
ballot_position.type = "changed_ballot_position"
ballot_position.doc = draft

View file

@ -11,7 +11,7 @@ from django.utils.encoding import smart_text
import debug # pyflakes:ignore
from ietf.doc.models import Document, DocAlias, State, DocumentAuthor, BallotType, DocEvent, BallotDocEvent, RelatedDocument, NewRevisionDocEvent
from ietf.doc.models import Document, DocAlias, State, DocumentAuthor, DocEvent, RelatedDocument, NewRevisionDocEvent
from ietf.group.models import Group, GroupHistory, Role, RoleHistory
from ietf.iesg.models import TelechatDate
from ietf.ipr.models import HolderIprDisclosure, IprDocRel, IprDisclosureStateName, IprLicenseTypeName
@ -325,15 +325,6 @@ def make_test_data():
rev="01",
)
BallotDocEvent.objects.create(
type="created_ballot",
ballot_type=BallotType.objects.get(doc_type="draft", slug="approve"),
by=ad,
doc=draft,
rev=draft.rev,
desc="Created ballot",
)
# IPR
ipr = HolderIprDisclosure.objects.create(
by=Person.objects.get(name="(System)"),