Browse Source

#185 Unit test for workspaces ; moved ContentController to content.py ; replaced double quotes with single quotes

Alexis CLEMENT 8 years ago
parent
commit
0077373232

+ 31 - 2
tracim/tracim/controllers/content.py View File

6
 
6
 
7
 from cgi import FieldStorage
7
 from cgi import FieldStorage
8
 import tg
8
 import tg
9
-from tg import tmpl_context
9
+from tg import tmpl_context, require, predicates
10
 from tg.i18n import ugettext as _
10
 from tg.i18n import ugettext as _
11
 from tg.predicates import not_anonymous
11
 from tg.predicates import not_anonymous
12
 from sqlalchemy.orm.exc import NoResultFound
12
 from sqlalchemy.orm.exc import NoResultFound
13
 from tg import abort
13
 from tg import abort
14
 
14
 
15
-from tracim.controllers import TIMRestController
15
+from tracim.controllers import TIMRestController, StandardController
16
 from tracim.controllers import TIMRestPathContextSetup
16
 from tracim.controllers import TIMRestPathContextSetup
17
 from tracim.controllers import TIMRestControllerWithBreadcrumb
17
 from tracim.controllers import TIMRestControllerWithBreadcrumb
18
 from tracim.controllers import TIMWorkspaceContentRestController
18
 from tracim.controllers import TIMWorkspaceContentRestController
1074
             msg = _('{} not un-deleted: {}').format(self._item_type_label, str(e))
1074
             msg = _('{} not un-deleted: {}').format(self._item_type_label, str(e))
1075
             tg.flash(msg, CST.STATUS_ERROR)
1075
             tg.flash(msg, CST.STATUS_ERROR)
1076
             tg.redirect(back_url)
1076
             tg.redirect(back_url)
1077
+
1078
+
1079
+class ContentController(StandardController):
1080
+
1081
+    '''
1082
+    Class of controllers used for example in home to mark read the unread 
1083
+    contents via mark_all_read()
1084
+    '''
1085
+
1086
+    @classmethod
1087
+    def current_item_id_key_in_context(cls) -> str:
1088
+        return''
1089
+
1090
+    @tg.expose()
1091
+    def index(self):
1092
+        return dict()
1093
+
1094
+    @require(predicates.not_anonymous())
1095
+    @tg.expose()
1096
+    def mark_all_read(self):
1097
+        '''
1098
+        Mark as read all the content that hasn't been read
1099
+        redirects the user to "/home"
1100
+        '''
1101
+        user = tg.tmpl_context.current_user
1102
+        content_api = ContentApi(user)
1103
+        content_api.mark_read__all()
1104
+
1105
+        tg.redirect("/home")

+ 0 - 28
tracim/tracim/controllers/read.py View File

1
-# -*- coding: utf-8 -*-
2
-import tg
3
-from tg import require, predicates
4
-from tracim.controllers import StandardController
5
-from tracim.lib.content import ContentApi
6
-from tracim.model.data import ContentType
7
-
8
-
9
-class ContentController(StandardController):
10
-
11
-    @classmethod
12
-    def current_item_id_key_in_context(cls) -> str:
13
-        return''
14
-
15
-    @tg.expose()
16
-    def index(self):
17
-        return dict()
18
-
19
-    @require(predicates.not_anonymous())
20
-    @tg.expose()
21
-    def mark_all_read(self):
22
-        user = tg.tmpl_context.current_user
23
-        content_api = ContentApi(user)
24
-        content_api.mark_read__all()
25
-
26
-        tg.redirect("/home")
27
-
28
-

+ 1 - 1
tracim/tracim/controllers/root.py View File

12
 
12
 
13
 from tg.i18n import ugettext as _
13
 from tg.i18n import ugettext as _
14
 from tracim.controllers.api import APIController
14
 from tracim.controllers.api import APIController
15
-from tracim.controllers.read import ContentController
15
+from tracim.controllers.content import ContentController
16
 
16
 
17
 from tracim.lib import CST
17
 from tracim.lib import CST
18
 from tracim.lib.base import logger
18
 from tracim.lib.base import logger

+ 0 - 1
tracim/tracim/controllers/workspace.py View File

9
 
9
 
10
 from tracim.controllers import TIMRestController
10
 from tracim.controllers import TIMRestController
11
 from tracim.controllers.content import UserWorkspaceFolderRestController
11
 from tracim.controllers.content import UserWorkspaceFolderRestController
12
-from tracim.controllers.read import ContentController
13
 
12
 
14
 from tracim.lib.helpers import convert_id_into_instances
13
 from tracim.lib.helpers import convert_id_into_instances
15
 from tracim.lib.content import ContentApi
14
 from tracim.lib.content import ContentApi

+ 79 - 4
tracim/tracim/tests/library/test_content_api.py View File

348
         eq_(ActionDescription.COMMENT, c.revision_type)
348
         eq_(ActionDescription.COMMENT, c.revision_type)
349
 
349
 
350
 
350
 
