|
4 | 4 | import calendar |
5 | 5 | import datetime |
6 | 6 | import json |
| 7 | +import StringIO |
7 | 8 |
|
8 | 9 | from pyquery import PyQuery |
9 | 10 | from tempfile import NamedTemporaryFile |
|
12 | 13 | from django.conf import settings |
13 | 14 | from django.core.urlresolvers import reverse as urlreverse |
14 | 15 | from django.core.urlresolvers import NoReverseMatch |
| 16 | +from django.contrib.auth.models import User |
| 17 | + |
| 18 | +from django.utils.html import escape |
| 19 | +from django.template.defaultfilters import urlize |
15 | 20 |
|
16 | 21 | from ietf.doc.models import Document, DocAlias, DocEvent, State |
17 | 22 | from ietf.group.models import Group, GroupEvent, GroupMilestone, GroupStateTransitions |
|
22 | 27 | from ietf.utils.mail import outbox, empty_outbox |
23 | 28 | from ietf.utils.test_data import make_test_data |
24 | 29 | from ietf.utils.test_utils import login_testing_unauthorized |
25 | | -from ietf.group.factories import GroupFactory |
| 30 | +from ietf.group.factories import GroupFactory, RoleFactory, GroupEventFactory |
26 | 31 | from ietf.meeting.factories import SessionFactory |
27 | 32 |
|
28 | 33 | class GroupPagesTests(TestCase): |
@@ -1016,3 +1021,88 @@ def test_meeting_info(self): |
1016 | 1021 | q = PyQuery(response.content) |
1017 | 1022 | self.assertFalse(q('#inprogressmeets')) |
1018 | 1023 |
|
| 1024 | + |
| 1025 | +class StatusUpdateTests(TestCase): |
| 1026 | + |
| 1027 | + def test_unsupported_group_types(self): |
| 1028 | + |
| 1029 | + def ensure_updates_dont_show(group,user): |
| 1030 | + url = urlreverse('ietf.group.info.group_about',kwargs={'acronym':group.acronym}) |
| 1031 | + if user: |
| 1032 | + self.client.login(username=user.username,password='%s+password'%user.username) |
| 1033 | + response = self.client.get(url) |
| 1034 | + self.assertEqual(response.status_code, 200) |
| 1035 | + q = PyQuery(response.content) |
| 1036 | + self.assertFalse(q('tr#status_update') ) |
| 1037 | + self.client.logout() |
| 1038 | + |
| 1039 | + def ensure_cant_edit(group,user): |
| 1040 | + url = urlreverse('ietf.group.info.group_about_status_edit',kwargs={'acronym':group.acronym}) |
| 1041 | + if user: |
| 1042 | + self.client.login(username=user.username,password='%s+password'%user.username) |
| 1043 | + response = self.client.get(url) |
| 1044 | + self.assertEqual(response.status_code, 404) |
| 1045 | + self.client.logout() |
| 1046 | + |
| 1047 | + for type_id in GroupTypeName.objects.exclude(slug__in=('wg','rg','team')).values_list('slug',flat=True): |
| 1048 | + group = GroupFactory.create(type_id=type_id) |
| 1049 | + for user in (None,User.objects.get(username='secretary')): |
| 1050 | + ensure_updates_dont_show(group,user) |
| 1051 | + ensure_cant_edit(group,user) |
| 1052 | + |
| 1053 | + def test_see_status_update(self): |
| 1054 | + chair = RoleFactory(name_id='chair',group__type_id='wg') |
| 1055 | + GroupEventFactory(type='status_update',group=chair.group) |
| 1056 | + url = urlreverse('ietf.group.info.group_about',kwargs={'acronym':chair.group.acronym}) |
| 1057 | + response = self.client.get(url) |
| 1058 | + self.assertEqual(response.status_code,200) |
| 1059 | + q=PyQuery(response.content) |
| 1060 | + self.assertTrue(q('tr#status_update')) |
| 1061 | + self.assertTrue(q('tr#status_update td a:contains("Show")')) |
| 1062 | + self.assertFalse(q('tr#status_update td a:contains("Edit")')) |
| 1063 | + self.client.login(username=chair.person.user.username,password='%s+password'%chair.person.user.username) |
| 1064 | + response = self.client.get(url) |
| 1065 | + self.assertEqual(response.status_code,200) |
| 1066 | + q=PyQuery(response.content) |
| 1067 | + self.assertTrue(q('tr#status_update td a:contains("Show")')) |
| 1068 | + self.assertTrue(q('tr#status_update td a:contains("Edit")')) |
| 1069 | + |
| 1070 | + def test_view_status_update(self): |
| 1071 | + chair = RoleFactory(name_id='chair',group__type_id='wg') |
| 1072 | + event = GroupEventFactory(type='status_update',group=chair.group) |
| 1073 | + url = urlreverse('ietf.group.info.group_about_status',kwargs={'acronym':chair.group.acronym}) |
| 1074 | + response = self.client.get(url) |
| 1075 | + self.assertEqual(response.status_code,200) |
| 1076 | + q=PyQuery(response.content) |
| 1077 | + self.assertTrue(urlize(escape(event.desc) in q('pre'))) |
| 1078 | + self.assertFalse(q('a#edit_button')) |
| 1079 | + self.client.login(username=chair.person.user.username,password='%s+password'%chair.person.user.username) |
| 1080 | + response = self.client.get(url) |
| 1081 | + self.assertEqual(response.status_code,200) |
| 1082 | + q=PyQuery(response.content) |
| 1083 | + self.assertTrue(q('a#edit_button')) |
| 1084 | + |
| 1085 | + def test_edit_status_update(self): |
| 1086 | + chair = RoleFactory(name_id='chair',group__type_id='wg') |
| 1087 | + event = GroupEventFactory(type='status_update',group=chair.group) |
| 1088 | + url = urlreverse('ietf.group.info.group_about_status_edit',kwargs={'acronym':chair.group.acronym}) |
| 1089 | + response = self.client.get(url) |
| 1090 | + self.assertEqual(response.status_code,404) |
| 1091 | + self.client.login(username=chair.person.user.username,password='%s+password'%chair.person.user.username) |
| 1092 | + response = self.client.get(url) |
| 1093 | + self.assertEqual(response.status_code,200) |
| 1094 | + q=PyQuery(response.content) |
| 1095 | + self.assertTrue(event.desc in q('form textarea#id_content').text()) |
| 1096 | + |
| 1097 | + response = self.client.post(url,dict(content='Direct content typed into form',submit_response='1')) |
| 1098 | + self.assertEqual(response.status_code, 302) |
| 1099 | + self.assertEqual(chair.group.latest_event(type='status_update').desc,'Direct content typed into form') |
| 1100 | + |
| 1101 | + test_file = StringIO.StringIO("This came from a file.") |
| 1102 | + test_file.name = "unnamed" |
| 1103 | + response = self.client.post(url,dict(txt=test_file,submit_response="1")) |
| 1104 | + self.assertEqual(response.status_code, 302) |
| 1105 | + self.assertEqual(chair.group.latest_event(type='status_update').desc,'This came from a file.') |
| 1106 | + |
| 1107 | + |
| 1108 | + |
0 commit comments