|
28 | 28 | from ietf.meeting.factories import SessionFactory |
29 | 29 | from ietf.name.models import DocTagName, GroupStateName, GroupTypeName |
30 | 30 | from ietf.person.models import Person, Email |
| 31 | +from ietf.person.factories import PersonFactory |
31 | 32 | from ietf.utils.mail import outbox, empty_outbox |
32 | | -from ietf.utils.test_data import make_test_data, create_person, make_review_data |
| 33 | +from ietf.utils.test_data import make_test_data, make_review_data |
33 | 34 | from ietf.utils.test_utils import login_testing_unauthorized, TestCase, unicontent, reload_db_objects |
34 | 35 |
|
35 | 36 | def group_urlreverse_list(group, viewname): |
@@ -62,30 +63,15 @@ def test_active_groups(self): |
62 | 63 | self.assertTrue(group.name in unicontent(r)) |
63 | 64 | self.assertTrue(group.ad_role().person.plain_name() in unicontent(r)) |
64 | 65 |
|
65 | | - url = urlreverse('ietf.group.views.active_groups', kwargs=dict(group_type="rg")) |
66 | | - r = self.client.get(url) |
67 | | - self.assertEqual(r.status_code, 200) |
68 | | - self.assertTrue('Active research groups' in unicontent(r)) |
69 | | - |
70 | | - url = urlreverse('ietf.group.views.active_groups', kwargs=dict(group_type="area")) |
71 | | - r = self.client.get(url) |
72 | | - self.assertEqual(r.status_code, 200) |
73 | | - self.assertTrue("Far Future (farfut)" in unicontent(r)) |
74 | | - |
75 | | - url = urlreverse('ietf.group.views.active_groups', kwargs=dict(group_type="ag")) |
76 | | - r = self.client.get(url) |
77 | | - self.assertEqual(r.status_code, 200) |
78 | | - self.assertTrue("Active area groups" in unicontent(r)) |
79 | | - |
80 | | - url = urlreverse('ietf.group.views.active_groups', kwargs=dict(group_type="dir")) |
81 | | - r = self.client.get(url) |
82 | | - self.assertEqual(r.status_code, 200) |
83 | | - self.assertTrue("Active directorates" in unicontent(r)) |
84 | | - |
85 | | - url = urlreverse('ietf.group.views.active_groups', kwargs=dict(group_type="team")) |
86 | | - r = self.client.get(url) |
87 | | - self.assertEqual(r.status_code, 200) |
88 | | - self.assertTrue("Active teams" in unicontent(r)) |
| 66 | + for t in ('rg','area','ag','dir','team','program'): |
| 67 | + g = GroupFactory.create(type_id=t,state_id='active') |
| 68 | + if t=='dir': |
| 69 | + g.parent = GroupFactory.create(type_id='area',state_id='active') |
| 70 | + g.save() |
| 71 | + url = urlreverse('ietf.group.views.active_groups', kwargs=dict(group_type=t)) |
| 72 | + r = self.client.get(url) |
| 73 | + self.assertEqual(r.status_code, 200) |
| 74 | + self.assertTrue(g.acronym in unicontent(r)) |
89 | 75 |
|
90 | 76 | url = urlreverse('ietf.group.views.active_groups', kwargs=dict()) |
91 | 77 | r = self.client.get(url) |
@@ -269,42 +255,72 @@ def test_group_charter(self): |
269 | 255 |
|
270 | 256 | def test_group_about(self): |
271 | 257 |
|
272 | | - def verify_cannot_edit_group(url, username): |
273 | | - self.client.login(username=username, password=username+"+password") |
274 | | - r = self.client.get(url) |
275 | | - self.assertEqual(r.status_code, 403) |
| 258 | + make_test_data() |
276 | 259 |
|
277 | | - def verify_can_edit_group(url, username): |
278 | | - self.client.login(username=username, password=username+"+password") |
279 | | - r = self.client.get(url) |
280 | | - self.assertEqual(r.status_code, 200) |
| 260 | + p = PersonFactory(user__username='iab-member') |
| 261 | + Group.objects.get(acronym='iab').role_set.create(name_id='member',person=p,email=p.email()) |
281 | 262 |
|
282 | | - make_test_data() |
283 | | - group = Group.objects.create( |
284 | | - type_id="team", |
285 | | - acronym="testteam", |
286 | | - name="Test Team", |
287 | | - description="The test team is testing.", |
288 | | - state_id="active", |
289 | | - parent = Group.objects.get(acronym="farfut"), |
290 | | - ) |
291 | | - create_person(group, "chair", name="Testteam Chairman", username="teamchairman") |
| 263 | + interesting_users = [ 'plain','iana','iab-chair','irtf-chair', 'marschairman', 'teamchairman','ad', 'iab-member', 'secretary', ] |
292 | 264 |
|
293 | | - for url in [group.about_url(),] + group_urlreverse_list(group, 'ietf.group.views.group_about'): |
294 | | - url = group.about_url() |
295 | | - r = self.client.get(url) |
296 | | - self.assertEqual(r.status_code, 200) |
297 | | - self.assertTrue(group.name in unicontent(r)) |
298 | | - self.assertTrue(group.acronym in unicontent(r)) |
299 | | - self.assertTrue(group.description in unicontent(r)) |
| 265 | + can_edit = { |
| 266 | + 'wg' : ['secretary','ad'], |
| 267 | + 'rg' : ['secretary','irtf-chair'], |
| 268 | + 'ag' : ['secretary', ], |
| 269 | + 'team' : ['secretary',], # The code currently doesn't let ads edit teams or directorates. Maybe it should. |
| 270 | + 'dir' : ['secretary',], |
| 271 | + 'program' : ['secretary', 'iab-member'], |
| 272 | + } |
300 | 273 |
|
301 | | - for url in group_urlreverse_list(group, 'ietf.group.views_edit.edit'): |
| 274 | + def setup_role(group, role_id): |
| 275 | + p = PersonFactory(user__username="%s_%s"%(group.acronym,role_id)) |
| 276 | + group.role_set.create(name_id=role_id,person=p,email=p.email()) |
| 277 | + can_edit[group.type_id].append(p.user.username) |
| 278 | + interesting_users.append(p.user.username) |
302 | 279 |
|
303 | | - for username in ['plain','iana','iab chair','irtf chair','marschairman']: |
304 | | - verify_cannot_edit_group(url, username) |
| 280 | + test_groups = [] |
305 | 281 |
|
306 | | - for username in ['secretary','teamchairman','ad']: |
307 | | - verify_can_edit_group(url, username) |
| 282 | + for t in ['wg','rg','ag','team']: |
| 283 | + g = GroupFactory(type_id=t) |
| 284 | + setup_role(g,'chair') |
| 285 | + test_groups.append(g) |
| 286 | + |
| 287 | + g = GroupFactory(type_id='dir') |
| 288 | + setup_role(g,'secr') |
| 289 | + test_groups.append(g) |
| 290 | + |
| 291 | + g = GroupFactory(type_id='program') |
| 292 | + setup_role(g, 'lead') |
| 293 | + test_groups.append(g) |
| 294 | + |
| 295 | + def verify_cannot_edit_group(url, group, username): |
| 296 | + self.client.logout() |
| 297 | + self.client.login(username=username, password=username+"+password") |
| 298 | + r = self.client.get(url) |
| 299 | + self.assertTrue(r.status_code in (302,403),"%s should not be able to edit %s of type %s"%(username,group.acronym,group.type_id)) |
| 300 | + |
| 301 | + def verify_can_edit_group(url, group, username): |
| 302 | + self.client.logout() |
| 303 | + self.client.login(username=username, password=username+"+password") |
| 304 | + r = self.client.get(url) |
| 305 | + self.assertEqual(r.status_code, 200, "%s should be able to edit %s of type %s"%(username,group.acronym,group.type_id)) |
| 306 | + |
| 307 | + for group in test_groups: |
| 308 | + |
| 309 | + for url in [group.about_url(),] + group_urlreverse_list(group, 'ietf.group.views.group_about'): |
| 310 | + url = group.about_url() |
| 311 | + r = self.client.get(url) |
| 312 | + self.assertEqual(r.status_code, 200) |
| 313 | + self.assertTrue(group.name in unicontent(r)) |
| 314 | + self.assertTrue(group.acronym in unicontent(r)) |
| 315 | + self.assertTrue(group.description in unicontent(r)) |
| 316 | + |
| 317 | + for url in group_urlreverse_list(group, 'ietf.group.views_edit.edit'): |
| 318 | + |
| 319 | + for username in can_edit[group.type_id]: |
| 320 | + verify_can_edit_group(url, group, username) |
| 321 | + |
| 322 | + for username in list(set(interesting_users)-set(can_edit[group.type_id])): |
| 323 | + verify_cannot_edit_group(url, group, username) |
308 | 324 |
|
309 | 325 | def test_materials(self): |
310 | 326 | make_test_data() |
|
0 commit comments