1 '''
2 Created on Jul 29, 2010
3
4 @author: jnaous
5 '''
6 from django.test import TestCase
7 from django.contrib.auth.models import User
8 from expedient.common.permissions.shortcuts import create_permission,\
9 give_permission_to, has_permission
10 from expedient.common.permissions.models import PermissionRequest,\
11 Permittee, ObjectPermission
12 from django.core.urlresolvers import reverse
13 from expedient.common.tests.client import test_get_and_post_form
14
17 """
18 Create some permissions and users.
19 """
20 self.u1 = User.objects.create_user("user1", "user@user.com", "password")
21 self.u2 = User.objects.create_user("user2", "user@user.com", "password")
22
23 create_permission("permission1", description="Permission 1 description.")
24 give_permission_to("permission1", self.u1, self.u1, can_delegate=True)
25 give_permission_to("permission1", self.u2, self.u1, can_delegate=True)
26
28 """
29 Test that when a request is made for a user, it shows up in the
30 dashboard.
31 """
32 self.client.login(username="user1", password="password")
33 resp = self.client.get(reverse("permissionmgmt_dashboard"))
34
35
36 self.assertContains(resp, "permission1", 0)
37
38 obj_perm1=ObjectPermission.objects.get_or_create_for_object_or_class(
39 "permission1", self.u1,
40 )[0]
41 obj_perm2=ObjectPermission.objects.get_or_create_for_object_or_class(
42 "permission1", self.u2,
43 )[0]
44 req1 = PermissionRequest.objects.create(
45 requesting_user=self.u2,
46 permittee=Permittee.objects.get_or_create_from_instance(self.u2)[0],
47 permission_owner=self.u1,
48 requested_permission=obj_perm1,
49 )
50 req2 = PermissionRequest.objects.create(
51 requesting_user=self.u2,
52 permittee=Permittee.objects.get_or_create_from_instance(self.u2)[0],
53 permission_owner=self.u1,
54 requested_permission=obj_perm2,
55 )
56
57 resp = self.client.get(reverse("permissionmgmt_dashboard"))
58
59
60 self.assertContains(resp, "permission1", 2)
61
62 resp = test_get_and_post_form(
63 self.client, reverse("permissionmgmt_dashboard"),
64 dict(
65 approved=[str(req2.id)],
66 denied=[str(req1.id)],
67 )
68 )
69
70 self.assertRedirects(resp, reverse("permissionmgmt_confirm_req"))
71
72 resp = test_get_and_post_form(
73 self.client, reverse("permissionmgmt_confirm_req"),
74 dict(
75 post="yes",
76 )
77 )
78
79 self.assertRedirects(resp, reverse("home"))
80
81 self.assertEqual(PermissionRequest.objects.count(), 0)
82
83 self.assertTrue(has_permission(self.u2, self.u2, "permission1"))
84 self.assertFalse(has_permission(self.u2, self.u1, "permission1"))
85