Skip to content

Commit 859f2ea

Browse files
committed
checkpoint: purged the rest of the day/seq URLs. Streamlined workflows to focus on "current" versions as a default. Plumbed editing and deleting sessionpresentations from a document perspective. Started adding meat to document factories.
- Legacy-Id: 10847
1 parent d709af6 commit 859f2ea

13 files changed

Lines changed: 276 additions & 303 deletions

ietf/doc/factories.py

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import factory
22

3-
from ietf.doc.models import Document
3+
from ietf.doc.models import Document, DocEvent, NewRevisionDocEvent
4+
from ietf.person.factories import PersonFactory
45

56
class DocumentFactory(factory.DjangoModelFactory):
67
class Meta:
@@ -20,3 +21,25 @@ def name(self, n):
2021
'musings',
2122
n,
2223
)
24+
25+
newrevisiondocevent = factory.RelatedFactory('ietf.doc.factories.NewRevisionDocEventFactory','doc')
26+
27+
class DocEventFactory(factory.DjangoModelFactory):
28+
class Meta:
29+
model = DocEvent
30+
31+
type = 'added_comment'
32+
by = factory.SubFactory(PersonFactory)
33+
doc = factory.SubFactory(DocumentFactory)
34+
desc = factory.Faker('sentence',nb_words=6)
35+
36+
class NewRevisionDocEventFactory(DocEventFactory):
37+
class Meta:
38+
model = NewRevisionDocEvent
39+
40+
type = 'new_revision'
41+
rev = '00'
42+
43+
@factory.lazy_attribute
44+
def desc(self):
45+
return 'New version available %s-%s'%(self.doc.name,self.rev)

ietf/doc/tests.py

Lines changed: 120 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -913,25 +913,32 @@ class DocumentMeetingTests(TestCase):
913913

914914
def setUp(self):
915915
self.group = GroupFactory(type_id='wg',state_id='active')
916+
self.group_chair = PersonFactory()
917+
self.group.role_set.create(name_id='chair',person=self.group_chair,email=self.group_chair.email())
918+
919+
self.other_group = GroupFactory(type_id='wg',state_id='active')
920+
self.other_chair = PersonFactory()
921+
self.other_group.role_set.create(name_id='chair',person=self.other_chair,email=self.other_chair.email())
916922

917923
today = datetime.date.today()
918924
cut_days = settings.MEETING_MATERIALS_SUBMISSION_CORRECTION_DAYS
919925
self.past_cutoff = SessionFactory.create(meeting__type_id='ietf',group=self.group,meeting__date=today-datetime.timedelta(days=1+cut_days))
920926
self.past = SessionFactory.create(meeting__type_id='ietf',group=self.group,meeting__date=today-datetime.timedelta(days=cut_days/2))
921927
self.inprog = SessionFactory.create(meeting__type_id='ietf',group=self.group,meeting__date=today-datetime.timedelta(days=1))
922-
SessionFactory.create(meeting__type_id='ietf',group=self.group,meeting__date=today+datetime.timedelta(days=90))
923-
SessionFactory.create(meeting__type_id='interim',group=self.group,meeting__date=today+datetime.timedelta(days=45))
928+
self.future = SessionFactory.create(meeting__type_id='ietf',group=self.group,meeting__date=today+datetime.timedelta(days=90))
929+
self.interim = SessionFactory.create(meeting__type_id='interim',group=self.group,meeting__date=today+datetime.timedelta(days=45))
924930

925931
def test_view_document_meetings(self):
926932
doc = DocumentFactory.create()
927933
doc.sessionpresentation_set.create(session=self.inprog,rev=None)
934+
doc.sessionpresentation_set.create(session=self.interim,rev=None)
928935

929936
url = urlreverse('ietf.doc.views_material.all_presentations', kwargs=dict(name=doc.name))
930937
response = self.client.get(url)
931938
self.assertEqual(response.status_code, 200)
932939
q = PyQuery(response.content)
933-
self.assertTrue(q('#inprogressmeets'))
934-
self.assertFalse(any([q(id) for id in ['#pastmeets','#futuremeets']]))
940+
self.assertTrue(all([q(id) for id in ['#inprogressmeets','#futuremeets']]))
941+
self.assertFalse(any([q(id) for id in ['#pastmeets',]]))
935942
self.assertFalse(q('#addsessionsbutton'))
936943
self.assertFalse(q("a.btn:contains('Remove document')"))
937944

