|
20 | 20 | from ietf.doc.models import ( Document, DocAlias, DocRelationshipName, RelatedDocument, State, |
21 | 21 | DocEvent, BallotPositionDocEvent, LastCallDocEvent, WriteupDocEvent, NewRevisionDocEvent, |
22 | 22 | save_document_in_history ) |
| 23 | +from ietf.doc.factories import DocumentFactory |
23 | 24 | from ietf.group.models import Group |
| 25 | +from ietf.group.factories import GroupFactory |
24 | 26 | from ietf.meeting.models import Meeting, Session, SessionPresentation |
| 27 | +from ietf.meeting.factories import SessionFactory |
25 | 28 | from ietf.name.models import SessionStatusName |
26 | 29 | from ietf.person.models import Person |
| 30 | +from ietf.person.factories import PersonFactory |
27 | 31 | from ietf.utils.mail import outbox |
28 | 32 | from ietf.utils.test_data import make_test_data |
29 | 33 | from ietf.utils.test_utils import login_testing_unauthorized, unicontent |
@@ -904,3 +908,185 @@ def testExpansions(self): |
904 | 908 | self.assertEqual(r.status_code, 200) |
905 | 909 | self.assertTrue('draft-ietf-mars-test.all@ietf.org' in unicontent(r)) |
906 | 910 | self.assertTrue('ballot_saved' in unicontent(r)) |
| 911 | + |
| 912 | +class DocumentMeetingTests(TestCase): |
| 913 | + |
| 914 | + def setUp(self): |
| 915 | + 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()) |
| 922 | + |
| 923 | + today = datetime.date.today() |
| 924 | + cut_days = settings.MEETING_MATERIALS_SUBMISSION_CORRECTION_DAYS |
| 925 | + self.past_cutoff = SessionFactory.create(meeting__type_id='ietf',group=self.group,meeting__date=today-datetime.timedelta(days=1+cut_days)) |
| 926 | + self.past = SessionFactory.create(meeting__type_id='ietf',group=self.group,meeting__date=today-datetime.timedelta(days=cut_days/2)) |
| 927 | + self.inprog = SessionFactory.create(meeting__type_id='ietf',group=self.group,meeting__date=today-datetime.timedelta(days=1)) |
| 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)) |
| 930 | + |
| 931 | + def test_view_document_meetings(self): |
| 932 | + doc = DocumentFactory.create() |
| 933 | + doc.sessionpresentation_set.create(session=self.inprog,rev=None) |
| 934 | + doc.sessionpresentation_set.create(session=self.interim,rev=None) |
| 935 | + |
| 936 | + url = urlreverse('ietf.doc.views_doc.all_presentations', kwargs=dict(name=doc.name)) |
| 937 | + response = self.client.get(url) |
| 938 | + self.assertEqual(response.status_code, 200) |
| 939 | + q = PyQuery(response.content) |
| 940 | + self.assertTrue(all([q(id) for id in ['#inprogressmeets','#futuremeets']])) |
| 941 | + self.assertFalse(any([q(id) for id in ['#pastmeets',]])) |
| 942 | + self.assertFalse(q('#addsessionsbutton')) |
| 943 | + self.assertFalse(q("a.btn:contains('Remove document')")) |
| 944 | + |
| 945 | + doc.sessionpresentation_set.create(session=self.past_cutoff,rev=None) |
| 946 | + doc.sessionpresentation_set.create(session=self.past,rev=None) |
| 947 | + |
| 948 | + self.client.login(username="secretary", password="secretary+password") |
| 949 | + response = self.client.get(url) |
| 950 | + self.assertEqual(response.status_code, 200) |
| 951 | + q = PyQuery(response.content) |
| 952 | + self.assertTrue(q('#addsessionsbutton')) |
| 953 | + 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')"))) |
| 955 | + self.assertEqual(1,len(q("#pastmeets a.btn-default:contains('Remove document')"))) |
| 956 | + self.assertEqual(1,len(q("#pastmeets a.btn-warning:contains('Remove document')"))) |
| 957 | + |
| 958 | + self.client.login(username=self.group_chair.user.username,password='%s+password'%self.group_chair.user.username) |
| 959 | + response = self.client.get(url) |
| 960 | + self.assertEqual(response.status_code, 200) |
| 961 | + q = PyQuery(response.content) |
| 962 | + self.assertTrue(q('#addsessionsbutton')) |
| 963 | + 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')"))) |
| 965 | + self.assertEqual(1,len(q("#pastmeets a.btn-default:contains('Remove document')"))) |
| 966 | + self.assertTrue(q('#pastmeets')) |
| 967 | + self.assertFalse(q("#pastmeets a.btn-warning:contains('Remove document')")) |
| 968 | + |
| 969 | + self.client.login(username=self.other_chair.user.username,password='%s+password'%self.other_chair.user.username) |
| 970 | + response = self.client.get(url) |
| 971 | + self.assertEqual(response.status_code, 200) |
| 972 | + q = PyQuery(response.content) |
| 973 | + self.assertTrue(q('#addsessionsbutton')) |
| 974 | + self.assertTrue(all([q(id) for id in ['#futuremeets','#pastmeets','#inprogressmeets']])) |
| 975 | + self.assertFalse(q("#inprogressmeets a.btn:contains('Remove document')")) |
| 976 | + self.assertFalse(q("#futuremeets a.btn:contains('Remove document')")) |
| 977 | + 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 | + self.assertEqual(1,doc.docevent_set.count()) |
| 1006 | + response = self.client.post(url,{'version':'00','save':''}) |
| 1007 | + self.assertEqual(response.status_code, 302) |
| 1008 | + self.assertEqual(doc.sessionpresentation_set.get(pk=sp.pk).rev,'00') |
| 1009 | + self.assertEqual(2,doc.docevent_set.count()) |
| 1010 | + |
| 1011 | + def test_edit_document_session_after_proceedings_closed(self): |
| 1012 | + doc = DocumentFactory.create() |
| 1013 | + sp = doc.sessionpresentation_set.create(session=self.past_cutoff,rev=None) |
| 1014 | + |
| 1015 | + url = urlreverse('ietf.doc.views_doc.edit_sessionpresentation',kwargs=dict(name=doc.name,session_id=sp.session_id)) |
| 1016 | + self.client.login(username=self.group_chair.user.username,password='%s+password'%self.group_chair.user.username) |
| 1017 | + response = self.client.get(url) |
| 1018 | + self.assertEqual(response.status_code, 404) |
| 1019 | + |
| 1020 | + self.client.login(username='secretary',password='secretary+password') |
| 1021 | + response = self.client.get(url) |
| 1022 | + self.assertEqual(response.status_code, 200) |
| 1023 | + q=PyQuery(response.content) |
| 1024 | + self.assertEqual(1,len(q(".alert-warning:contains('may affect published proceedings')"))) |
| 1025 | + |
| 1026 | + def test_remove_document_session(self): |
| 1027 | + doc = DocumentFactory.create() |
| 1028 | + sp = doc.sessionpresentation_set.create(session=self.future,rev=None) |
| 1029 | + |
| 1030 | + url = urlreverse('ietf.doc.views_doc.remove_sessionpresentation',kwargs=dict(name='no-such-doc',session_id=sp.session_id)) |
| 1031 | + response = self.client.get(url) |
| 1032 | + self.assertEqual(response.status_code, 404) |
| 1033 | + |
| 1034 | + url = urlreverse('ietf.doc.views_doc.remove_sessionpresentation',kwargs=dict(name=doc.name,session_id=0)) |
| 1035 | + response = self.client.get(url) |
| 1036 | + self.assertEqual(response.status_code, 404) |
| 1037 | + |
| 1038 | + url = urlreverse('ietf.doc.views_doc.remove_sessionpresentation',kwargs=dict(name=doc.name,session_id=sp.session_id)) |
| 1039 | + response = self.client.get(url) |
| 1040 | + self.assertEqual(response.status_code, 404) |
| 1041 | + |
| 1042 | + self.client.login(username=self.other_chair.user.username,password='%s+password'%self.other_chair.user.username) |
| 1043 | + response = self.client.get(url) |
| 1044 | + self.assertEqual(response.status_code, 404) |
| 1045 | + |
| 1046 | + self.client.login(username=self.group_chair.user.username,password='%s+password'%self.group_chair.user.username) |
| 1047 | + response = self.client.get(url) |
| 1048 | + self.assertEqual(response.status_code, 200) |
| 1049 | + |
| 1050 | + self.assertEqual(1,doc.docevent_set.count()) |
| 1051 | + response = self.client.post(url,{'remove_session':''}) |
| 1052 | + self.assertEqual(response.status_code, 302) |
| 1053 | + self.assertFalse(doc.sessionpresentation_set.filter(pk=sp.pk).exists()) |
| 1054 | + self.assertEqual(2,doc.docevent_set.count()) |
| 1055 | + |
| 1056 | + def test_remove_document_session_after_proceedings_closed(self): |
| 1057 | + doc = DocumentFactory.create() |
| 1058 | + sp = doc.sessionpresentation_set.create(session=self.past_cutoff,rev=None) |
| 1059 | + |
| 1060 | + url = urlreverse('ietf.doc.views_doc.remove_sessionpresentation',kwargs=dict(name=doc.name,session_id=sp.session_id)) |
| 1061 | + self.client.login(username=self.group_chair.user.username,password='%s+password'%self.group_chair.user.username) |
| 1062 | + response = self.client.get(url) |
| 1063 | + self.assertEqual(response.status_code, 404) |
| 1064 | + |
| 1065 | + self.client.login(username='secretary',password='secretary+password') |
| 1066 | + response = self.client.get(url) |
| 1067 | + self.assertEqual(response.status_code, 200) |
| 1068 | + q=PyQuery(response.content) |
| 1069 | + self.assertEqual(1,len(q(".alert-warning:contains('may affect published proceedings')"))) |
| 1070 | + |
| 1071 | + def test_add_document_session(self): |
| 1072 | + doc = DocumentFactory.create() |
| 1073 | + |
| 1074 | + url = urlreverse('ietf.doc.views_doc.add_sessionpresentation',kwargs=dict(name=doc.name)) |
| 1075 | + login_testing_unauthorized(self,self.group_chair.user.username,url) |
| 1076 | + response = self.client.get(url) |
| 1077 | + self.assertEqual(response.status_code,200) |
| 1078 | + |
| 1079 | + response = self.client.post(url,{'session':0,'version':'current'}) |
| 1080 | + self.assertEqual(response.status_code,200) |
| 1081 | + q=PyQuery(response.content) |
| 1082 | + self.assertTrue(q('.form-group.has-error')) |
| 1083 | + |
| 1084 | + response = self.client.post(url,{'session':self.future.pk,'version':'bogus version'}) |
| 1085 | + self.assertEqual(response.status_code,200) |
| 1086 | + q=PyQuery(response.content) |
| 1087 | + self.assertTrue(q('.form-group.has-error')) |
| 1088 | + |
| 1089 | + self.assertEqual(1,doc.docevent_set.count()) |
| 1090 | + response = self.client.post(url,{'session':self.future.pk,'version':'current'}) |
| 1091 | + self.assertEqual(response.status_code,302) |
| 1092 | + self.assertEqual(2,doc.docevent_set.count()) |
0 commit comments