Skip to content

Commit 2cf0c74

Browse files
committed
Merged in [9351] from rjsparks@nostrum.com:
Remove sessonly, replacing the idea with a separate State. Add tests checking how materials show on agenda views. - Legacy-Id: 9430 Note: SVN reference [9351] has been migrated to Git commit a6c64d2
2 parents b829b17 + a6c64d2 commit 2cf0c74

10 files changed

Lines changed: 2908 additions & 2721 deletions

File tree

ietf/doc/models.py

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -233,14 +233,13 @@ def active_ballot(self):
233233
return None
234234

235235
def meeting_related(self):
236-
if self.type_id in ("agenda","minutes","bluesheets"):
237-
return (self.name.split("-")[1] == "interim"
238-
or (self.session_set.exists() if isinstance(self, Document) else self.doc.session_set.exists()))
239-
elif self.type_id in ("slides",):
240-
return (self.name.split("-")[1] == "interim"
241-
or (self.get_state('slides') and self.get_state('slides').slug in ("active", "sessonly","archived") ))
242-
else:
243-
return False
236+
answer = False
237+
if self.type_id in ("agenda","minutes","bluesheets","slides"):
238+
answer = (self.name.split("-")[1] == "interim"
239+
or (self if isinstance(self, Document) else self.doc).session_set.exists())
240+
if self.type_id in ("slides",):
241+
answer = answer and self.get_state_slug('reuse_policy')=='single'
242+
return answer
244243

245244
def relations_that(self, relationship):
246245
"""Return the related-document objects that describe a given relationship targeting self."""

ietf/doc/tests_material.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ def create_slides(self):
4343

4444
doc = Document.objects.create(name="slides-testteam-test-file", rev="01", type_id="slides", group=group)
4545
doc.set_state(State.objects.get(type="slides", slug="active"))
46+
doc.set_state(State.objects.get(type="reuse_policy", slug="multiple"))
4647
DocAlias.objects.create(name=doc.name, document=doc)
4748
NewRevisionDocEvent.objects.create(doc=doc,by=Person.objects.get(name="(System)"),rev='00',type='new_revision',desc='New revision available')
4849
NewRevisionDocEvent.objects.create(doc=doc,by=Person.objects.get(name="(System)"),rev='01',type='new_revision',desc='New revision available')
@@ -168,7 +169,7 @@ def test_revise(self):
168169
self.assertEqual(doc.title, "New title")
169170
self.assertEqual(doc.get_state_slug(), "active")
170171

171-
with open(os.path.join(self.agenda_dir, "42", "slides", doc.name + "-" + doc.rev + ".txt")) as f:
172+
with open(os.path.join(doc.get_file_path(), doc.name + "-" + doc.rev + ".txt")) as f:
172173
self.assertEqual(f.read(), content)
173174

174175
def test_material_presentations(self):

ietf/doc/views_doc.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -500,7 +500,7 @@ def document_main(request, name, rev=None):
500500
if doc.type_id in ("slides", "agenda", "minutes"):
501501
can_manage_material = can_manage_materials(request.user, doc.group)
502502
presentations = None
503-
if doc.type_id=='slides' and doc.get_state_slug('slides') in ['sessonly','active']:
503+
if doc.type_id=='slides' and doc.get_state_slug('slides')=='active' :
504504
presentations = doc.future_presentations()
505505
if doc.meeting_related():
506506
# disallow editing meeting-related stuff through this

ietf/meeting/models.py

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -864,24 +864,16 @@ class Session(models.Model):
864864

865865
unique_constraints_dict = None
866866

867+
# Should work on how materials are captured so that deleted things are no longer associated with the session
868+
# (We can keep the information about something being added to and removed from a session in the document's history)
867869
def agenda(self):
868-
items = self.materials.filter(type="agenda",states__type="agenda",states__slug="active")
869-
if items and items[0] is not None:
870-
return items[0]
871-
else:
872-
return None
870+
return self.materials.filter(type='agenda').exclude(states__type='agenda',states__slug='deleted').first()
873871

874872
def minutes(self):
875-
try:
876-
return self.materials.get(type="minutes",states__type="minutes",states__slug="active")
877-
except Exception:
878-
return None
873+
return self.materials.filter(type='minutes').exclude(states__type='minutes',states__slug='deleted').first()
879874