@@ -944,29 +951,130 @@ def test_view_document_meetings(self):
944951
q = PyQuery(response.content)
945952
self.assertTrue(q('#addsessionsbutton'))
946953
self.assertEqual(1,len(q("#inprogressmeets a.btn-default:contains('Remove document')")))
954+
self.assertEqual(1,len(q("#futuremeets a.btn-default:contains('Remove document')")))
947955
self.assertEqual(1,len(q("#pastmeets a.btn-default:contains('Remove document')")))
948956
self.assertEqual(1,len(q("#pastmeets a.btn-warning:contains('Remove document')")))
949957

950-
group_chair = PersonFactory()
951-
self.group.role_set.create(name_id='chair',person=group_chair,email=group_chair.email())
952-
self.client.login(username=group_chair.user.username,password='%s+password'%group_chair.user.username)
958+
self.client.login(username=self.group_chair.user.username,password='%s+password'%self.group_chair.user.username)
953959
response = self.client.get(url)
954960
self.assertEqual(response.status_code, 200)
955961
q = PyQuery(response.content)
956962
self.assertTrue(q('#addsessionsbutton'))
957963
self.assertEqual(1,len(q("#inprogressmeets a.btn-default:contains('Remove document')")))
964+
self.assertEqual(1,len(q("#futuremeets a.btn-default:contains('Remove document')")))
958965
self.assertEqual(1,len(q("#pastmeets a.btn-default:contains('Remove document')")))
959966
self.assertTrue(q('#pastmeets'))
960967
self.assertFalse(q("#pastmeets a.btn-warning:contains('Remove document')"))
961968

