Ver código fonte

add Test for Workspace and User

Guénaël Muller 7 anos atrás
pai
commit
5b2895ab67

+ 51 - 7
tracim/tests/__init__.py Ver arquivo

@@ -6,7 +6,7 @@ from pyramid import testing
6 6
 from nose.tools import eq_
7 7
 from tracim.lib.content import ContentApi
8 8
 from tracim.lib.workspace import WorkspaceApi
9
-from tracim.models.data import Workspace
9
+from tracim.models.data import Workspace, ContentType
10 10
 from tracim.models.data import Content
11 11
 from tracim.logger import logger
12 12
 from tracim.fixtures import FixturesLoader
@@ -60,6 +60,7 @@ class BaseTest(unittest.TestCase):
60 60
         transaction.abort()
61 61
         DeclarativeBase.metadata.drop_all(self.engine)
62 62
 
63
+
63 64
 class StandardTest(BaseTest):
64 65
     """
65 66
     BaseTest with default fixtures
@@ -86,10 +87,23 @@ class DefaultTest(StandardTest):
86 87
             session=self.session,
87 88
         ).create_workspace(name, save_now=True)
88 89
 
89
-        eq_(1, self.session.query(Workspace).filter(Workspace.label == name).count())
90
-        return self.session.query(Workspace).filter(Workspace.label == name).one()
91
-
92
-    def _create_content_and_test(self, name, workspace, *args, **kwargs) -> Content:
90
+        eq_(
91
+            1,
92
+            self.session.query(Workspace).filter(
93
+                Workspace.label == name
94
+            ).count()
95
+        )
96
+        return self.session.query(Workspace).filter(
97
+            Workspace.label == name
98
+        ).one()
99
+
100
+    def _create_content_and_test(
101
+            self,
102
+            name,
103
+            workspace,
104
+            *args,
105
+            **kwargs
106
+    ) -> Content:
93 107
         """
94 108
         All extra parameters (*args, **kwargs) are for Content init
95 109
         :return: Created Content instance
@@ -104,5 +118,35 @@ class DefaultTest(StandardTest):
104 118
             current_user=None,
105 119
             session=self.session,
106 120
         )
107
-        eq_(1, content_api.get_canonical_query().filter(Content.label == name).count())
108
-        return content_api.get_canonical_query().filter(Content.label == name).one()
121
+        eq_(
122
+            1,
123
+            content_api.get_canonical_query().filter(
124
+                Content.label == name
125
+            ).count()
126
+        )
127
+        return content_api.get_canonical_query().filter(
128
+            Content.label == name
129
+        ).one()
130
+
131
+    def _create_thread_and_test(self,
132
+                                user,
133
+                                workspace_name='workspace_1',
134
+                                folder_name='folder_1',
135
+                                thread_name='thread_1') -> Content:
136
+        """
137
+        :return: Thread
138
+        """
139
+        workspace = self._create_workspace_and_test(workspace_name, user)
140
+        folder = self._create_content_and_test(
141
+            folder_name, workspace,
142
+            type=ContentType.Folder,
143
+            owner=user
144
+        )
145
+        thread = self._create_content_and_test(
146
+            thread_name,
147
+            workspace,
148
+            type=ContentType.Thread,
149
+            parent=folder,
150
+            owner=user
151
+        )
152
+        return thread

+ 88 - 0
tracim/tests/library/test_user_api.py Ver arquivo

@@ -0,0 +1,88 @@
1
+# -*- coding: utf-8 -*-
2
+
3
+from nose.tools import eq_
4
+from nose.tools import ok_
5
+from nose.tools import raises
6
+
7
+from sqlalchemy.orm.exc import NoResultFound
8
+
9
+import transaction
10
+
11
+from tracim.lib.user import UserApi
12
+from tracim.tests import DefaultTest
13
+
14
+
15
+class TestUserApi(DefaultTest):
16
+
17
+    def test_create_and_update_user(self):
18
+        api = UserApi(
19
+            current_user=None,
20
+            session=self.session,
21
+            config=self.config,
22
+        )
23
+        u = api.create_user()
24
+        api.update(u, 'bob', 'bob@bob', True)
25
+
26
+        nu = api.get_one_by_email('bob@bob')
27
+        ok_(nu != None)
28
+        eq_('bob@bob', nu.email)
29
+        eq_('bob', nu.display_name)
30
+
31
+    def test_user_with_email_exists(self):
32
+        api = UserApi(
33
+            current_user=None,
34
+            session=self.session,
35
+            config=self.config,
36
+        )
37
+        u = api.create_user()
38
+        api.update(u, 'bibi', 'bibi@bibi', True)
39
+        transaction.commit()
40
+
41
+        eq_(True, api.user_with_email_exists('bibi@bibi'))
42
+        eq_(False, api.user_with_email_exists('unknown'))
43
+
44
+    def test_get_one_by_email(self):
45
+        api = UserApi(
46
+            current_user=None,
47
+            session=self.session,
48
+            config=self.config,
49
+        )
50
+        u = api.create_user()
51
+        api.update(u, 'bibi', 'bibi@bibi', True)
52
+        uid = u.user_id
53
+        transaction.commit()
54
+
55
+        eq_(uid, api.get_one_by_email('bibi@bibi').user_id)
56
+
57
+    @raises(NoResultFound)
58
+    def test_get_one_by_email_exception(self):
59
+        api = UserApi(
60
+            current_user=None,
61
+            session=self.session,
62
+            config=self.config,
63
+        )
64
+        api.get_one_by_email('unknown')
65
+
66
+    def test_get_all(self):
67
+        # TODO - G.M - 29-03-2018 Check why this method is not enabled
68
+        api = UserApi(
69
+            current_user=None,
70
+            session=self.session,
71
+            config=self.config,
72
+        )
73
+        # u1 = api.create_user(True)
74
+        # u2 = api.create_user(True)
75
+
76
+        # users = api.get_all()
77
+        # ok_(2==len(users))
78
+
79
+    def test_get_one(self):
80
+        api = UserApi(
81
+            current_user=None,
82
+            session=self.session,
83
+            config=self.config,
84
+        )
85
+        u = api.create_user()
86
+        api.update(u, 'titi', 'titi@titi', True)
87
+        one = api.get_one(u.user_id)
88
+        eq_(u.user_id, one.user_id)

