Browse Source

add Test for Workspace and User

Guénaël Muller 7 years ago
parent
commit
5b2895ab67

+ 51 - 7
tracim/tests/__init__.py View File

6
 from nose.tools import eq_
6
 from nose.tools import eq_
7
 from tracim.lib.content import ContentApi
7
 from tracim.lib.content import ContentApi
8
 from tracim.lib.workspace import WorkspaceApi
8
 from tracim.lib.workspace import WorkspaceApi
9
-from tracim.models.data import Workspace
9
+from tracim.models.data import Workspace, ContentType
10
 from tracim.models.data import Content
10
 from tracim.models.data import Content
11
 from tracim.logger import logger
11
 from tracim.logger import logger
12
 from tracim.fixtures import FixturesLoader
12
 from tracim.fixtures import FixturesLoader
60
         transaction.abort()
60
         transaction.abort()
61
         DeclarativeBase.metadata.drop_all(self.engine)
61
         DeclarativeBase.metadata.drop_all(self.engine)
62
 
62
 
63
+
63
 class StandardTest(BaseTest):
64
 class StandardTest(BaseTest):
64
     """
65
     """
65
     BaseTest with default fixtures
66
     BaseTest with default fixtures
86
             session=self.session,
87
             session=self.session,
87
         ).create_workspace(name, save_now=True)
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
         All extra parameters (*args, **kwargs) are for Content init
108
         All extra parameters (*args, **kwargs) are for Content init
95
         :return: Created Content instance
109
         :return: Created Content instance
104
             current_user=None,
118
             current_user=None,
105
             session=self.session,
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 View File

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 View File

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())