962-
other_group = GroupFactory(type_id='wg',state_id='active')
963-
other_chair = PersonFactory()
964-
other_group.role_set.create(name_id='chair',person=other_chair,email=group_chair.email())
965-
self.client.login(username=other_chair.user.username,password='%s+password'%other_chair.user.username)
969+
self.client.login(username=self.other_chair.user.username,password='%s+password'%self.other_chair.user.username)
966970
response = self.client.get(url)
967971
self.assertEqual(response.status_code, 200)
968972
q = PyQuery(response.content)
969973
self.assertTrue(q('#addsessionsbutton'))
970-
self.assertTrue(all([q(id) for id in ['#pastmeets','#inprogressmeets']]))
974+
self.assertTrue(all([q(id) for id in ['#futuremeets','#pastmeets','#inprogressmeets']]))
971975
self.assertFalse(q("#inprogressmeets a.btn:contains('Remove document')"))
976+
self.assertFalse(q("#futuremeets a.btn:contains('Remove document')"))
972977
self.assertFalse(q("#pastmeets a.btn:contains('Remove document')"))
978+
979+
def test_edit_document_session(self):
980+
doc = DocumentFactory.create()
981+
sp = doc.sessionpresentation_set.create(session=self.future,rev=None)
982+
983+
url = urlreverse('ietf.doc.views_doc.edit_sessionpresentation',kwargs=dict(name='no-such-doc',session_id=sp.session_id))
984+
response = self.client.get(url)
985+
self.assertEqual(response.status_code, 404)
986+
987+
url = urlreverse('ietf.doc.views_doc.edit_sessionpresentation',kwargs=dict(name=doc.name,session_id=0))
988+
response = self.client.get(url)
989+
self.assertEqual(response.status_code, 404)
990+
991+
url = urlreverse('ietf.doc.views_doc.edit_sessionpresentation',kwargs=dict(name=doc.name,session_id=sp.session_id))
992+
response = self.client.get(url)
993+
self.assertEqual(response.status_code, 404)
994+
995+
self.client.login(username=self.other_chair.user.username,password='%s+password'%self.other_chair.user.username)
996+
response = self.client.get(url)
997+
self.assertEqual(response.status_code, 404)
998+
999+
self.client.login(username=self.group_chair.user.username,password='%s+password'%self.group_chair.user.username)
1000+
response = self.client.get(url)
1001+
self.assertEqual(response.status_code, 200)
1002+
q = PyQuery(response.content)
1003+
self.assertEqual(2,len(q('select#id_version option')))
1004+
1005+
# Simulate the cancel button
1006+
response = self.client.post(url,{})
1007+
self.assertEqual(response.status_code, 302)
1008+
self.assertEqual(doc.sessionpresentation_set.get(pk=sp.pk).rev,None)
1009+
1010+
self.assertEqual(1,doc.docevent_set.count())
1011+
response = self.client.post(url,{'version':'00','save':''})
1012+
response = self.client.post(url,{})
1013+
self.assertEqual(response.status_code, 302)
1014+
self.assertEqual(doc.sessionpresentation_set.get(pk=sp.pk).rev,'00')
1015+
self.assertEqual(2,doc.docevent_set.count())
1016+
1017+
def test_edit_document_session_after_proceedings_closed(self):
1018+
doc = DocumentFactory.create()
1019+
sp = doc.sessionpresentation_set.create(session=self.past_cutoff,rev=None)
1020+
1021+
url = urlreverse('ietf.doc.views_doc.edit_sessionpresentation',kwargs=dict(name=doc.name,session_id=sp.session_id))
1022+
self.client.login(username=self.group_chair.user.username,password='%s+password'%self.group_chair.user.username)
1023+
response = self.client.get(url)
1024+
self.assertEqual(response.status_code, 404)
1025+
1026+
self.client.login(username='secretary',password='secretary+password')
1027+
response = self.client.get(url)
1028+
self.assertEqual(response.status_code, 200)
1029+
q=PyQuery(response.content)
1030+
self.assertEqual(1,len(q(".alert-warning:contains('may affect published proceedings')")))
1031+
1032+
def test_remove_document_self(self):
1033+
doc = DocumentFactory.create()
1034+
sp = doc.sessionpresentation_set.create(session=self.future,rev=None)
1035+
1036+
url = urlreverse('ietf.doc.views_doc.remove_sessionpresentation',kwargs=dict(name='no-such-doc',session_id=sp.session_id))
1037+
response = self.client.get(url)
1038+
self.assertEqual(response.status_code, 404)
1039+
1040+
url = urlreverse('ietf.doc.views_doc.remove_sessionpresentation',kwargs=dict(name=doc.name,session_id=0))
1041+
response = self.client.get(url)
1042+
self.assertEqual(response.status_code, 404)
1043+
1044+
url = urlreverse('ietf.doc.views_doc.remove_sessionpresentation',kwargs=dict(name=doc.name,session_id=sp.session_id))
1045+
response = self.client.get(url)
1046+
self.assertEqual(response.status_code, 404)
1047+
1048+
self.client.login(username=self.other_chair.user.username,password='%s+password'%self.other_chair.user.username)
1049+
response = self.client.get(url)
1050+
self.assertEqual(response.status_code, 404)
1051+
1052+
self.client.login(username=self.group_chair.user.username,password='%s+password'%self.group_chair.user.username)
1053+
response = self.client.get(url)
1054+
self.assertEqual(response.status_code, 200)
1055+
1056+
# Simulate the cancel button
1057+
response = self.client.post(url,{})
1058+
self.assertEqual(response.status_code, 302)
1059+
self.assertTrue(doc.sessionpresentation_set.filter(pk=sp.pk).exists())
1060+
1061+
self.assertEqual(1,doc.docevent_set.count())
1062+
response = self.client.post(url,{'remove_session':''})
1063+
self.assertEqual(response.status_code, 302)
1064+
self.assertFalse(doc.sessionpresentation_set.filter(pk=sp.pk).exists())
1065+
self.assertEqual(2,doc.docevent_set.count())
1066+
1067+
def test_remove_document_session_after_proceedings_closed(self):
1068+
doc = DocumentFactory.create()
1069+
sp = doc.sessionpresentation_set.create(session=self.past_cutoff,rev=None)
1070+
1071+
url = urlreverse('ietf.doc.views_doc.remove_sessionpresentation',kwargs=dict(name=doc.name,session_id=sp.session_id))
1072+
self.client.login(username=self.group_chair.user.username,password='%s+password'%self.group_chair.user.username)
1073+
response = self.client.get(url)
1074+
self.assertEqual(response.status_code, 404)
1075+
1076+
self.client.login(username='secretary',password='secretary+password')
1077+
response = self.client.get(url)
1078+
self.assertEqual(response.status_code, 200)
1079+
q=PyQuery(response.content)
1080+
self.assertEqual(1,len(q(".alert-warning:contains('may affect published proceedings')")))

