@@ -153,7 +153,74 @@ def find_event(t):
153153 r = self .client .post (url , dict (charter_state = str (State .objects .get (used = True ,type = "charter" ,slug = "intrev" ).pk ), message = "test" ))
154154 self .assertEqual (r .status_code , 302 )
155155 self .assertTrue ("A new charter" in outbox [- 3 ].get_payload ())
156-
156+
157+ def test_already_open_charter_ballot (self ):
158+ # make sure the right thing happens to the charter ballots as the Secretariat
159+ # does the unusual state sequence of: intrev --> extrev --> intrev
160+ make_test_data ()
161+
162+ group = Group .objects .get (acronym = "ames" )
163+ charter = group .charter
164+
165+ url = urlreverse ('ietf.doc.views_charter.change_state' , kwargs = dict (name = charter .name ))
166+ login_testing_unauthorized (self , "secretary" , url )
167+ by = Person .objects .get (user__username = "secretary" )
168+
169+ # get the charter state change page
170+ r = self .client .get (url )
171+ self .assertEqual (r .status_code , 200 )
172+
173+ # put the charter in "intrev" state
174+ s = State .objects .get (used = True , type = "charter" , slug = "intrev" )
175+ r = self .client .post (url , dict (charter_state = str (s .pk ), message = "test message" ))
176+ self .assertEqual (r .status_code , 302 )
177+ self .assertEqual (charter .get_state_slug (), "intrev" )
178+ self .assertTrue (charter .ballot_open ("r-extrev" ))
179+
180+ events_before = charter .docevent_set .count ()
181+
182+ # get the charter state change page again
183+ r = self .client .get (url )
184+ self .assertEqual (r .status_code , 200 )
185+
186+ # put the charter in "extrev" state without closing the previous ballot
187+ s = State .objects .get (used = True , type = "charter" , slug = "extrev" )
188+ r = self .client .post (url , dict (charter_state = str (s .pk ), message = "test message" ))
189+ self .assertEqual (r .status_code , 302 )
190+ charter = Document .objects .get (name = "charter-ietf-%s" % group .acronym )
191+ self .assertEqual (charter .get_state_slug (), "extrev" )
192+ self .assertTrue (charter .ballot_open ("approve" ))
193+
194+ # make sure there is a closed_ballot event and a create_ballot event
195+ events_now = charter .docevent_set .count ()
196+ self .assertTrue (events_now > events_before )
197+
198+ def find_event (t ):
199+ return [e for e in charter .docevent_set .all ()[:events_now - events_before ] if e .type == t ]
200+
201+ self .assertTrue (find_event ("closed_ballot" ))
202+ self .assertTrue (find_event ("created_ballot" ))
203+
204+ events_before = events_now
205+
206+ # get the charter state change page for a third time
207+ r = self .client .get (url )
208+ self .assertEqual (r .status_code , 200 )
209+
210+ # put the charter back in "intrev" state without closing the previous ballot
211+ s = State .objects .get (used = True , type = "charter" , slug = "intrev" )
212+ r = self .client .post (url , dict (charter_state = str (s .pk ), message = "test message" ))
213+ self .assertEqual (r .status_code , 302 )
214+ charter = Document .objects .get (name = "charter-ietf-%s" % group .acronym )
215+ self .assertEqual (charter .get_state_slug (), "intrev" )
216+ self .assertTrue (charter .ballot_open ("r-extrev" ))
217+
218+ # make sure there is a closed_ballot event and a create_ballot event
219+ events_now = charter .docevent_set .count ()
220+ self .assertTrue (events_now > events_before )
221+ self .assertTrue (find_event ("closed_ballot" ))
222+ self .assertTrue (find_event ("created_ballot" ))
223+
157224 def test_edit_telechat_date (self ):
158225 make_test_data ()
159226
0 commit comments