351
+    def test_mark_read__workspace(self):
352
+        uapi = UserApi(None)
353
+        groups = [GroupApi(None).get_one(Group.TIM_USER),
354
+                  GroupApi(None).get_one(Group.TIM_MANAGER),
355
+                  GroupApi(None).get_one(Group.TIM_ADMIN)]
356
+        user_a = uapi.create_user(email='this.is@user',
357
+                                  groups=groups, save_now=True)
358
+        user_b = uapi.create_user(email='this.is@another.user',
359
+                                  groups=groups, save_now=True)
360
+
361
+        wapi = WorkspaceApi(user_a)
362
+        workspace1 = wapi.create_workspace(
363
+            'test workspace n°1',
364
+            save_now=True)
365
+        workspace2 = wapi.create_workspace(
366
+            'test workspace n°2',
367
+            save_now=True)
368
+
369
+        role_api1 = RoleApi(user_a)
370
+        role_api1.create_one(user_b, workspace1, UserRoleInWorkspace.READER,
371
+                            False)
372
+
373
+        role_api2 = RoleApi(user_a)
374
+        role_api2.create_one(user_b, workspace2, UserRoleInWorkspace.READER,
375
+                             False)
376
+
377
+        cont_api_a = ContentApi(user_a)
378
+        cont_api_b = ContentApi(user_b)
379
+
380
+
381
+        # Creates page_1 & page_2 in workspace 1
382
+        #     and page_3 & page_4 in workspace 2
383
+        page_1 = cont_api_a.create(ContentType.Page, workspace1, None,
384
+                                   'this is a page', do_save=True)
385
+        page_2 = cont_api_a.create(ContentType.Page, workspace1, None,
386
+                                   'this is page1', do_save=True)
387
+        page_3 = cont_api_a.create(ContentType.Thread, workspace2, None,
388
+                                   'this is page2', do_save=True)
389
+        page_4 = cont_api_a.create(ContentType.File, workspace2, None,
390
+                                   'this is page3', do_save=True)
391
+
392
+        for rev in page_1.revisions:
393
+            eq_(user_b not in rev.read_by.keys(), True)
394
+        for rev in page_2.revisions:
395
+            eq_(user_b not in rev.read_by.keys(), True)
396
+        for rev in page_3.revisions:
397
+            eq_(user_b not in rev.read_by.keys(), True)
398
+        for rev in page_4.revisions:
399
+            eq_(user_b not in rev.read_by.keys(), True)
400
+
401
+        # Set as read the workspace n°1
402
+        cont_api_b.mark_read__workspace(workspace=workspace1)
403
+
404
+        for rev in page_1.revisions:
405
+            eq_(user_b in rev.read_by.keys(), True)
406
+        for rev in page_2.revisions:
407
+            eq_(user_b in rev.read_by.keys(), True)
408
+        for rev in page_3.revisions:
409
+            eq_(user_b not in rev.read_by.keys(), True)
410
+        for rev in page_4.revisions:
411
+            eq_(user_b not in rev.read_by.keys(), True)
412
+
413
+        # Set as read the workspace n°2
414
+        cont_api_b.mark_read__workspace(workspace=workspace2)
415
+
416
+        for rev in page_1.revisions:
417
+            eq_(user_b in rev.read_by.keys(), True)
418
+        for rev in page_2.revisions:
419
+            eq_(user_b in rev.read_by.keys(), True)
420
+        for rev in page_3.revisions:
421
+            eq_(user_b in rev.read_by.keys(), True)
422
+        for rev in page_4.revisions:
423
+            eq_(user_b in rev.read_by.keys(), True)
424
+
351
     def test_mark_read(self):
425
     def test_mark_read(self):
352
         uapi = UserApi(None)
426
         uapi = UserApi(None)
353
         groups = [GroupApi(None).get_one(Group.TIM_USER),
427
         groups = [GroupApi(None).get_one(Group.TIM_USER),
368
         cont_api_a = ContentApi(user_a)
442
         cont_api_a = ContentApi(user_a)
369
         cont_api_b = ContentApi(user_b)
443
         cont_api_b = ContentApi(user_b)
370
 
444
 
371
-        page_1 = cont_api_a.create(ContentType.Page, workspace, None, "this is a page", do_save=True)
445
+        page_1 = cont_api_a.create(ContentType.Page, workspace, None,
446
+                                   'this is a page', do_save=True)
372
 
447
 
373
         for rev in page_1.revisions:
448
         for rev in page_1.revisions:
374
             eq_(user_b not in rev.read_by.keys(), True)
449
             eq_(user_b not in rev.read_by.keys(), True)
399
         cont_api_a = ContentApi(user_a)
474
         cont_api_a = ContentApi(user_a)
400
         cont_api_b = ContentApi(user_b)
475
         cont_api_b = ContentApi(user_b)
401
 
476
 
402
-        page_2 = cont_api_a.create(ContentType.Page, workspace, None, "this is page1", do_save=True)
403
-        page_3 = cont_api_a.create(ContentType.Thread, workspace, None, "this is page2", do_save=True)
404
-        page_4 = cont_api_a.create(ContentType.File, workspace, None, "this is page3", do_save=True)
477
+        page_2 = cont_api_a.create(ContentType.Page, workspace, None, 'this is page1', do_save=True)
478
+        page_3 = cont_api_a.create(ContentType.Thread, workspace, None, 'this is page2', do_save=True)
479
+        page_4 = cont_api_a.create(ContentType.File, workspace, None, 'this is page3', do_save=True)
405
 
480
 
406
         for rev in page_2.revisions:
481
         for rev in page_2.revisions:
407
             eq_(user_b not in rev.read_by.keys(), True)
482
             eq_(user_b not in rev.read_by.keys(), True)