]>
Commit | Line | Data |
---|---|---|
11fdf7f2 TL |
1 | # -*- coding: utf-8 -*- |
2 | from __future__ import absolute_import | |
3 | ||
4 | from . import ControllerTestCase | |
5 | from ..controllers import BaseController, RESTController, Controller, \ | |
6 | ApiController, Endpoint | |
7 | ||
8 | ||
9 | @Controller("/btest/{key}", base_url="/ui", secure=False) | |
10 | class BTest(BaseController): | |
11 | @Endpoint() | |
12 | def test1(self, key, opt=1): | |
13 | return {'key': key, 'opt': opt} | |
14 | ||
15 | @Endpoint() | |
16 | def test2(self, key, skey, opt=1): | |
17 | return {'key': key, 'skey': skey, 'opt': opt} | |
18 | ||
19 | @Endpoint(path="/foo/{skey}/test-3") | |
20 | def test3(self, key, skey, opt=1): | |
21 | return {'key': key, 'skey': skey, 'opt': opt} | |
22 | ||
23 | @Endpoint('POST', path="/foo/{skey}/test-3", query_params=['opt']) | |
24 | def test4(self, key, skey, data, opt=1): | |
25 | return {'key': key, 'skey': skey, 'data': data, 'opt': opt} | |
26 | ||
27 | @Endpoint('PUT', path_params=['skey'], query_params=['opt']) | |
28 | def test5(self, key, skey, data1, data2=None, opt=1): | |
29 | return {'key': key, 'skey': skey, 'data1': data1, 'data2': data2, | |
30 | 'opt': opt} | |
31 | ||
32 | @Endpoint('GET', json_response=False) | |
33 | def test6(self, key, opt=1): | |
34 | return "My Formatted string key={} opt={}".format(key, opt) | |
35 | ||
36 | @Endpoint() | |
37 | def __call__(self, key, opt=1): | |
38 | return {'key': key, 'opt': opt} | |
39 | ||
40 | ||
41 | @ApiController("/rtest/{key}", secure=False) | |
42 | class RTest(RESTController): | |
43 | RESOURCE_ID = 'skey/ekey' | |
44 | ||
45 | def list(self, key, opt=1): | |
46 | return {'key': key, 'opt': opt} | |
47 | ||
48 | def create(self, key, data1, data2=None): | |
49 | return {'key': key, 'data1': data1, 'data2': data2} | |
50 | ||
51 | def get(self, key, skey, ekey, opt=1): | |
52 | return {'key': key, 'skey': skey, 'ekey': ekey, 'opt': opt} | |
53 | ||
54 | def set(self, key, skey, ekey, data): | |
55 | return {'key': key, 'skey': skey, 'ekey': ekey, 'data': data} | |
56 | ||
57 | def delete(self, key, skey, ekey, opt=1): | |
58 | pass | |
59 | ||
60 | def bulk_set(self, key, data1, data2=None): | |
61 | return {'key': key, 'data1': data1, 'data2': data2} | |
62 | ||
63 | def bulk_delete(self, key, opt=1): | |
64 | pass | |
65 | ||
66 | @RESTController.Collection('POST') | |
67 | def cmethod(self, key, data): | |
68 | return {'key': key, 'data': data} | |
69 | ||
70 | @RESTController.Resource('GET') | |
71 | def rmethod(self, key, skey, ekey, opt=1): | |
72 | return {'key': key, 'skey': skey, 'ekey': ekey, 'opt': opt} | |
73 | ||
74 | ||
75 | @Controller("/", secure=False) | |
76 | class Root(BaseController): | |
77 | @Endpoint(json_response=False) | |
78 | def __call__(self): | |
79 | return "<html></html>" | |
80 | ||
81 | ||
82 | class ControllersTest(ControllerTestCase): | |
83 | @classmethod | |
84 | def setup_server(cls): | |
85 | cls.setup_controllers([BTest, RTest], "/test") | |
86 | ||
87 | def test_1(self): | |
88 | self._get('/test/ui/btest/{}/test1?opt=3'.format(100)) | |
89 | self.assertStatus(200) | |
90 | self.assertJsonBody({'key': '100', 'opt': '3'}) | |
91 | ||
92 | def test_2(self): | |
93 | self._get('/test/ui/btest/{}/test2/{}?opt=3'.format(100, 200)) | |
94 | self.assertStatus(200) | |
95 | self.assertJsonBody({'key': '100', 'skey': '200', 'opt': '3'}) | |
96 | ||
97 | def test_3(self): | |
98 | self._get('/test/ui/btest/{}/foo/{}/test-3?opt=3'.format(100, 200)) | |
99 | self.assertStatus(200) | |
100 | self.assertJsonBody({'key': '100', 'skey': '200', 'opt': '3'}) | |
101 | ||
102 | def test_4(self): | |
103 | self._post('/test/ui/btest/{}/foo/{}/test-3?opt=3'.format(100, 200), | |
104 | {'data': 30}) | |
105 | self.assertStatus(200) | |
106 | self.assertJsonBody({'key': '100', 'skey': '200', 'data': 30, | |
107 | 'opt': '3'}) | |
108 | ||
109 | def test_5(self): | |
110 | self._put('/test/ui/btest/{}/test5/{}?opt=3'.format(100, 200), | |
111 | {'data1': 40, 'data2': "hello"}) | |
112 | self.assertStatus(200) | |
113 | self.assertJsonBody({'key': '100', 'skey': '200', 'data1': 40, | |
114 | 'data2': "hello", 'opt': '3'}) | |
115 | ||
116 | def test_6(self): | |
117 | self._get('/test/ui/btest/{}/test6'.format(100)) | |
118 | self.assertStatus(200) | |
119 | self.assertBody("My Formatted string key=100 opt=1") | |
120 | ||
121 | def test_7(self): | |
122 | self._get('/test/ui/btest/{}?opt=3'.format(100)) | |
123 | self.assertStatus(200) | |
124 | self.assertJsonBody({'key': '100', 'opt': '3'}) | |
125 | ||
126 | def test_rest_list(self): | |
127 | self._get('/test/api/rtest/{}?opt=2'.format(300)) | |
128 | self.assertStatus(200) | |
129 | self.assertJsonBody({'key': '300', 'opt': '2'}) | |
130 | ||
131 | def test_rest_create(self): | |
132 | self._post('/test/api/rtest/{}'.format(300), | |
133 | {'data1': 20, 'data2': True}) | |
134 | self.assertStatus(201) | |
135 | self.assertJsonBody({'key': '300', 'data1': 20, 'data2': True}) | |
136 | ||
137 | def test_rest_get(self): | |
138 | self._get('/test/api/rtest/{}/{}/{}?opt=3'.format(300, 1, 2)) | |
139 | self.assertStatus(200) | |
140 | self.assertJsonBody({'key': '300', 'skey': '1', 'ekey': '2', | |
141 | 'opt': '3'}) | |
142 | ||
143 | def test_rest_set(self): | |
144 | self._put('/test/api/rtest/{}/{}/{}'.format(300, 1, 2), | |
145 | {'data': 40}) | |
146 | self.assertStatus(200) | |
147 | self.assertJsonBody({'key': '300', 'skey': '1', 'ekey': '2', | |
148 | 'data': 40}) | |
149 | ||
150 | def test_rest_delete(self): | |
151 | self._delete('/test/api/rtest/{}/{}/{}?opt=3'.format(300, 1, 2)) | |
152 | self.assertStatus(204) | |
153 | ||
154 | def test_rest_bulk_set(self): | |
155 | self._put('/test/api/rtest/{}'.format(300), | |
156 | {'data1': 20, 'data2': True}) | |
157 | self.assertStatus(200) | |
158 | self.assertJsonBody({'key': '300', 'data1': 20, 'data2': True}) | |
159 | ||
160 | self._put('/test/api/rtest/{}'.format(400), | |
161 | {'data1': 20, 'data2': ['one', 'two', 'three']}) | |
162 | self.assertStatus(200) | |
163 | self.assertJsonBody({ | |
164 | 'key': '400', | |
165 | 'data1': 20, | |
166 | 'data2': ['one', 'two', 'three'], | |
167 | }) | |
168 | ||
169 | def test_rest_bulk_delete(self): | |
170 | self._delete('/test/api/rtest/{}?opt=2'.format(300)) | |
171 | self.assertStatus(204) | |
172 | ||
173 | def test_rest_collection(self): | |
174 | self._post('/test/api/rtest/{}/cmethod'.format(300), {'data': 30}) | |
175 | self.assertStatus(200) | |
176 | self.assertJsonBody({'key': '300', 'data': 30}) | |
177 | ||
178 | def test_rest_resource(self): | |
179 | self._get('/test/api/rtest/{}/{}/{}/rmethod?opt=4'.format(300, 2, 3)) | |
180 | self.assertStatus(200) | |
181 | self.assertJsonBody({'key': '300', 'skey': '2', 'ekey': '3', | |
182 | 'opt': '4'}) | |
183 | ||
184 | ||
185 | class RootControllerTest(ControllerTestCase): | |
186 | @classmethod | |
187 | def setup_server(cls): | |
188 | cls.setup_controllers([Root]) | |
189 | ||
190 | def test_index(self): | |
191 | self._get("/") | |
192 | self.assertBody("<html></html>") |