|
26 | 26 | from ietf.meeting.helpers import send_interim_approval_request |
27 | 27 | from ietf.meeting.helpers import send_interim_cancellation_notice |
28 | 28 | from ietf.meeting.helpers import send_interim_minutes_reminder, populate_important_dates, update_important_dates |
29 | | -from ietf.meeting.models import Session, TimeSlot, Meeting, SchedTimeSessAssignment, Schedule, SessionPresentation |
| 29 | +from ietf.meeting.models import Session, TimeSlot, Meeting, SchedTimeSessAssignment, Schedule, SessionPresentation, SlideSubmission |
30 | 30 | from ietf.meeting.test_data import make_meeting_test_data, make_interim_meeting |
31 | 31 | from ietf.meeting.utils import finalize |
32 | 32 | from ietf.name.models import SessionStatusName, ImportantDateName |
|
35 | 35 | from ietf.utils.text import xslugify |
36 | 36 |
|
37 | 37 | from ietf.person.factories import PersonFactory |
38 | | -from ietf.group.factories import GroupFactory, GroupEventFactory |
| 38 | +from ietf.group.factories import GroupFactory, GroupEventFactory, RoleFactory |
39 | 39 | from ietf.meeting.factories import ( SessionFactory, SessionPresentationFactory, ScheduleFactory, |
40 | | - MeetingFactory, FloorPlanFactory, TimeSlotFactory ) |
| 40 | + MeetingFactory, FloorPlanFactory, TimeSlotFactory, SlideSubmissionFactory ) |
41 | 41 | from ietf.doc.factories import DocumentFactory |
42 | 42 | from ietf.submit.tests import submission_file |
43 | 43 |
|
@@ -1721,13 +1721,17 @@ class MaterialsTests(TestCase): |
1721 | 1721 |
|
1722 | 1722 | def setUp(self): |
1723 | 1723 | self.materials_dir = self.tempdir('materials') |
| 1724 | + self.staging_dir = self.tempdir('staging') |
1724 | 1725 | if not os.path.exists(self.materials_dir): |
1725 | 1726 | os.mkdir(self.materials_dir) |
1726 | 1727 | self.saved_agenda_path = settings.AGENDA_PATH |
1727 | 1728 | settings.AGENDA_PATH = self.materials_dir |
| 1729 | + self.saved_staging_path = settings.SLIDE_STAGING_PATH |
| 1730 | + settings.SLIDE_STAGING_PATH = self.staging_dir |
1728 | 1731 |
|
1729 | 1732 | def tearDown(self): |
1730 | 1733 | settings.AGENDA_PATH = self.saved_agenda_path |
| 1734 | + settings.SLIDE_STAGING_PATH = self.saved_staging_path |
1731 | 1735 | shutil.rmtree(self.materials_dir) |
1732 | 1736 |
|
1733 | 1737 | def crawl_materials(self, url, top): |
@@ -2019,6 +2023,116 @@ def test_remove_sessionpresentation(self): |
2019 | 2023 | self.assertEqual(0,session.sessionpresentation_set.count()) |
2020 | 2024 | self.assertEqual(2,doc.docevent_set.count()) |
2021 | 2025 |
|
| 2026 | + def test_propose_session_slides(self): |
| 2027 | + for type_id in ['ietf','interim']: |
| 2028 | + session = SessionFactory(meeting__type_id=type_id) |
| 2029 | + chair = RoleFactory(group=session.group,name_id='chair').person |
| 2030 | + session.meeting.importantdate_set.create(name_id='revsub',date=datetime.date.today()+datetime.timedelta(days=20)) |
| 2031 | + newperson = PersonFactory() |
| 2032 | + |
| 2033 | + session_overview_url = urlreverse('ietf.meeting.views.session_details',kwargs={'num':session.meeting.number,'acronym':session.group.acronym}) |
| 2034 | + propose_url = urlreverse('ietf.meeting.views.propose_session_slides', kwargs={'session_id':session.pk, 'num': session.meeting.number}) |
| 2035 | + |
| 2036 | + r = self.client.get(session_overview_url) |
| 2037 | + self.assertEqual(r.status_code,200) |
| 2038 | + q = PyQuery(r.content) |
| 2039 | + self.assertFalse(q('#uploadslides')) |
| 2040 | + self.assertFalse(q('#proposeslides')) |
| 2041 | + |
| 2042 | + self.client.login(username=newperson.user.username,password=newperson.user.username+"+password") |
| 2043 | + r = self.client.get(session_overview_url) |
| 2044 | + self.assertEqual(r.status_code,200) |
| 2045 | + q = PyQuery(r.content) |
| 2046 | + self.assertTrue(q('#proposeslides')) |
| 2047 | + self.client.logout() |
| 2048 | + |
| 2049 | + login_testing_unauthorized(self,newperson.user.username,propose_url) |
| 2050 | + r = self.client.get(propose_url) |
| 2051 | + self.assertEqual(r.status_code,200) |
| 2052 | + test_file = StringIO('this is not really a slide') |
| 2053 | + test_file.name = 'not_really.txt' |
| 2054 | + empty_outbox() |
| 2055 | + r = self.client.post(propose_url,dict(file=test_file,title='a test slide file',apply_to_all=True)) |
| 2056 | + self.assertEqual(r.status_code, 302) |
| 2057 | + session = Session.objects.get(pk=session.pk) |
| 2058 | + self.assertEqual(session.slidesubmission_set.count(),1) |
| 2059 | + self.assertEqual(len(outbox),1) |
| 2060 | + |
| 2061 | + r = self.client.get(session_overview_url) |
| 2062 | + self.assertEqual(r.status_code, 200) |
| 2063 | + q = PyQuery(r.content) |
| 2064 | + self.assertEqual(len(q('#proposedslidelist p')), 1) |
| 2065 | + |
| 2066 | + SlideSubmissionFactory(session = session) |
| 2067 | + |
| 2068 | + self.client.logout() |
| 2069 | + self.client.login(username=chair.user.username, password=chair.user.username+"+password") |
| 2070 | + r = self.client.get(session_overview_url) |
| 2071 | + self.assertEqual(r.status_code, 200) |
| 2072 | + q = PyQuery(r.content) |
| 2073 | + self.assertEqual(len(q('#proposedslidelist p')), 2) |
| 2074 | + self.client.logout() |
| 2075 | + |
| 2076 | + def test_disapprove_proposed_slides(self): |
| 2077 | + submission = SlideSubmissionFactory() |
| 2078 | + submission.session.meeting.importantdate_set.create(name_id='revsub',date=datetime.date.today()+datetime.timedelta(days=20)) |
| 2079 | + chair = RoleFactory(group=submission.session.group,name_id='chair').person |
| 2080 | + url = urlreverse('ietf.meeting.views.approve_proposed_slides', kwargs={'slidesubmission_id':submission.pk,'num':submission.session.meeting.number}) |
| 2081 | + login_testing_unauthorized(self, chair.user.username, url) |
| 2082 | + r = self.client.get(url) |
| 2083 | + self.assertEqual(r.status_code,200) |
| 2084 | + r = self.client.post(url,dict(title='some title',disapprove="disapprove")) |
| 2085 | + self.assertEqual(r.status_code,302) |
| 2086 | + self.assertEqual(SlideSubmission.objects.count(), 0) |
| 2087 | + |
| 2088 | + def test_approve_proposed_slides(self): |
| 2089 | + submission = SlideSubmissionFactory() |
| 2090 | + session = submission.session |
| 2091 | + session.meeting.importantdate_set.create(name_id='revsub',date=datetime.date.today()+datetime.timedelta(days=20)) |
| 2092 | + chair = RoleFactory(group=submission.session.group,name_id='chair').person |
| 2093 | + url = urlreverse('ietf.meeting.views.approve_proposed_slides', kwargs={'slidesubmission_id':submission.pk,'num':submission.session.meeting.number}) |
| 2094 | + login_testing_unauthorized(self, chair.user.username, url) |
| 2095 | + r = self.client.get(url) |
| 2096 | + self.assertEqual(r.status_code,200) |
| 2097 | + r = self.client.post(url,dict(title='different title',approve='approve')) |
| 2098 | + self.assertEqual(r.status_code,302) |
| 2099 | + self.assertEqual(SlideSubmission.objects.count(), 0) |
| 2100 | + self.assertEqual(session.sessionpresentation_set.count(),1) |
| 2101 | + self.assertEqual(session.sessionpresentation_set.first().document.title,'different title') |
| 2102 | + |
| 2103 | + def test_approve_proposed_slides_multisession_apply_one(self): |
| 2104 | + submission = SlideSubmissionFactory(session__meeting__type_id='ietf') |
| 2105 | + session1 = submission.session |
| 2106 | + session2 = SessionFactory(group=submission.session.group, meeting=submission.session.meeting) |
| 2107 | + submission.session.meeting.importantdate_set.create(name_id='revsub',date=datetime.date.today()+datetime.timedelta(days=20)) |
| 2108 | + chair = RoleFactory(group=submission.session.group,name_id='chair').person |
| 2109 | + url = urlreverse('ietf.meeting.views.approve_proposed_slides', kwargs={'slidesubmission_id':submission.pk,'num':submission.session.meeting.number}) |
| 2110 | + login_testing_unauthorized(self, chair.user.username, url) |
| 2111 | + r = self.client.get(url) |
| 2112 | + self.assertEqual(r.status_code,200) |
| 2113 | + q = PyQuery(r.content) |
| 2114 | + self.assertTrue(q('#id_apply_to_all')) |
| 2115 | + r = self.client.post(url,dict(title='yet another title',approve='approve')) |
| 2116 | + self.assertEqual(r.status_code,302) |
| 2117 | + self.assertEqual(session1.sessionpresentation_set.count(),1) |
| 2118 | + self.assertEqual(session2.sessionpresentation_set.count(),0) |
| 2119 | + |
| 2120 | + def test_approve_proposed_slides_multisession_apply_all(self): |
| 2121 | + submission = SlideSubmissionFactory(session__meeting__type_id='ietf') |
| 2122 | + session1 = submission.session |
| 2123 | + session2 = SessionFactory(group=submission.session.group, meeting=submission.session.meeting) |
| 2124 | + submission.session.meeting.importantdate_set.create(name_id='revsub',date=datetime.date.today()+datetime.timedelta(days=20)) |
| 2125 | + chair = RoleFactory(group=submission.session.group,name_id='chair').person |
| 2126 | + url = urlreverse('ietf.meeting.views.approve_proposed_slides', kwargs={'slidesubmission_id':submission.pk,'num':submission.session.meeting.number}) |
| 2127 | + login_testing_unauthorized(self, chair.user.username, url) |
| 2128 | + r = self.client.get(url) |
| 2129 | + self.assertEqual(r.status_code,200) |
| 2130 | + r = self.client.post(url,dict(title='yet another title',apply_to_all=1,approve='approve')) |
| 2131 | + self.assertEqual(r.status_code,302) |
| 2132 | + self.assertEqual(session1.sessionpresentation_set.count(),1) |
| 2133 | + self.assertEqual(session2.sessionpresentation_set.count(),1) |
| 2134 | + |
| 2135 | + |
2022 | 2136 | class SessionTests(TestCase): |
2023 | 2137 |
|
2024 | 2138 | def test_meeting_requests(self): |
|
0 commit comments