|
| 1 | +try: |
| 2 | + import uasyncio as asyncio |
| 3 | +except ImportError: |
| 4 | + import asyncio |
1 | 5 | import unittest |
2 | 6 | from microdot import Microdot |
| 7 | +from microdot_asyncio import Microdot as MicrodotAsync |
3 | 8 | from microdot_session import set_session_secret_key, get_session, \ |
4 | 9 | update_session, delete_session, with_session |
5 | 10 | from microdot_test_client import TestClient |
| 11 | +from microdot_asyncio_test_client import TestClient as TestClientAsync |
6 | 12 |
|
7 | 13 | set_session_secret_key('top-secret!') |
8 | 14 |
|
9 | 15 |
|
10 | 16 | class TestSession(unittest.TestCase): |
11 | | - def setUp(self): |
12 | | - self.app = Microdot() |
13 | | - self.client = TestClient(self.app) |
14 | | - |
15 | | - def tearDown(self): |
16 | | - pass |
17 | | - |
18 | 17 | def test_session(self): |
19 | | - @self.app.get('/') |
| 18 | + app = Microdot() |
| 19 | + client = TestClient(app) |
| 20 | + |
| 21 | + @app.get('/') |
20 | 22 | def index(req): |
21 | 23 | session = get_session(req) |
22 | 24 | session2 = get_session(req) |
23 | 25 | session2['foo'] = 'bar' |
24 | 26 | self.assertEqual(session['foo'], 'bar') |
25 | 27 | return str(session.get('name')) |
26 | 28 |
|
27 | | - @self.app.get('/with') |
| 29 | + @app.get('/with') |
28 | 30 | @with_session |
29 | 31 | def session_context_manager(req, session): |
30 | 32 | return str(session.get('name')) |
31 | 33 |
|
32 | | - @self.app.post('/set') |
| 34 | + @app.post('/set') |
33 | 35 | def set_session(req): |
34 | 36 | update_session(req, {'name': 'joe'}) |
35 | 37 | return 'OK' |
36 | 38 |
|
37 | | - @self.app.post('/del') |
| 39 | + @app.post('/del') |
38 | 40 | def del_session(req): |
39 | 41 | delete_session(req) |
40 | 42 | return 'OK' |
41 | 43 |
|
42 | | - res = self.client.get('/') |
| 44 | + res = client.get('/') |
| 45 | + self.assertEqual(res.text, 'None') |
| 46 | + res = client.get('/with') |
| 47 | + self.assertEqual(res.text, 'None') |
| 48 | + |
| 49 | + res = client.post('/set') |
| 50 | + self.assertEqual(res.text, 'OK') |
| 51 | + |
| 52 | + res = client.get('/') |
| 53 | + self.assertEqual(res.text, 'joe') |
| 54 | + res = client.get('/with') |
| 55 | + self.assertEqual(res.text, 'joe') |
| 56 | + |
| 57 | + res = client.post('/del') |
| 58 | + self.assertEqual(res.text, 'OK') |
| 59 | + |
| 60 | + res = client.get('/') |
| 61 | + self.assertEqual(res.text, 'None') |
| 62 | + res = client.get('/with') |
| 63 | + self.assertEqual(res.text, 'None') |
| 64 | + |
| 65 | + def _run(self, coro): |
| 66 | + loop = asyncio.get_event_loop() |
| 67 | + return loop.run_until_complete(coro) |
| 68 | + |
| 69 | + def test_session_async(self): |
| 70 | + app = MicrodotAsync() |
| 71 | + client = TestClientAsync(app) |
| 72 | + |
| 73 | + @app.get('/') |
| 74 | + async def index(req): |
| 75 | + session = get_session(req) |
| 76 | + session2 = get_session(req) |
| 77 | + session2['foo'] = 'bar' |
| 78 | + self.assertEqual(session['foo'], 'bar') |
| 79 | + return str(session.get('name')) |
| 80 | + |
| 81 | + @app.get('/with') |
| 82 | + @with_session |
| 83 | + async def session_context_manager(req, session): |
| 84 | + return str(session.get('name')) |
| 85 | + |
| 86 | + @app.post('/set') |
| 87 | + async def set_session(req): |
| 88 | + update_session(req, {'name': 'joe'}) |
| 89 | + return 'OK' |
| 90 | + |
| 91 | + @app.post('/del') |
| 92 | + async def del_session(req): |
| 93 | + delete_session(req) |
| 94 | + return 'OK' |
| 95 | + |
| 96 | + res = self._run(client.get('/')) |
43 | 97 | self.assertEqual(res.text, 'None') |
44 | | - res = self.client.get('/with') |
| 98 | + res = self._run(client.get('/with')) |
45 | 99 | self.assertEqual(res.text, 'None') |
46 | 100 |
|
47 | | - res = self.client.post('/set') |
| 101 | + res = self._run(client.post('/set')) |
48 | 102 | self.assertEqual(res.text, 'OK') |
49 | 103 |
|
50 | | - res = self.client.get('/') |
| 104 | + res = self._run(client.get('/')) |
51 | 105 | self.assertEqual(res.text, 'joe') |
52 | | - res = self.client.get('/with') |
| 106 | + res = self._run(client.get('/with')) |
53 | 107 | self.assertEqual(res.text, 'joe') |
54 | 108 |
|
55 | | - res = self.client.post('/del') |
| 109 | + res = self._run(client.post('/del')) |
56 | 110 | self.assertEqual(res.text, 'OK') |
57 | 111 |
|
58 | | - res = self.client.get('/') |
| 112 | + res = self._run(client.get('/')) |
59 | 113 | self.assertEqual(res.text, 'None') |
60 | | - res = self.client.get('/with') |
| 114 | + res = self._run(client.get('/with')) |
61 | 115 | self.assertEqual(res.text, 'None') |
62 | 116 |
|
63 | 117 | def test_session_no_secret_key(self): |
64 | 118 | set_session_secret_key(None) |
| 119 | + app = Microdot() |
| 120 | + client = TestClient(app) |
65 | 121 |
|
66 | | - @self.app.get('/') |
| 122 | + @app.get('/') |
67 | 123 | def index(req): |
68 | 124 | self.assertRaises(ValueError, get_session, req) |
69 | 125 | self.assertRaises(ValueError, update_session, req, {}) |
70 | 126 | return '' |
71 | 127 |
|
72 | | - res = self.client.get('/') |
| 128 | + res = client.get('/') |
73 | 129 | self.assertEqual(res.status_code, 200) |
74 | 130 |
|
75 | 131 | set_session_secret_key('top-secret!') |
0 commit comments