annotate test/test_liveserver.py @ 6384:66a061e52435

Test options in rest interface against live server; rest doc update Add OPTIONS verb routing for /rest and /rest/data Document that there must not be a content-type header for OPTIONS or GET. Set TRACKER_WEB option in config.in to match where the server is running. Add testing for OPTIONS verb against all rest endpoint types.
author John Rouillard <rouilj@ieee.org>
date Wed, 21 Apr 2021 00:48:28 -0400
parents e9760702bf0c
children 8c43129f29ca
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6383
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
1 import shutil, errno, pytest
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
2
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
3 from roundup.cgi.wsgi_handler import RequestDispatcher
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
4 from .wsgi_liveserver import LiveServerTestCase
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
5 from . import db_test_base
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
6
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
7 try:
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
8 import requests
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
9 skip_requests = lambda func, *args, **kwargs: func
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
10 except ImportError:
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
11 from .pytest_patcher import mark_class
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
12 skip_requests = mark_class(pytest.mark.skip(
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
13 reason='Skipping liveserver tests: requests library not available'))
6384
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
14
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
15
6383
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
16 @skip_requests
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
17 class SimpleTest(LiveServerTestCase):
6384
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
18 # have chicken and egg issue here. Need to encode the base_url
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
19 # in the config file but we don't know it until after
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
20 # the server is started nd has read the config.ini.
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
21 # so only allow one port number
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
22 port_range = (9001, 9001) # default is (8080, 8090)
6383
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
23
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
24 dirname = '_test_instance'
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
25 backend = 'anydbm'
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
26
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
27 @classmethod
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
28 def setup_class(cls):
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
29 '''All test in this class use the same roundup instance.
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
30 This instance persists across all tests.
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
31 Create the tracker dir here so that it is ready for the
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
32 create_app() method to be called.
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
33 '''
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
34 # tests in this class.
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
35 # set up and open a tracker
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
36 cls.instance = db_test_base.setupTracker(cls.dirname, cls.backend)
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
37
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
38 # open the database
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
39 cls.db = cls.instance.open('admin')
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
40
6384
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
41 # set the url the test instance will run at.
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
42 cls.db.config['TRACKER_WEB'] = "http://localhost:9001/"
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
43 cls.db.config.save()
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
44
6383
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
45 cls.db.commit()
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
46 cls.db.close()
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
47
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
48 @classmethod
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
49 def teardown_class(cls):
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
50 '''Close the database and delete the tracker directory
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
51 now that the app should be exiting.
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
52 '''
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
53 if cls.db:
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
54 cls.db.close()
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
55 try:
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
56 shutil.rmtree(cls.dirname)
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
57 except OSError as error:
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
58 if error.errno not in (errno.ENOENT, errno.ESRCH): raise
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
59
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
60 def create_app(self):
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
61 '''The wsgi app to start'''
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
62 return RequestDispatcher(self.dirname)
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
63
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
64 def test_start_page(self):
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
65 """ simple test that verifies that the server can serve a start page.
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
66 """
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
67 f = requests.get(self.url_base())
6384
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
68 self.assertEqual(f.status_code, 200)
6383
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
69 self.assertTrue(b'Roundup' in f.content)
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
70 self.assertTrue(b'Creator' in f.content)
6384
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
71
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
72
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
73 def disable_test_http_options(self):
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
74 """ options returns an unimplemented error for this case."""
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
75 '''note this currently triggers an assertion failure in the
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
76 python wsgi handler, so disable while investigating'''
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
77
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
78 # do not send content-type header for options
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
79 f = requests.options(self.url_base() + '/',
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
80 headers = {'content-type': ""})
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
81 # options is not implemented for the non-rest interface.
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
82 self.assertEqual(f.status_code, 501)
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
83
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
84 def test_rest_endpoint_root_options(self):
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
85 # use basic auth for rest endpoint
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
86 f = requests.options(self.url_base() + '/rest',
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
87 auth=('admin', 'sekrit'),
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
88 headers = {'content-type': ""})
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
89 print(f.status_code)
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
90 print(f.headers)
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
91
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
92 self.assertEqual(f.status_code, 204)
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
93 expected = { 'Content-Type': 'application/json',
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
94 'Access-Control-Allow-Origin': '*',
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
95 'Access-Control-Allow-Headers': 'Content-Type, Authorization, X-HTTP-Method-Override',
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
96 'Allow': 'OPTIONS, GET',
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
97 'Access-Control-Allow-Methods': 'HEAD, OPTIONS, GET, PUT, DELETE, PATCH',
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
98 }
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
99
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
100 # use dict comprehension to remove fields like date,
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
101 # content-length etc. from f.headers.
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
102 self.assertDictEqual({ key: value for (key, value) in f.headers.items() if key in expected }, expected)
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
103
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
104 def test_rest_endpoint_data_options(self):
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
105 # use basic auth for rest endpoint
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
106 f = requests.options(self.url_base() + '/rest/data',
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
107 auth=('admin', 'sekrit'),
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
108 headers = {'content-type': ""}
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
109 )
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
110 print(f.status_code)
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
111 print(f.headers)
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
112
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
113 self.assertEqual(f.status_code, 204)
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
114 expected = { 'Content-Type': 'application/json',
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
115 'Access-Control-Allow-Origin': '*',
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
116 'Access-Control-Allow-Headers': 'Content-Type, Authorization, X-HTTP-Method-Override',
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
117 'Allow': 'OPTIONS, GET',
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
118 'Access-Control-Allow-Methods': 'HEAD, OPTIONS, GET, PUT, DELETE, PATCH',
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
119 }
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
120
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
121 # use dict comprehension to remove fields like date,
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
122 # content-length etc. from f.headers.
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
123 self.assertDictEqual({ key: value for (key, value) in f.headers.items() if key in expected }, expected)
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
124
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
125 def test_rest_endpoint_collection_options(self):
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
126 # use basic auth for rest endpoint
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
127 f = requests.options(self.url_base() + '/rest/data/user',
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
128 auth=('admin', 'sekrit'),
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
129 headers = {'content-type': ""})
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
130 print(f.status_code)
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
131 print(f.headers)
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
132
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
133 self.assertEqual(f.status_code, 204)
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
134 expected = { 'Content-Type': 'application/json',
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
135 'Access-Control-Allow-Origin': '*',
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
136 'Access-Control-Allow-Headers': 'Content-Type, Authorization, X-HTTP-Method-Override',
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
137 'Allow': 'OPTIONS, GET, POST',
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
138 'Access-Control-Allow-Methods': 'HEAD, OPTIONS, GET, PUT, DELETE, PATCH',
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
139 }
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
140
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
141 # use dict comprehension to remove fields like date,
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
142 # content-length etc. from f.headers.
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
143 self.assertDictEqual({ key: value for (key, value) in f.headers.items() if key in expected }, expected)
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
144
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
145
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
146 def test_rest_endpoint_item_options(self):
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
147
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
148 f = requests.options(self.url_base() + '/rest/data/user/1',
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
149 auth=('admin', 'sekrit'),
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
150 headers = {'content-type': ""})
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
151 print(f.status_code)
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
152 print(f.headers)
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
153
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
154 self.assertEqual(f.status_code, 204)
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
155 expected = { 'Content-Type': 'application/json',
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
156 'Access-Control-Allow-Origin': '*',
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
157 'Access-Control-Allow-Headers': 'Content-Type, Authorization, X-HTTP-Method-Override',
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
158 'Allow': 'OPTIONS, GET, PUT, DELETE, PATCH',
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
159 'Access-Control-Allow-Methods': 'HEAD, OPTIONS, GET, PUT, DELETE, PATCH',
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
160 }
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
161
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
162 # use dict comprehension to remove fields like date,
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
163 # content-length etc. from f.headers.
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
164 self.assertDictEqual({ key: value for (key, value) in f.headers.items() if key in expected }, expected)
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
165
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
166 def test_rest_endpoint_element_options(self):
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
167 # use basic auth for rest endpoint
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
168 f = requests.options(self.url_base() + '/rest/data/user/1/username',
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
169 auth=('admin', 'sekrit'),
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
170 headers = {'content-type': ""})
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
171 print(f.status_code)
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
172 print(f.headers)
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
173
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
174 self.assertEqual(f.status_code, 204)
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
175 expected = { 'Content-Type': 'application/json',
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
176 'Access-Control-Allow-Origin': '*',
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
177 'Access-Control-Allow-Headers': 'Content-Type, Authorization, X-HTTP-Method-Override',
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
178 'Allow': 'OPTIONS, GET, PUT, DELETE, PATCH',
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
179 'Access-Control-Allow-Methods': 'HEAD, OPTIONS, GET, PUT, DELETE, PATCH',
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
180 }
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
181
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
182 # use dict comprehension to remove fields like date,
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
183 # content-length etc. from f.headers.
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
184 self.assertDictEqual({ key: value for (key, value) in f.headers.items() if key in expected }, expected)
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
185
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
186
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
187

Roundup Issue Tracker: http://roundup-tracker.org/