ietf/doc/tests_material.py

Lines changed: 1 addition & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,14 @@
1010
from django.core.urlresolvers import reverse as urlreverse
1111

1212
from ietf.doc.models import Document, State, DocAlias, NewRevisionDocEvent
13-
from ietf.doc.views_material import material_presentations, edit_material_presentations
13+
#from ietf.doc.views_material import material_presentations, edit_material_presentations
1414
from ietf.group.models import Group
1515
from ietf.meeting.models import Meeting, Session, SessionPresentation
1616
from ietf.name.models import SessionStatusName
1717
from ietf.person.models import Person
1818
from ietf.utils.test_utils import TestCase, login_testing_unauthorized, unicontent
1919
from ietf.utils.test_data import make_test_data
2020

21-
from ietf.meeting.test_data import make_meeting_test_data
22-
2321
class GroupMaterialTests(TestCase):
2422
def setUp(self):
2523
self.materials_dir = os.path.abspath("tmp-document-dir")
@@ -173,67 +171,3 @@ def test_revise(self):
173171
with open(os.path.join(doc.get_file_path(), doc.name + "-" + doc.rev + ".txt")) as f:
174172
self.assertEqual(f.read(), content)
175173

176-
def test_material_presentations(self):
177-
doc = self.create_slides()
178-
meeting = make_meeting_test_data()
179-
meeting.session_set.filter(group__acronym='mars').update(group=doc.group)
180-
181-
url = urlreverse(material_presentations,kwargs=dict(name=doc.name))
182-
login_testing_unauthorized(self, "secretary", url)
183-
184-
r = self.client.get(url)
185-
self.assertEqual(r.status_code, 200)
186-
187-
url = urlreverse(material_presentations,kwargs=dict(name=doc.name,seq=1))
188-
r = self.client.get(url)
189-
self.assertEqual(r.status_code, 200)
190-
191-
when = meeting.agenda.assignments.filter(session__group__acronym='testteam').first().timeslot.time
192-
mdw = when.date().isoformat()
193-
dow = ['mon','tue','wed','thu','fri','sat','sun'][when.weekday()]
194-
195-
for kw in [ dict(),
196-
dict(seq=1),
197-
dict(week_day=dow),
198-
dict(week_day=dow,seq=1),
199-
dict(date=mdw),
200-
dict(date=mdw,seq=1),
201-
dict(date=mdw+'-0930'),
202-
dict(date=mdw+'-0930',seq=1),
203-
]:
204-
kw['name'] = doc.name
205-
kw['acronym'] = 'testteam'
206-
url = urlreverse(material_presentations,kwargs=kw)
207-
r = self.client.get(url)
208-
self.assertEqual(r.status_code, 200)
209-
210-
def test_edit_material_presentations(self):
211-
doc = self.create_slides()
212-
meeting = make_meeting_test_data()
213-
meeting.session_set.filter(group__acronym='mars').update(group=doc.group)
214-
215-
session = meeting.agenda.assignments.filter(session__group__acronym='testteam').first().session
216-
217-
url = urlreverse(edit_material_presentations,kwargs=dict(name=doc.name,acronym='testteam',seq=1))
218-
login_testing_unauthorized(self, "secretary", url)
219-
r = self.client.get(url)
220-
self.assertEqual(r.status_code, 200)
221-
222-
self.assertEqual(doc.sessionpresentation_set.count(),0)
223-
224-
# add the materials to a session
225-
r = self.client.post(url, dict(action="Save",version="00"))
226-
self.assertEqual(r.status_code, 302)
227-
self.assertEqual(doc.sessionpresentation_set.first().session , session)
228-
229-
# change the version
230-
r = self.client.post(url, dict(action="Save",version="01"))
231-
self.assertEqual(r.status_code, 302)
232-
self.assertEqual(doc.sessionpresentation_set.first().session , session)
233-
234-
# take the slides back off that meeting
235-
r = self.client.post(url, dict(action="Save",version="notpresented"))
236-
self.assertEqual(r.status_code, 302)
237-
self.assertEqual(doc.sessionpresentation_set.count(),0)
238-
239-

