浏览代码

Better session api spec (return 204)

Guénaël Muller 7 年前
父节点
当前提交
cf1b40a41a

+ 5 - 5
tracim/tests/functional/test_session.py 查看文件

1
 # coding=utf-8
1
 # coding=utf-8
2
+import pytest
3
+
2
 from tracim.tests import FunctionalTest
4
 from tracim.tests import FunctionalTest
3
 
5
 
4
 
6
 
5
 class TestLogoutEndpoint(FunctionalTest):
7
 class TestLogoutEndpoint(FunctionalTest):
6
 
8
 
7
     def test_logout(self):
9
     def test_logout(self):
8
-        res = self.testapp.get('/api/v2/sessions/logout', status=200)
9
-        assert res.json_body == {'message': 'ok'}
10
+        res = self.testapp.get('/api/v2/sessions/logout', status=204)
10
 
11
 
11
 
12
 
12
 class TestLoginEndpoint(FunctionalTest):
13
 class TestLoginEndpoint(FunctionalTest):
18
         }
19
         }
19
         res = self.testapp.get(
20
         res = self.testapp.get(
20
             '/api/v2/sessions/login',
21
             '/api/v2/sessions/login',
21
-            status=200,
22
+            status=204,
22
             params=params
23
             params=params
23
         )
24
         )
24
-        assert res.json_body == {'message': 'ok'}
25
 
25
 
26
     def test_bad_password(self):
26
     def test_bad_password(self):
27
         params = {
27
         params = {
51
 
51
 
52
 class TestWhoamiEndpoint(FunctionalTest):
52
 class TestWhoamiEndpoint(FunctionalTest):
53
 
53
 
54
-    def test_login_ok(self):
54
+    def test_whoami_ok(self):
55
         self.testapp.authorization = (
55
         self.testapp.authorization = (
56
             'Basic',
56
             'Basic',
57
             (
57
             (

+ 2 - 2
tracim/views/core_api/schemas.py 查看文件

38
     expire_after = marshmallow.fields.String()
38
     expire_after = marshmallow.fields.String()
39
 
39
 
40
 
40
 
41
-class OkResponse(marshmallow.Schema):
42
-    message = marshmallow.fields.String(required=True)
41
+class NoContentSchema(marshmallow.Schema):
42
+    pass

+ 16 - 9
tracim/views/core_api/session_controller.py 查看文件

1
 # coding=utf-8
1
 # coding=utf-8
2
 import os
2
 import os
3
+from http.client import HTTPException
4
+
5
+from pyramid.httpexceptions import HTTPNoContent
6
+from pyramid.response import Response
3
 from sqlalchemy.orm.exc import NoResultFound
7
 from sqlalchemy.orm.exc import NoResultFound
4
 
8
 
5
 from tracim import TracimRequest
9
 from tracim import TracimRequest
9
 from pyramid.config import Configurator
13
 from pyramid.config import Configurator
10
 
14
 
11
 from tracim.views import BASE_API_V2
15
 from tracim.views import BASE_API_V2
12
-from tracim.views.core_api.schemas import UserSchema, OkResponse
16
+from tracim.views.core_api.schemas import UserSchema, NoContentSchema
13
 from tracim.views.core_api.schemas import LoginOutputHeaders
17
 from tracim.views.core_api.schemas import LoginOutputHeaders
14
 from tracim.views.core_api.schemas import BasicAuthSchema
18
 from tracim.views.core_api.schemas import BasicAuthSchema
15
 from tracim.exceptions import NotAuthentificated, LoginFailed
19
 from tracim.exceptions import NotAuthentificated, LoginFailed
28
     @hapic.handle_exception(LoginFailed, http_code=HTTPStatus.BAD_REQUEST)
32
     @hapic.handle_exception(LoginFailed, http_code=HTTPStatus.BAD_REQUEST)
29
     # TODO - G.M - 17-04-2018 - fix output header ?
33
     # TODO - G.M - 17-04-2018 - fix output header ?
30
     # @hapic.output_headers()
34
     # @hapic.output_headers()
31
-    @hapic.output_body(OkResponse())
35
+    @hapic.output_body(
36
+        NoContentSchema(),
37
+        default_http_code=HTTPStatus.NO_CONTENT
38
+    )
32
     def login(self, context, request: TracimRequest, hapic_data=None):
39
     def login(self, context, request: TracimRequest, hapic_data=None):
33
         """
40
         """
34
         Logs user into the system
41
         Logs user into the system
52
         except NoResultFound:
59
         except NoResultFound:
53
             # User does not exist
60
             # User does not exist
54
             raise LoginFailed('Bad Credentials')
61
             raise LoginFailed('Bad Credentials')
55
-        return {'message': 'ok'}
62
+        return
56
 
63
 
57
     @hapic.with_api_doc()
64
     @hapic.with_api_doc()
58
-    @hapic.output_body(OkResponse())
65
+    @hapic.output_body(
66
+        NoContentSchema(),
67
+        default_http_code=HTTPStatus.NO_CONTENT
68
+    )
59
     def logout(self, context, request: TracimRequest, hapic_data=None):
69
     def logout(self, context, request: TracimRequest, hapic_data=None):
60
         """
70
         """
61
         Logs out current logged in user session
71
         Logs out current logged in user session
62
         """
72
         """
63
-        return {'message': 'ok'}
73
+
74
+        return
64
 
75
 
65
     @hapic.with_api_doc()
76
     @hapic.with_api_doc()
66
     @hapic.handle_exception(
77
     @hapic.handle_exception(
69
     )
80
     )
70
     @hapic.output_body(
81
     @hapic.output_body(
71
         UserSchema(),
82
         UserSchema(),
72
-        default_http_code=HTTPStatus.OK,
73
     )
83
     )
74
     def whoami(self, context, request: TracimRequest, hapic_data=None):
84
     def whoami(self, context, request: TracimRequest, hapic_data=None):
75
         """
85
         """
88
         configurator.add_view(
98
         configurator.add_view(
89
             self.login,
99
             self.login,
90
             route_name='login',
100
             route_name='login',
91
-            renderer='json'
92
         )
101
         )
93
         # Logout
102
         # Logout
94
         configurator.add_route(
103
         configurator.add_route(
100
         configurator.add_view(
109
         configurator.add_view(
101
             self.logout,
110
             self.logout,
102
             route_name='logout',
111
             route_name='logout',
103
-            renderer='json'
104
         )
112
         )
105
         # Whoami
113
         # Whoami
106
         configurator.add_route(
114
         configurator.add_route(
111
         configurator.add_view(
119
         configurator.add_view(
112
             self.whoami,
120
             self.whoami,
113
             route_name='whoami',
121
             route_name='whoami',
114
-            renderer='json'
115
         )
122
         )