annotate test/test_liveserver.py @ 6386:2a2da73e1e26

Remove Connection: close header for 501 error handling rest Ralf doesn't know why the "Connection: close" header was added. Was there since the original code to support OPTIONS verb was added. He agrees it can be removed. Enable test for that code path.
author John Rouillard <rouilj@ieee.org>
date Mon, 26 Apr 2021 11:54:57 -0400
parents 8c43129f29ca
children 8f1b91756457
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
6386
2a2da73e1e26 Remove Connection: close header for 501 error handling rest
John Rouillard <rouilj@ieee.org>
parents: 6385
diff changeset
73 def test_http_options(self):
6384
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
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
76 # 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
77 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
78 headers = {'content-type': ""})
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
79 # 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
80 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
81
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
82 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
83 # 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
84 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
85 auth=('admin', 'sekrit'),
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
86 headers = {'content-type': ""})
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
87 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
88 print(f.headers)
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
89
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
90 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
91 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
92 '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
93 '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
94 'Allow': 'OPTIONS, GET',
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-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
96 }
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
97
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
98 # 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
99 # 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
100 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
101
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
102 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
103 # 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
104 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
105 auth=('admin', 'sekrit'),
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
106 headers = {'content-type': ""}
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
107 )
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
108 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
109 print(f.headers)
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
110
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
111 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
112 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
113 '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
114 '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
115 'Allow': 'OPTIONS, GET',
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-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
117 }
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
118
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
119 # 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
120 # 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
121 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
122
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
123 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
124 # 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
125 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
126 auth=('admin', 'sekrit'),
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
127 headers = {'content-type': ""})
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
128 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
129 print(f.headers)
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
130
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
131 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
132 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
133 '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
134 '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
135 '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
136 '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
137 }
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
138
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
139 # 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
140 # 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
141 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
142
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
143
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
144 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
145
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
146 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
147 auth=('admin', 'sekrit'),
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
148 headers = {'content-type': ""})
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
149 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
150 print(f.headers)
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
151
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
152 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
153 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
154 '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
155 '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
156 '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
157 '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
158 }
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
159
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
160 # 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
161 # 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
162 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
163
6385
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
164 def test_rest_endpoint_attribute_options(self):
6384
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
165 # 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
166 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
167 auth=('admin', 'sekrit'),
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
168 headers = {'content-type': ""})
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
169 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
170 print(f.headers)
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
171
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
172 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
173 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
174 '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
175 '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
176 '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
177 '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
178 }
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
179
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
180 # 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
181 # 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
182 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
183
6385
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
184 ## test a read only property.
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
185
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
186 f = requests.options(self.url_base() + '/rest/data/user/1/creator',
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
187 auth=('admin', 'sekrit'),
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
188 headers = {'content-type': ""})
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
189 print(f.status_code)
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
190 print(f.headers)
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
191
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
192 self.assertEqual(f.status_code, 204)
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
193 expected1 = dict(expected)
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
194 expected1['Allow'] = 'OPTIONS, GET'
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
195
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
196 # use dict comprehension to remove fields like date,
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
197 # content-length etc. from f.headers.
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
198 self.assertDictEqual({ key: value for (key, value) in f.headers.items() if key in expected }, expected1)
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
199
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
200 ## test a property that doesn't exist
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
201 f = requests.options(self.url_base() + '/rest/data/user/1/zot',
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
202 auth=('admin', 'sekrit'),
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
203 headers = {'content-type': ""})
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
204 print(f.status_code)
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
205 print(f.headers)
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
206
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
207 self.assertEqual(f.status_code, 404)
6384
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
208
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
209

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