Browse Source

Merge branch 'fix/few_more_tests' of github.com:tracim/tracim_backend into feature/583_Api_for_generic_content

Guénaël Muller 6 years ago
parent
commit
80dbbd7088

+ 73 - 0
requirements.txt View File

@@ -0,0 +1,73 @@
1
+alembic==0.9.9
2
+atomicwrites==1.1.5
3
+attrs==18.1.0
4
+Babel==2.6.0
5
+beautifulsoup4==4.6.0
6
+certifi==2018.4.16
7
+chardet==3.0.4
8
+click==6.7
9
+cliff==2.12.0
10
+cmd2==0.9.1
11
+colorama==0.3.9
12
+coverage==4.5.1
13
+defusedxml==0.5.0
14
+filedepot==0.5.2
15
+hapic==0.42
16
+hapic-apispec==0.37.0
17
+hupper==1.3
18
+idna==2.7
19
+Jinja2==2.10
20
+jsmin==2.2.2
21
+lxml==4.2.1
22
+Mako==1.0.7
23
+MarkupSafe==1.0
24
+marshmallow==2.15.3
25
+more-itertools==4.2.0
26
+multidict==4.3.1
27
+mypy==0.610
28
+PasteDeploy==1.5.2
29
+pbr==4.0.4
30
+pep8==1.7.1
31
+pkg-resources==0.0.0
32
+plaster==1.0
33
+plaster-pastedeploy==0.5
34
+pluggy==0.6.0
35
+prettytable==0.7.2
36
+psycopg2==2.7.4
37
+py==1.5.3
38
+Pygments==2.2.0
39
+pyparsing==2.2.0
40
+pyperclip==1.6.2
41
+pyramid==1.9.2
42
+pyramid-debugtoolbar==4.4
43
+pyramid-jinja2==2.7
44
+pyramid-mako==1.0.2
45
+pyramid-retry==0.5
46
+pyramid-tm==2.2
47
+pytest==3.6.1
48
+pytest-cov==2.5.1
49
+python-dateutil==2.7.3
50
+python-editor==1.0.3
51
+pytz==2018.4
52
+PyYAML==3.12
53
+redis==2.10.6
54
+repoze.lru==0.7
55
+requests==2.19.1
56
+rq==0.11.0
57
+six==1.11.0
58
+SQLAlchemy==1.2.8
59
+stevedore==1.28.0
60
+transaction==2.2.1
61
+translationstring==1.3
62
+typed-ast==1.1.0
63
+Unidecode==1.0.22
64
+urllib3==1.23
65
+venusian==1.1.0
66
+waitress==1.1.0
67
+wcwidth==0.1.7
68
+WebOb==1.8.2
69
+WebTest==2.0.29
70
+WsgiDAV==2.4.0
71
+zope.deprecation==4.3.0
72
+zope.interface==4.5.0
73
+zope.sqlalchemy==1.0

+ 85 - 88
tracim/lib/utils/request.py View File

@@ -1,11 +1,7 @@
1 1
 # -*- coding: utf-8 -*-
2
-"""
3
-TracimRequest and related functions
4
-"""
5 2
 from pyramid.request import Request
6 3
 from sqlalchemy.orm.exc import NoResultFound
7 4
 
8
-
9 5
 from tracim.exceptions import NotAuthenticated
10 6
 from tracim.exceptions import UserNotFoundInTracimRequest
11 7
 from tracim.exceptions import UserDoesNotExist
@@ -46,7 +42,7 @@ class TracimRequest(Request):
46 42
 
47 43
         # User found from request headers, content, distinct from authenticated
48 44
         # user
49
-        self._user_candidate = None  # type: User
45
+        self._candidate_user = None  # type: User
50 46
 
51 47
         # INFO - G.M - 18-05-2018 - Close db at the end of the request
52 48
         self.add_finished_callback(self._cleanup)
@@ -60,7 +56,7 @@ class TracimRequest(Request):
60 56
         :return: Workspace of the request
61 57
         """
62 58
         if self._current_workspace is None:
63
-            self.current_workspace = get_workspace(self.current_user, self)
59
+            self.current_workspace = self._get_workspace(self.current_user, self)
64 60
         return self._current_workspace
65 61
 
66 62
     @current_workspace.setter
@@ -82,7 +78,7 @@ class TracimRequest(Request):
82 78
         Get user from authentication mecanism.
83 79
         """
84 80
         if self._current_user is None:
85
-            self.current_user = get_auth_safe_user(self)
81
+            self.current_user = self._get_auth_safe_user(self)
86 82
         return self._current_user
87 83
 
88 84
     @current_user.setter
@@ -102,9 +98,9 @@ class TracimRequest(Request):
102 98
         can help user to know about who one page is about in