ietf/doc/urls.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,11 @@
3737
from ietf.doc import views_status_change
3838
from ietf.doc import views_doc
3939

40+
session_patterns = [
41+
url(r'^(?P<session_id>\d+)/edit$', views_doc.edit_sessionpresentation),
42+
url(r'^(?P<session_id>\d+)/remove$', views_doc.remove_sessionpresentation),
43+
]
44+
4045
urlpatterns = patterns('',
4146
(r'^/?$', views_search.search),
4247
url(r'^(?P<name>[A-Za-z0-9\._\+\-]+)$', views_search.search_for_name, name="doc_search_for_name"),
@@ -113,4 +118,5 @@
113118
(r'^(?P<name>[A-Za-z0-9._+-]+)/conflict-review/', include('ietf.doc.urls_conflict_review')),
114119
(r'^(?P<name>[A-Za-z0-9._+-]+)/status-change/', include('ietf.doc.urls_status_change')),
115120
(r'^(?P<name>[A-Za-z0-9._+-]+)/material/', include('ietf.doc.urls_material')),
121+
url(r'^(?P<name>[A-Za-z0-9._+-]+)/session/', include(session_patterns)),
116122
)

ietf/doc/urls_material.py

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,5 @@
33
urlpatterns = patterns('ietf.doc.views_material',
44
url(r'^(?P<action>state|title|abstract|revise)/$', "edit_material", name="material_edit"),
55
url(r'^meetings/$', "all_presentations", name="all_presentations"),
6-
url(r'^sessions/$', "material_presentations", name="material_presentations"),
7-
(r'^sessions/(?P<seq>\d+)/edit/$', "edit_material_presentations"),
8-
(r'^sessions/(?P<acronym>[A-Za-z0-9_\-\+]+)/edit/$', "edit_material_presentations"),
9-
(r'^sessions/(?P<acronym>[A-Za-z0-9_\-\+]+)/(?P<seq>\d+)/edit/$', "edit_material_presentations"),
10-
(r'^sessions/(?P<acronym>[A-Za-z0-9_\-\+]+)/(?P<week_day>[a-zA-Z]+)/edit/$', "edit_material_presentations"),
11-
(r'^sessions/(?P<acronym>[A-Za-z0-9_\-\+]+)/(?P<week_day>[a-zA-Z]+)/(?P<seq>\d+)/edit/$', "edit_material_presentations"),
12-
(r'^sessions/(?P<acronym>[A-Za-z0-9_\-\+]+)/(?P<date>\d{4}-\d{2}-\d{2}(-\d{4})?)/edit/$', "edit_material_presentations"),
13-
(r'^sessions/(?P<acronym>[A-Za-z0-9_\-\+]+)/(?P<date>\d{4}-\d{2}-\d{2}(-\d{4})?)/(?P<seq>\d+)/edit/$', "edit_material_presentations"),
14-
(r'^sessions/(?P<seq>\d+)/$', "material_presentations"),
15-
(r'^sessions/(?P<acronym>[A-Za-z0-9_\-\+]+)/$', "material_presentations"),
16-
(r'^sessions/(?P<acronym>[A-Za-z0-9_\-\+]+)/(?P<seq>\d+)/$', "material_presentations"),
17-
(r'^sessions/(?P<acronym>[A-Za-z0-9_\-\+]+)/(?P<week_day>[a-zA-Z]+)/$', "material_presentations"),
18-
(r'^sessions/(?P<acronym>[A-Za-z0-9_\-\+]+)/(?P<week_day>[a-zA-Z]+)/(?P<seq>\d+)/$', "material_presentations"),
19-
(r'^sessions/(?P<acronym>[A-Za-z0-9_\-\+]+)/(?P<date>\d{4}-\d{2}-\d{2}(-\d{4})?)/$', "material_presentations"),
20-
(r'^sessions/(?P<acronym>[A-Za-z0-9_\-\+]+)/(?P<date>\d{4}-\d{2}-\d{2}(-\d{4})?)/(?P<seq>\d+)/$', "material_presentations"),
216
)
227

0 commit comments

Comments
 (0)