]>
Commit | Line | Data |
---|---|---|
f67539c2 | 1 | # -*- coding: utf-8 -*- |
f67539c2 TL |
2 | |
3 | import unittest | |
4 | ||
a4b75251 TL |
5 | from ..controllers._api_router import APIRouter |
6 | from ..controllers._rest_controller import RESTController | |
7 | from ..controllers._version import APIVersion | |
8 | from ..tests import ControllerTestCase | |
f67539c2 TL |
9 | |
10 | ||
a4b75251 | 11 | @APIRouter("/vtest", secure=False) |
f67539c2 TL |
12 | class VTest(RESTController): |
13 | RESOURCE_ID = "vid" | |
14 | ||
a4b75251 | 15 | @RESTController.MethodMap(version=APIVersion(0, 1)) |
f67539c2 TL |
16 | def list(self): |
17 | return {'version': ""} | |
18 | ||
19 | def get(self): | |
20 | return {'version': ""} | |
21 | ||
a4b75251 | 22 | @RESTController.Collection('GET', version=APIVersion(1, 0)) |
f67539c2 TL |
23 | def vmethod(self): |
24 | return {'version': '1.0'} | |
25 | ||
a4b75251 TL |
26 | @RESTController.Collection('GET', version=APIVersion(1, 1)) |
27 | def vmethodv1_1(self): | |
28 | return {'version': '1.1'} | |
29 | ||
30 | @RESTController.Collection('GET', version=APIVersion(2, 0)) | |
f67539c2 TL |
31 | def vmethodv2(self): |
32 | return {'version': '2.0'} | |
33 | ||
34 | ||
35 | class RESTVersioningTest(ControllerTestCase, unittest.TestCase): | |
36 | @classmethod | |
37 | def setup_server(cls): | |
38 | cls.setup_controllers([VTest], "/test") | |
39 | ||
b3b6e05e TL |
40 | def test_list(self): |
41 | for (version, expected_status) in [ | |
a4b75251 TL |
42 | ((0, 1), 200), |
43 | ((2, 0), 415) | |
b3b6e05e TL |
44 | ]: |
45 | with self.subTest(version=version): | |
a4b75251 | 46 | self._get('/test/api/vtest', version=APIVersion._make(version)) |
b3b6e05e TL |
47 | self.assertStatus(expected_status) |
48 | ||
f67539c2 TL |
49 | def test_v1(self): |
50 | for (version, expected_status) in [ | |
a4b75251 TL |
51 | ((1, 0), 200), |
52 | ((2, 0), 415) | |
f67539c2 TL |
53 | ]: |
54 | with self.subTest(version=version): | |
a4b75251 TL |
55 | self._get('/test/api/vtest/vmethod', |
56 | version=APIVersion._make(version)) | |
f67539c2 TL |
57 | self.assertStatus(expected_status) |
58 | ||
59 | def test_v2(self): | |
60 | for (version, expected_status) in [ | |
a4b75251 TL |
61 | ((2, 0), 200), |
62 | ((1, 0), 415) | |
63 | ]: | |
64 | with self.subTest(version=version): | |
65 | self._get('/test/api/vtest/vmethodv2', | |
66 | version=APIVersion._make(version)) | |
67 | self.assertStatus(expected_status) | |
68 | ||
69 | def test_backward_compatibility(self): | |
70 | for (version, expected_status) in [ | |
71 | ((1, 1), 200), | |
72 | ((1, 0), 200), | |
73 | ((2, 0), 415) | |
f67539c2 TL |
74 | ]: |
75 | with self.subTest(version=version): | |
a4b75251 TL |
76 | self._get('/test/api/vtest/vmethodv1_1', |
77 | version=APIVersion._make(version)) | |
f67539c2 | 78 | self.assertStatus(expected_status) |