Pārlūkot izejas kodu

Calendar tests: rights access on workspace clendars

Bastien Sevajol (Algoo) 9 gadus atpakaļ
vecāks
revīzija
959ba2bf9b

+ 7 - 0
tracim/tracim/fixtures/users_and_groups.py Parādīt failu

47
         lawrence.password = 'foobarbaz'
47
         lawrence.password = 'foobarbaz'
48
         self._session.add(lawrence)
48
         self._session.add(lawrence)
49
         g2.users.append(lawrence)
49
         g2.users.append(lawrence)
50
+
51
+        bob = model.User()
52
+        bob.display_name = 'Bob i.'
53
+        bob.email = 'bob@fsf.local'
54
+        bob.password = 'foobarbaz'
55
+        self._session.add(bob)
56
+        g2.users.append(bob)

+ 13 - 0
tracim/tracim/tests/__init__.py Parādīt failu

38
 from tracim.model import DBSession, Content
38
 from tracim.model import DBSession, Content
39
 from tracim.model.data import Workspace, ContentType, ContentRevisionRO
39
 from tracim.model.data import Workspace, ContentType, ContentRevisionRO
40
 from tracim.lib.calendar import CALENDAR_BASE_URL_TEMPLATE
40
 from tracim.lib.calendar import CALENDAR_BASE_URL_TEMPLATE
41
+from tracim.lib.calendar import CALENDAR_WORKSPACE_URL_TEMPLATE
41
 from tracim.lib.calendar import CALENDAR_USER_URL_TEMPLATE
42
 from tracim.lib.calendar import CALENDAR_USER_URL_TEMPLATE
42
 
43
 
43
 __all__ = ['setup_app', 'setup_db', 'teardown_db', 'TestController']
44
 __all__ = ['setup_app', 'setup_db', 'teardown_db', 'TestController']
392
             id=user_id,
393
             id=user_id,
393
             extra='',
394
             extra='',
394
         )
395
         )
396
+
397
+    def _get_workspace_calendar_url(self, workspace_id):
398
+        from tracim.config.app_cfg import CFG
399
+        cfg = CFG.get_instance()
400
+
401
+        return CALENDAR_WORKSPACE_URL_TEMPLATE.format(
402
+            proto='https' if cfg.RADICALE_CLIENT_SSL else 'http',
403
+            domain=cfg.RADICALE_CLIENT_HOST or '127.0.0.1',
404
+            port=str(cfg.RADICALE_CLIENT_PORT),
405
+            id=workspace_id,
406
+            extra='',
407
+        )

+ 72 - 2
tracim/tracim/tests/functional/test_calendar.py Parādīt failu

1
 import time
1
 import time
2
 
2
 
3
 import caldav
3
 import caldav
4
+import transaction
4
 from caldav.lib.error import AuthorizationError
5
 from caldav.lib.error import AuthorizationError
5
 from nose.tools import eq_, ok_
6
 from nose.tools import eq_, ok_
6
 import requests
7
 import requests
7
 from requests.exceptions import ConnectionError
8
 from requests.exceptions import ConnectionError
8
 
9
 
10
+from tracim.lib.workspace import WorkspaceApi
9
 from tracim.model import DBSession
11
 from tracim.model import DBSession
10
 from tracim.tests import TestCalendar as BaseTestCalendar
12
 from tracim.tests import TestCalendar as BaseTestCalendar
11
 from tracim.model.auth import User
13
 from tracim.model.auth import User
53
         except AuthorizationError:
55
         except AuthorizationError:
54
             ok_(True, 'AuthorizationError thrown correctly')
56
             ok_(True, 'AuthorizationError thrown correctly')
55
 
57
 
56
-    def test_func__radicale_rights_read_user_calendar__ok__as_lawrence(self):
58
+    def test_func__rights_read_user_calendar__ok__as_lawrence(self):
57
         radicale_base_url = self._get_base_url()
59
         radicale_base_url = self._get_base_url()
58
         client = caldav.DAVClient(
60
         client = caldav.DAVClient(
59
             radicale_base_url,
61
             radicale_base_url,
75
         except AuthorizationError:
77
         except AuthorizationError:
76
             ok_(False, 'User should not access that')
78
             ok_(False, 'User should not access that')
77
 
79
 
78
-    def test_func__radicale_rights_read_user_calendar__fail__as_john_doe(self):
80
+    def test_func__rights_read_user_calendar__fail__as_john_doe(self):
79
         radicale_base_url = self._get_base_url()
81
         radicale_base_url = self._get_base_url()
80
         client = caldav.DAVClient(
82
         client = caldav.DAVClient(
81
             radicale_base_url,
83
             radicale_base_url,
96
             ok_(False, 'User can\'t acces other user calendar')
98
             ok_(False, 'User can\'t acces other user calendar')
97
         except AuthorizationError:
99
         except AuthorizationError:
98
             ok_(True, 'User should not acces other user calendar')
100
             ok_(True, 'User should not acces other user calendar')
101
+
102
+    def test_func__rights_read_workspace_calendar__ok__as_owner(self):
103
+        lawrence = DBSession.query(User).filter(
104
+            User.email == 'lawrence-not-real-email@fsf.local'
105
+        ).one()
106
+        workspace = WorkspaceApi(lawrence).create_workspace(
107
+            'workspace_1',
108
+            save_now=False
109
+        )
110
+        workspace.calendar_enabled = True
111
+        DBSession.flush()
112
+
113
+        workspace_calendar_url = self._get_workspace_calendar_url(
114
+            workspace.workspace_id
115
+        )
116
+
117
+        transaction.commit()
118
+
119
+        radicale_base_url = self._get_base_url()
120
+        client = caldav.DAVClient(
121
+            radicale_base_url,
122
+            username='lawrence-not-real-email@fsf.local',
123
+            password='foobarbaz'
124
+        )
125
+        try:
126
+            caldav.Calendar(
127
+                parent=client,
128
+                client=client,
129
+                url=workspace_calendar_url
130
+            ).events()
131
+
132
+            ok_(True, 'User can acces own workspace calendar')
133
+        except AuthorizationError:
134
+            ok_(False, 'User should not acces own workspace calendar')
135
+
136
+    def test_func__rights_read_workspace_calendar__fail__as_unauthorized(self):
137
+        lawrence = DBSession.query(User).filter(
138
+            User.email == 'lawrence-not-real-email@fsf.local'
139
+        ).one()
140
+        workspace = WorkspaceApi(lawrence).create_workspace(
141
+            'workspace_1',
142
+            save_now=False
143
+        )
144
+        workspace.calendar_enabled = True
145
+        DBSession.flush()
146
+
147
+        workspace_calendar_url = self._get_workspace_calendar_url(
148
+            workspace.workspace_id
149
+        )
150
+
151
+        transaction.commit()
152
+
153
+        radicale_base_url = self._get_base_url()
154
+        client = caldav.DAVClient(
155
+            radicale_base_url,
156
+            username='bob@fsf.local',
157
+            password='foobarbaz'
158
+        )
159
+        try:
160
+            caldav.Calendar(
161
+                parent=client,
162
+                client=client,
163
+                url=workspace_calendar_url
164
+            ).events()
165
+
166
+            ok_(False, 'User can\'t access unright workspace calendar')
167
+        except AuthorizationError:
168
+            ok_(True, 'User should not access unright workspace calendar')