comparison test/rest_common.py @ 5682:e8ac82b8d074

Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
author John Rouillard <rouilj@ieee.org>
date Sat, 30 Mar 2019 16:13:50 -0400
parents b8e8b1b3ec77
children eb51c0d9c9bf
comparison
equal deleted inserted replaced
5681:6457fd696a43 5682:e8ac82b8d074
135 results = self.server.get_attribute( 135 results = self.server.get_attribute(
136 'user', self.joeid, 'username', self.empty_form 136 'user', self.joeid, 'username', self.empty_form
137 ) 137 )
138 self.assertEqual(self.dummy_client.response_code, 200) 138 self.assertEqual(self.dummy_client.response_code, 200)
139 self.assertEqual(results['data']['data'], 'joe') 139 self.assertEqual(results['data']['data'], 'joe')
140
141 def testOutputFormat(self):
142 """ test of @fields and @verbose implementation """
143
144 from roundup.exceptions import UsageError
145
146 self.maxDiff = 4000
147 # create sample data
148 try:
149 self.db.status.create(name='open')
150 except ValueError:
151 pass
152 try:
153 self.db.status.create(name='closed')
154 except ValueError:
155 pass
156 try:
157 self.db.priority.create(name='normal')
158 except ValueError:
159 pass
160 try:
161 self.db.priority.create(name='critical')
162 except ValueError:
163 pass
164 self.db.issue.create(
165 title='foo1',
166 status=self.db.status.lookup('open'),
167 priority=self.db.priority.lookup('normal'),
168 nosy = [ "1", "2" ]
169 )
170 issue_open_norm = self.db.issue.create(
171 title='foo2',
172 status=self.db.status.lookup('open'),
173 priority=self.db.priority.lookup('normal'),
174 assignedto = "3"
175 )
176 issue_open_crit = self.db.issue.create(
177 title='foo5',
178 status=self.db.status.lookup('open'),
179 priority=self.db.priority.lookup('critical')
180 )
181 base_path = self.db.config['TRACKER_WEB'] + 'rest/data/issue/'
182
183
184 # Check formating for issues status=open; @fields and verbose tests
185 form = cgi.FieldStorage()
186 form.list = [
187 cgi.MiniFieldStorage('status', 'open'),
188 cgi.MiniFieldStorage('@fields', 'nosy,status'),
189 cgi.MiniFieldStorage('@verbose', '2')
190 ]
191
192 expected={'data':
193 {'@total_size': 3,
194 'collection': [
195 {'status': {'id': '9',
196 'name': 'open',
197 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/status/9'},
198 'id': '1',
199 'nosy': [
200 {'username': 'admin',
201 'id': '1',
202 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/user/1'},
203 {'username': 'anonymous',
204 'id': '2',
205 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/user/2'}
206 ],
207 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/issue/1',
208 'title': 'foo1' },
209 {'status': {
210 'id': '9',
211 'name': 'open',
212 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/status/9' },
213 'id': '2',
214 'nosy': [
215 {'username': 'joe',
216 'id': '3',
217 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/user/3'}
218 ],
219 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/issue/2',
220 'title': 'foo2'},
221 {'status': {
222 'id': '9',
223 'name': 'open',
224 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/status/9'},
225 'id': '3',
226 'nosy': [],
227 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/issue/3',
228 'title': 'foo5'}
229 ]}}
230
231 results = self.server.get_collection('issue', form)
232 self.assertDictEqual(expected, results)
233
234 # Check formating for issues status=open; @fields and verbose tests
235 form = cgi.FieldStorage()
236 form.list = [
237 cgi.MiniFieldStorage('status', 'open')
238 # default cgi.MiniFieldStorage('@verbose', '1')
239 ]
240
241 expected={'data':
242 {'@total_size': 3,
243 'collection': [
244 {'id': '1',
245 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/issue/1',},
246 { 'id': '2',
247
248 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/issue/2'},
249 {'id': '3',
250 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/issue/3'} ]}}
251
252
253 results = self.server.get_collection('issue', form)
254 self.assertDictEqual(expected, results)
255
256 # Generate failure case, unknown field.
257 form = cgi.FieldStorage()
258 form.list = [
259 cgi.MiniFieldStorage('status', 'open'),
260 cgi.MiniFieldStorage('@fields', 'title,foo')
261 ]
262
263 expected={'error': {
264 'msg': UsageError("Failed to find property 'foo' "
265 "for class issue.",),
266 'status': 400}}
267
268 results = self.server.get_collection('issue', form)
269 # I tried assertDictEqual but seems it can't handle
270 # the exception value of 'msg'. So I am using repr to check.
271 self.assertEqual(repr(sorted(expected['error'])),
272 repr(sorted(results['error']))
273 )
274
275 # Check formating for issues status=open; @fields and verbose tests
276 form = cgi.FieldStorage()
277 form.list = [
278 cgi.MiniFieldStorage('status', 'open'),
279 cgi.MiniFieldStorage('@fields', 'nosy,status,assignedto'),
280 cgi.MiniFieldStorage('@verbose', '0')
281 ]
282
283 expected={'data': {
284 '@total_size': 3,
285 'collection': [
286 {'assignedto': None,
287 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/issue/1',
288 'status': '9',
289 'nosy': ['1', '2'],
290 'id': '1'},
291 {'assignedto': '3',
292 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/issue/2',
293 'status': '9',
294 'nosy': ['3'],
295 'id': '2'},
296 {'assignedto': None,
297 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/issue/3',
298 'status': '9',
299 'nosy': [],
300 'id': '3'}]}}
301
302 results = self.server.get_collection('issue', form)
303 print(results)
304 self.assertDictEqual(expected, results)
305
306 # check users
307 form = cgi.FieldStorage()
308 form.list = [
309 cgi.MiniFieldStorage('@fields', 'username,queries,password'),
310 cgi.MiniFieldStorage('@verbose', '0')
311 ]
312 # note this is done as user joe, so we only get queries
313 # and password for joe.
314 expected = {'data': {'collection': [
315 {'id': '1',
316 'username': 'admin',
317 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/user/1'},
318 {'id': '2',
319 'username': 'anonymous',
320 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/user/2'},
321 {'password': '[password hidden scheme PBKDF2]',
322 'id': '3',
323 'queries': [],
324 'username': 'joe',
325 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/user/3'}],
326 '@total_size': 3}}
327
328 results = self.server.get_collection('user', form)
329 self.assertDictEqual(expected, results)
330
331 ## Start testing get_element
332 form = cgi.FieldStorage()
333 form.list = [
334 cgi.MiniFieldStorage('@fields', 'queries,password'),
335 cgi.MiniFieldStorage('@verbose', '2')
336 ]
337 expected = {'data': {
338 'id': '3',
339 'type': 'user',
340 '@etag': '',
341 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/user/3',
342 'attributes': {
343 'password': '[password hidden scheme PBKDF2]',
344 'queries': [],
345 'username': 'joe'
346 }
347 }}
348
349 results = self.server.get_element('user', self.joeid, form)
350 results['data']['@etag'] = '' # etag depends on date, set to empty
351 self.assertDictEqual(expected,results)
352
353 form = cgi.FieldStorage()
354 form.list = [
355 cgi.MiniFieldStorage('@fields', 'status:priority'),
356 cgi.MiniFieldStorage('@verbose', '1')
357 ]
358 expected = {'data': {
359 'type': 'issue',
360 'id': '3',
361 'attributes': {
362 'status': {
363 'id': '9',
364 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/status/9'},
365 'priority': {
366 'id': '1',
367 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/priority/1'}},
368 '@etag': '',
369 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/issue/3'}}
370
371 results = self.server.get_element('issue', "3", form)
372 results['data']['@etag'] = '' # etag depends on date, set to empty
373 self.assertDictEqual(expected,results)
374
375 form = cgi.FieldStorage()
376 form.list = [
377 cgi.MiniFieldStorage('@fields', 'status,priority'),
378 cgi.MiniFieldStorage('@verbose', '0')
379 ]
380 expected = {'data': {
381 'type': 'issue',
382 'id': '3',
383 'attributes': {
384 'status': '9',
385 'priority': '1'},
386 '@etag': '',
387 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/issue/3'}}
388
389 results = self.server.get_element('issue', "3", form)
390 results['data']['@etag'] = '' # etag depends on date, set to empty
391 self.assertDictEqual(expected,results)
140 392
141 def testFilter(self): 393 def testFilter(self):
142 """ 394 """
143 Retrieve all three users 395 Retrieve all three users
144 obtain data for 'joe' 396 obtain data for 'joe'

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