Browse Source

Better session api spec (return 204)

Guénaël Muller 6 years ago
parent
commit
cf1b40a41a

+ 5 - 5
tracim/tests/functional/test_session.py View File

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

+ 2 - 2
tracim/views/core_api/schemas.py View File

@@ -38,5 +38,5 @@ class LoginOutputHeaders(marshmallow.Schema):
38 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 View File

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