103 99
         a similar way as current_workspace.
104 100
         """
105
-        if self._user_candidate is None:
106
-            self.candidate_user = get_candidate_user(self)
107
-        return self._user_candidate
101
+        if self._candidate_user is None:
102
+            self.candidate_user = self._get_candidate_user(self)
103
+        return self._candidate_user
108 104
 
109 105
     def _cleanup(self, request: 'TracimRequest') -> None:
110 106
         """
@@ -122,86 +118,87 @@ class TracimRequest(Request):
122 118
 
123 119
     @candidate_user.setter
124 120
     def candidate_user(self, user: User) -> None:
125
-        if self._user_candidate is not None:
121
+        if self._candidate_user is not None:
126 122
             raise ImmutableAttribute(
127 123
                 "Can't modify already setted candidate_user"
128 124
             )
129
-        self._user_candidate = user
130
-###
131
-# Utils for TracimRequest
132
-###
125
+        self._candidate_user = user
133 126
 
127
+    ###
128
+    # Utils for TracimRequest
129
+    ###
134 130
 
135
-def get_candidate_user(
136
-        request: TracimRequest
137
-) -> User:
138
-    """
139
-    Get candidate user
140
-    :param request: pyramid request
141
-    :return: user found from header/body
142
-    """
143
-    app_config = request.registry.settings['CFG']
144
-    uapi = UserApi(None, session=request.dbsession, config=app_config)
145
-
146
-    try:
147
-        login = None
148
-        if 'user_id' in request.matchdict:
149
-            login = request.matchdict['user_id']
150
-        if not login:
151
-            raise UserNotFoundInTracimRequest('You request a candidate user but the context not permit to found one')  # nopep8
152
-        user = uapi.get_one(login)
153
-    except UserNotFoundInTracimRequest as exc:
154
-        raise UserDoesNotExist('User {} not found'.format(login)) from exc
155
-    return user
156
-
157
-
158
-def get_auth_safe_user(
159
-        request: TracimRequest,
160
-) -> User:
161
-    """
162
-    Get current pyramid authenticated user from request
163
-    :param request: pyramid request
164
-    :return: current authenticated user
165
-    """
166
-    app_config = request.registry.settings['CFG']
167
-    uapi = UserApi(None, session=request.dbsession, config=app_config)
168
-    try:
169
-        login = request.authenticated_userid
170
-        if not login:
171
-            raise UserNotFoundInTracimRequest('You request a current user but the context not permit to found one')  # nopep8
172
-        user = uapi.get_one_by_email(login)
173
-    except (UserDoesNotExist, UserNotFoundInTracimRequest) as exc:
174
-        raise NotAuthenticated('User {} not found'.format(login)) from exc
175
-    return user
176
-
177
-
178
-def get_workspace(
179
-        user: User,
180
-        request: TracimRequest
181
-) -> Workspace:
182
-    """
183
-    Get current workspace from request
184
-    :param user: User who want to check the workspace
185
-    :param request: pyramid request
186
-    :return: current workspace
187
-    """
188
-    workspace_id = ''
189
-    try:
190
-        if 'workspace_id' in request.matchdict:
191
-            workspace_id = request.matchdict['workspace_id']
192
-        if not workspace_id:
193
-            raise WorkspaceNotFound('No workspace_id property found in request')
194
-        wapi = WorkspaceApi(
195
-            current_user=user,
196
-            session=request.dbsession,
197
-            config=request.registry.settings['CFG']
198
-        )
199
-        workspace = wapi.get_one(workspace_id)
200
-    except JSONDecodeError:
201
-        raise WorkspaceNotFound('Bad json body')
202
-    except NoResultFound:
203
-        raise WorkspaceNotFound(
204
-            'Workspace {} does not exist '
205
-            'or is not visible for this user'.format(workspace_id)
206
-        )
207
-    return workspace
131
+    def _get_candidate_user(
132
+            self,
133
+            request: 'TracimRequest',
134
+    ) -> User:
135
+        """
136
+        Get candidate user
137
+        :param request: pyramid request
138
+        :return: user found from header/body
139
+        """
140
+        app_config = request.registry.settings['CFG']
141
+        uapi = UserApi(None, session=request.dbsession, config=app_config)
142
+
143
+        try:
144
+            login = None
145
+            if 'user_id' in request.matchdict:
146
+                login = request.matchdict['user_id']
147
+            if not login:
148
+                raise UserNotFoundInTracimRequest('You request a candidate user but the context not permit to found one')  # nopep8
149
+            user = uapi.get_one(login)
150
+        except UserNotFoundInTracimRequest as exc:
151
+            raise UserDoesNotExist('User {} not found'.format(login)) from exc
152
+        return user
153
+
154
+    def _get_auth_safe_user(
155
+            self,
156
+            request: 'TracimRequest',
157
+    ) -> User:
158
+        """
159
+        Get current pyramid authenticated user from request
160
+        :param request: pyramid request
161
+        :return: current authenticated user
162
+        """
163
+        app_config = request.registry.settings['CFG']
164
+        uapi = UserApi(None, session=request.dbsession, config=app_config)
165
+        try:
166
+            login = request.authenticated_userid
167
+            if not login:
168
+                raise UserNotFoundInTracimRequest('You request a current user but the context not permit to found one')  # nopep8
169
+            user = uapi.get_one_by_email(login)
170
+        except (UserDoesNotExist, UserNotFoundInTracimRequest) as exc:
171
+            raise NotAuthenticated('User {} not found'.format(login)) from exc
172
+        return user
173
+
174
+    def _get_workspace(
175
+            self,
176
+            user: User,
177
+            request: 'TracimRequest'
178
+    ) -> Workspace:
179
+        """
180
+        Get current workspace from request
181
+        :param user: User who want to check the workspace
182
+        :param request: pyramid request
183
+        :return: current workspace
184
+        """
185
+        workspace_id = ''
186
+        try:
187
+            if 'workspace_id' in request.matchdict:
188
+                workspace_id = request.matchdict['workspace_id']
189
+            if not workspace_id:
190
+                raise WorkspaceNotFound('No workspace_id property found in request')
191
+            wapi = WorkspaceApi(
192
+                current_user=user,
193
+                session=request.dbsession,
194
+                config=request.registry.settings['CFG']
195
+            )
196
+            workspace = wapi.get_one(workspace_id)
197
+        except JSONDecodeError:
198
+            raise WorkspaceNotFound('Bad json body')
199
+        except NoResultFound:
200
+            raise WorkspaceNotFound(
201
+                'Workspace {} does not exist '
202
+                'or is not visible for this user'.format(workspace_id)
203
+            )
204
+        return workspace