880875
def slides(self):
881-
try:
882-
return self.materials.filter(type="slides",states__type="slides",states__slug="active").order_by("order")
883-
except Exception:
884-
return []
876+
return list(self.materials.filter(type='slides').exclude(states__type='slides',states__slug='deleted').order_by('order'))
885877

886878
def __unicode__(self):
887879
if self.meeting.type_id == "interim":

ietf/meeting/test_data.py

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,10 @@ def make_meeting_test_data():
2323
room.resources = [projector]
2424

2525
# mars WG
26+
mars = Group.objects.get(acronym='mars')
2627
slot = TimeSlot.objects.create(meeting=meeting, type_id="session", duration=30 * 60, location=room,
2728
time=datetime.datetime.combine(datetime.date.today(), datetime.time(9, 30)))
28-
mars_session = Session.objects.create(meeting=meeting, group=Group.objects.get(acronym="mars"),
29+
mars_session = Session.objects.create(meeting=meeting, group=mars,
2930
attendees=10, requested_by=system_person,
3031
requested_duration=20, status_id="schedw",
3132
scheduled=datetime.datetime.now())
@@ -44,16 +45,22 @@ def make_meeting_test_data():
4445
meeting.agenda = schedule
4546
meeting.save()
4647

47-
doc = Document.objects.create(name='agenda-mars-ietf-42', type_id='agenda', title="Agenda", external_url="agenda-mars")
48+
doc = Document.objects.create(name='agenda-mars-ietf-42', type_id='agenda', title="Agenda", external_url="agenda-mars.txt",group=mars)
4849
doc.set_state(State.objects.get(type=doc.type_id, slug="active"))
4950
mars_session.sessionpresentation_set.add(SessionPresentation(session=mars_session,document=doc,rev=doc.rev))
5051

51-
doc = Document.objects.create(name='minutes-mars-ietf-42', type_id='minutes', title="Minutes", external_url="minutes-mars")
52+
doc = Document.objects.create(name='minutes-mars-ietf-42', type_id='minutes', title="Minutes", external_url="minutes-mars.txt",group=mars)
5253
doc.set_state(State.objects.get(type=doc.type_id, slug="active"))
5354
mars_session.sessionpresentation_set.add(SessionPresentation(session=mars_session,document=doc,rev=doc.rev))
5455

55-
doc = Document.objects.create(name='slides-mars-ietf-42', type_id='slides', title="Slideshow", external_url="slides-mars")
56+
doc = Document.objects.create(name='slides-mars-ietf-42', type_id='slides', title="Slideshow", external_url="slides-mars.txt",group=mars)
5657
doc.set_state(State.objects.get(type=doc.type_id, slug="active"))
58+
doc.set_state(State.objects.get(type='reuse_policy',slug='single'))
59+
mars_session.sessionpresentation_set.add(SessionPresentation(session=mars_session,document=doc,rev=doc.rev))
60+
61+
doc = Document.objects.create(name='slides-mars-ietf-42-deleted', type_id='slides', title="Bad Slideshow", external_url="slides-mars-deleted.txt",group=mars)
62+
doc.set_state(State.objects.get(type=doc.type_id, slug="deleted"))
63+
doc.set_state(State.objects.get(type='reuse_policy',slug='single'))
5764
mars_session.sessionpresentation_set.add(SessionPresentation(session=mars_session,document=doc,rev=doc.rev))
5865

5966
return meeting

ietf/meeting/tests_views.py

Lines changed: 34 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,27 @@ def write_materials_file(self, meeting, doc, content):
3333
with open(path, "w") as f:
3434
f.write(content)
3535

36+
def write_materials_files(self, meeting, session):
37+
38+
draft = Document.objects.filter(type="draft", group=session.group).first()
39+
40+
self.write_materials_file(meeting, session.materials.get(type="agenda"),
41+
"1. WG status (15 minutes)\n\n2. Status of %s\n\n" % draft.name)
42+
43+
self.write_materials_file(meeting, session.materials.get(type="minutes"),
44+
"1. More work items underway\n\n2. The draft will be finished before next meeting\n\n")
45+
46+
self.write_materials_file(meeting, session.materials.filter(type="slides").exclude(states__type__slug='slides',states__slug='deleted').first(),
47+
"This is a slideshow")
48+
49+
3650
def test_agenda(self):
3751
meeting = make_meeting_test_data()
3852
session = Session.objects.filter(meeting=meeting, group__acronym="mars").first()
3953
slot = TimeSlot.objects.get(scheduledsession__session=session)
4054

55+
self.write_materials_files(meeting, session)
56+
4157
time_interval = "%s-%s" % (slot.time.strftime("%H%M"), (slot.time + slot.duration).strftime("%H%M"))
4258

4359
# plain
@@ -51,6 +67,13 @@ def test_agenda(self):
5167
self.assertTrue(slot.location.name in agenda_content)
5268
self.assertTrue(time_interval in agenda_content)
5369

70+
# Make sure there's a frame for the agenda and it points to the right place
71+
self.assertTrue(any([session.materials.get(type='agenda').href() in x.attrib['xsrc'] for x in q('tr.groupagenda iframe')]))
72+
73+
# Make sure undeleted slides are present and deleted slides are not
74+
self.assertTrue(any([session.materials.filter(type='slides').exclude(states__type__slug='slides',states__slug='deleted').first().title in x.text for x in q('tr.groupagenda a')]))
75+
self.assertFalse(any([session.materials.filter(type='slides',states__type__slug='slides',states__slug='deleted').first().title in x.text for x in q('tr.groupagenda a')]))
76+
5477
# mobile
5578
r = self.client.get(urlreverse("ietf.meeting.views.agenda", kwargs=dict(num=meeting.number)),
5679
{ '_testiphone': "1" })
@@ -81,6 +104,10 @@ def test_agenda(self):
81104
self.assertTrue(session.group.parent.acronym.upper() in agenda_content)
82105
self.assertTrue(slot.location.name in agenda_content)
83106

107+
self.assertTrue(session.materials.get(type='agenda').external_url in r.content)
108+
self.assertTrue(session.materials.filter(type='slides').exclude(states__type__slug='slides',states__slug='deleted').first().external_url in r.content)
109+
self.assertFalse(session.materials.filter(type='slides',states__type__slug='slides',states__slug='deleted').first().external_url in r.content)
110+
84111
# iCal
85112
r = self.client.get(urlreverse("ietf.meeting.views.ical_agenda", kwargs=dict(num=meeting.number))
86113
+ "?" + session.group.parent.acronym.upper())
@@ -92,6 +119,11 @@ def test_agenda(self):
92119
self.assertTrue("BEGIN:VTIMEZONE" in agenda_content)
93120
self.assertTrue("END:VTIMEZONE" in agenda_content)
94121

122+
self.assertTrue(session.agenda().get_absolute_url() in r.content)
123+
self.assertTrue(session.materials.filter(type='slides').exclude(states__type__slug='slides',states__slug='deleted').first().get_absolute_url() in r.content)
124+
# TODO - the ics view uses .all on a queryset in a view so it's showing the deleted slides.
125+
#self.assertFalse(session.materials.filter(type='slides',states__type__slug='slides',states__slug='deleted').first().get_absolute_url() in r.content)
126+
95127
# week view
96128
r = self.client.get(urlreverse("ietf.meeting.views.week_view", kwargs=dict(num=meeting.number)))
97129
self.assertEqual(r.status_code, 200)
@@ -102,16 +134,8 @@ def test_agenda(self):
102134
def test_materials(self):
103135
meeting = make_meeting_test_data()
104136
session = Session.objects.filter(meeting=meeting, group__acronym="mars").first()
105-
draft = Document.objects.filter(type="draft", group=session.group).first()
106-
107-
self.write_materials_file(meeting, session.materials.get(type="agenda"),
108-
"1. WG status (15 minutes)\n\n2. Status of %s\n\n" % draft.name)
109-
110-
self.write_materials_file(meeting, session.materials.get(type="minutes"),
111-
"1. More work items underway\n\n2. The draft will be finished before next meeting\n\n")
112137

113-
self.write_materials_file(meeting, session.materials.get(type="slides"),
114-
"This is a slideshow")
138+
self.write_materials_files(meeting, session)
115139

116140
# session agenda
117141
r = self.client.get(urlreverse("ietf.meeting.views.session_agenda",
@@ -132,6 +156,7 @@ def test_materials(self):
132156
self.assertTrue(row.find("a:contains(\"Agenda\")"))
133157
self.assertTrue(row.find("a:contains(\"Minutes\")"))
134158
self.assertTrue(row.find("a:contains(\"Slideshow\")"))
159+
self.assertFalse(row.find("a:contains(\"Bad Slideshow\")"))
135160

136161
# FIXME: missing tests of .pdf/.tar generation (some code can
137162
# probably be lifted from similar tests in iesg/tests.py)

0 commit comments

Comments
 (0)