+ 109 - 0
tracim/tests/library/test_workspace.py Ver arquivo

@@ -0,0 +1,109 @@
1
+# -*- coding: utf-8 -*-
2
+from nose.tools import eq_
3
+
4
+from tracim.lib.content import ContentApi
5
+from tracim.lib.group import GroupApi
6
+from tracim.lib.user import UserApi
7
+from tracim.lib.userworkspace import RoleApi
8
+from tracim.lib.workspace import WorkspaceApi
9
+from tracim.models import Content
10
+from tracim.models import User
11
+from tracim.models.auth import Group
12
+from tracim.models.data import UserRoleInWorkspace
13
+from tracim.models.data import Workspace
14
+#from tracim.tests import BaseTestThread
15
+from tracim.tests import DefaultTest
16
+
17
+
18
+class TestThread(DefaultTest):
19
+
20
+    def test_children(self):
21
+        admin = self.session.query(User).filter(
22
+            User.email == 'admin@admin.admin'
23
+        ).one()
24
+        self._create_thread_and_test(
25
+            workspace_name='workspace_1',
26
+            folder_name='folder_1',
27
+            thread_name='thread_1',
28
+            user=admin
29
+        )
30
+        workspace = self.session.query(Workspace).filter(
31
+            Workspace.label == 'workspace_1'
32
+        ).one()
33
+        content_api = ContentApi(
34
+            session=self.session,
35
+            current_user=admin,
36
+        )
37
+        folder = content_api.get_canonical_query().filter(
38
+            Content.label == 'folder_1'
39
+        ).one()
40
+        eq_([folder, ], list(workspace.get_valid_children()))
41
+
42
+    def test_get_notifiable_roles(self):
43
+        admin = self.session.query(User) \
44
+            .filter(User.email == 'admin@admin.admin').one()
45
+        wapi = WorkspaceApi(
46
+            session=self.session,
47
+            current_user=admin,
48
+        )
49
+        w = wapi.create_workspace(label='workspace w', save_now=True)
50
+        uapi = UserApi(
51
+            session=self.session,
52
+            current_user=admin,
53
+            config=self.config
54
+        )
55
+        u = uapi.create_user(email='u.u@u.u', save_now=True)
56
+        eq_([], wapi.get_notifiable_roles(workspace=w))
57
+        rapi = RoleApi(
58
+            session=self.session,
59
+            current_user=admin,
60
+        )
61
+        r = rapi.create_one(u, w, UserRoleInWorkspace.READER, with_notif=True)
62
+        eq_([r, ], wapi.get_notifiable_roles(workspace=w))
63
+        u.is_active = False
64
+        eq_([], wapi.get_notifiable_roles(workspace=w))
65
+
66
+    def test_unit__get_all_manageable(self):
67
+        admin = self.session.query(User) \
68
+            .filter(User.email == 'admin@admin.admin').one()
69
+        uapi = UserApi(
70
+            session=self.session,
71
+            current_user=admin,
72
+            config=self.config,
73
+        )
74
+        # Checks a case without workspaces.
75
+        wapi = WorkspaceApi(
76
+            session=self.session,
77
+            current_user=admin,
78
+        )
79
+        eq_([], wapi.get_all_manageable())
80
+        # Checks an admin gets all workspaces.
81
+        w4 = wapi.create_workspace(label='w4')
82
+        w3 = wapi.create_workspace(label='w3')
83
+        w2 = wapi.create_workspace(label='w2')
84
+        w1 = wapi.create_workspace(label='w1')
85
+        eq_([w1, w2, w3, w4], wapi.get_all_manageable())
86
+        # Checks a regular user gets none workspace.
87
+        gapi = GroupApi(
88
+            session=self.session,
89
+            current_user=None,
90
+        )
91
+        u = uapi.create_user('u.s@e.r', [gapi.get_one(Group.TIM_USER)], True)
92
+        wapi = WorkspaceApi(
93
+            session=self.session,
94
+            current_user=u
95
+        )
96
+        rapi = RoleApi(
97
+            session=self.session,
98
+            current_user=u
99
+        )
100
+        rapi.create_one(u, w4, UserRoleInWorkspace.READER, False)
101
+        rapi.create_one(u, w3, UserRoleInWorkspace.CONTRIBUTOR, False)
102
+        rapi.create_one(u, w2, UserRoleInWorkspace.CONTENT_MANAGER, False)
103
+        rapi.create_one(u, w1, UserRoleInWorkspace.WORKSPACE_MANAGER, False)
104
+        eq_([], wapi.get_all_manageable())
105
+        # Checks a manager gets only its own workspaces.
106
+        u.groups.append(gapi.get_one(Group.TIM_MANAGER))
107
+        rapi.delete_one(u.user_id, w2.workspace_id)
108
+        rapi.create_one(u, w2, UserRoleInWorkspace.WORKSPACE_MANAGER, False)
109
+        eq_([w1, w2], wapi.get_all_manageable())