+ 4 - 4
tracim/models/data.py View File

@@ -130,13 +130,12 @@ class UserRoleInWorkspace(DeclarativeBase):
130 130
     CONTENT_MANAGER = 4
131 131
     WORKSPACE_MANAGER = 8
132 132
 
133
-    # TODO - G.M - 10-04-2018 - [Cleanup] Drop this
134 133
     SLUG = {
135
-        NOT_APPLICABLE: 'not_applicable',
134
+        NOT_APPLICABLE: 'not-applicable',
136 135
         READER: 'reader',
137 136
         CONTRIBUTOR: 'contributor',
138
-        CONTENT_MANAGER: 'content_manager',
139
-        WORKSPACE_MANAGER: 'workspace_manager',
137
+        CONTENT_MANAGER: 'content-manager',
138
+        WORKSPACE_MANAGER: 'workspace-manager',
140 139
     }
141 140
 
142 141
     LABEL = dict()
@@ -145,6 +144,7 @@ class UserRoleInWorkspace(DeclarativeBase):
145 144
     LABEL[2] = l_('Contributor')
146 145
     LABEL[4] = l_('Content Manager')
147 146
     LABEL[8] = l_('Workspace Manager')
147
+    # TODO - G.M - 10-04-2018 - [Cleanup] Drop this
148 148
     #
149 149
     # STYLE = dict()
150 150
     # STYLE[0] = ''

+ 3 - 3
tracim/tests/functional/test_system.py View File

@@ -1,11 +1,11 @@
1 1
 # coding=utf-8
2
+from tracim.tests import FunctionalTest
3
+
2 4
 """
3 5
 Tests for /api/v2/system subpath endpoints.
4 6
 """
5
-from tracim.tests import FunctionalTest
6
-
7 7
 
8
-class TestApplicationsEndpoint(FunctionalTest):
8
+class TestApplicationEndpoint(FunctionalTest):
9 9
     """
10 10
     Tests for /api/v2/system/applications
11 11
     """

+ 1 - 1
tracim/tests/functional/test_workspaces.py View File

@@ -155,7 +155,7 @@ class TestWorkspaceMembersEndpoint(FunctionalTest):
155 155
         res = self.testapp.get('/api/v2/workspaces/1/members', status=200).json_body   # nopep8
156 156
         assert len(res) == 1
157 157
         user_role = res[0]
158
-        assert user_role['role_slug'] == 'workspace_manager'
158
+        assert user_role['role_slug'] == 'workspace-manager'
159 159
         assert user_role['user_id'] == 1
160 160
         assert user_role['workspace_id'] == 1
161 161
         assert user_role['user']['display_name'] == 'Global manager'