Mercurial > p > roundup > code
comparison test/rest_common.py @ 5706:dfca6136dd7b
Add more tests including call to patch an attribute with add and
replace; patch a bogus property, delete a bogus property
| author | John Rouillard <rouilj@ieee.org> |
|---|---|
| date | Thu, 11 Apr 2019 21:46:51 -0400 |
| parents | 457fc482e6b1 |
| children | f9a762678af6 |
comparison
equal
deleted
inserted
replaced
| 5705:457fc482e6b1 | 5706:dfca6136dd7b |
|---|---|
| 2 import os | 2 import os |
| 3 import shutil | 3 import shutil |
| 4 import errno | 4 import errno |
| 5 | 5 |
| 6 from roundup.cgi.exceptions import * | 6 from roundup.cgi.exceptions import * |
| 7 from roundup.hyperdb import HyperdbValueError | |
| 7 from roundup.exceptions import * | 8 from roundup.exceptions import * |
| 8 from roundup import password, hyperdb | 9 from roundup import password, hyperdb |
| 9 from roundup.rest import RestfulInstance, calculate_etag | 10 from roundup.rest import RestfulInstance, calculate_etag |
| 10 from roundup.backends import list_backends | 11 from roundup.backends import list_backends |
| 11 from roundup.cgi import client | 12 from roundup.cgi import client |
| 1293 print(results) | 1294 print(results) |
| 1294 self.assertEqual(results['error']['status'], | 1295 self.assertEqual(results['error']['status'], |
| 1295 expected['error']['status']) | 1296 expected['error']['status']) |
| 1296 self.assertEqual(type(results['error']['msg']), | 1297 self.assertEqual(type(results['error']['msg']), |
| 1297 type(expected['error']['msg'])) | 1298 type(expected['error']['msg'])) |
| 1299 self.assertEqual(str(results['error']['msg']), | |
| 1300 str(expected['error']['msg'])) | |
| 1301 self.assertEqual(self.dummy_client.response_code, 400) | |
| 1302 | |
| 1303 # delete bogus property | |
| 1304 etag = calculate_etag(self.db.issue.getnode(issue_id)) | |
| 1305 form.list.append(cgi.MiniFieldStorage('@etag', etag)) | |
| 1306 results = self.server.delete_attribute( | |
| 1307 'issue', issue_id, 'nosuchprop', form | |
| 1308 ) | |
| 1309 expected= {'error': {'status': 400, | |
| 1310 'msg': UsageError("Attribute 'nosuchprop' not valid " | |
| 1311 "for class issue.")}} | |
| 1312 print(results) | |
| 1313 self.assertEqual(results['error']['status'], | |
| 1314 expected['error']['status']) | |
| 1315 self.assertEqual(type(results['error']['msg']), | |
| 1316 type(expected['error']['msg'])) | |
| 1317 self.assertEqual(str(results['error']['msg']), | |
| 1318 str(expected['error']['msg'])) | |
| 1298 self.assertEqual(self.dummy_client.response_code, 400) | 1319 self.assertEqual(self.dummy_client.response_code, 400) |
| 1299 | 1320 |
| 1300 def testPatchAdd(self): | 1321 def testPatchAdd(self): |
| 1301 """ | 1322 """ |
| 1302 Test Patch op 'Add' | 1323 Test Patch op 'Add' |
| 1328 results = self.server.get_element('issue', issue_id, self.terse_form) | 1349 results = self.server.get_element('issue', issue_id, self.terse_form) |
| 1329 results = results['data'] | 1350 results = results['data'] |
| 1330 self.assertEqual(self.dummy_client.response_code, 200) | 1351 self.assertEqual(self.dummy_client.response_code, 200) |
| 1331 self.assertEqual(len(results['attributes']['nosy']), 2) | 1352 self.assertEqual(len(results['attributes']['nosy']), 2) |
| 1332 self.assertListEqual(results['attributes']['nosy'], ['1', '2']) | 1353 self.assertListEqual(results['attributes']['nosy'], ['1', '2']) |
| 1354 | |
| 1355 etag = calculate_etag(self.db.issue.getnode(issue_id)) | |
| 1356 form = cgi.FieldStorage() | |
| 1357 form.list = [ | |
| 1358 cgi.MiniFieldStorage('@op', 'add'), | |
| 1359 cgi.MiniFieldStorage('data', '3'), | |
| 1360 cgi.MiniFieldStorage('@etag', etag) | |
| 1361 ] | |
| 1362 results = self.server.patch_attribute('issue', issue_id, 'nosy', form) | |
| 1363 self.assertEqual(self.dummy_client.response_code, 200) | |
| 1364 | |
| 1365 # verify the result | |
| 1366 results = self.server.get_element('issue', issue_id, self.terse_form) | |
| 1367 results = results['data'] | |
| 1368 self.assertEqual(self.dummy_client.response_code, 200) | |
| 1369 self.assertEqual(len(results['attributes']['nosy']), 3) | |
| 1370 self.assertListEqual(results['attributes']['nosy'], ['1', '2', '3']) | |
| 1371 | |
| 1372 | |
| 1373 # patch invalid property | |
| 1374 etag = calculate_etag(self.db.issue.getnode(issue_id)) | |
| 1375 form = cgi.FieldStorage() | |
| 1376 form.list = [ | |
| 1377 cgi.MiniFieldStorage('@op', 'add'), | |
| 1378 cgi.MiniFieldStorage('data', '3'), | |
| 1379 cgi.MiniFieldStorage('@etag', etag) | |
| 1380 ] | |
| 1381 results = self.server.patch_attribute('issue', issue_id, 'notGoingToWork', form) | |
| 1382 self.assertEqual(self.dummy_client.response_code, 400) | |
| 1383 print(results) | |
| 1384 expected={'error': {'status': 400, | |
| 1385 'msg': UsageError( | |
| 1386 HyperdbValueError( | |
| 1387 "'notGoingToWork' is not a property of issue",),)}} | |
| 1388 self.assertEqual(results['error']['status'], | |
| 1389 expected['error']['status']) | |
| 1390 self.assertEqual(type(results['error']['msg']), | |
| 1391 type(expected['error']['msg'])) | |
| 1392 self.assertEqual(str(results['error']['msg']), | |
| 1393 str(expected['error']['msg'])) | |
| 1333 | 1394 |
| 1334 def testPatchReplace(self): | 1395 def testPatchReplace(self): |
| 1335 """ | 1396 """ |
| 1336 Test Patch op 'Replace' | 1397 Test Patch op 'Replace' |
| 1337 """ | 1398 """ |
| 1371 results = results['data'] | 1432 results = results['data'] |
| 1372 self.assertEqual(self.dummy_client.response_code, 200) | 1433 self.assertEqual(self.dummy_client.response_code, 200) |
| 1373 self.assertEqual(results['attributes']['status'], '3') | 1434 self.assertEqual(results['attributes']['status'], '3') |
| 1374 self.assertEqual(len(results['attributes']['nosy']), 1) | 1435 self.assertEqual(len(results['attributes']['nosy']), 1) |
| 1375 self.assertListEqual(results['attributes']['nosy'], ['2']) | 1436 self.assertListEqual(results['attributes']['nosy'], ['2']) |
| 1437 | |
| 1438 # replace status = 2 using status attribute | |
| 1439 etag = calculate_etag(self.db.issue.getnode(issue_id)) | |
| 1440 form = cgi.FieldStorage() | |
| 1441 form.list = [ | |
| 1442 cgi.MiniFieldStorage('@op', 'replace'), | |
| 1443 cgi.MiniFieldStorage('data', '2'), | |
| 1444 cgi.MiniFieldStorage('@etag', etag) | |
| 1445 ] | |
| 1446 results = self.server.patch_attribute('issue', issue_id, 'status', | |
| 1447 form) | |
| 1448 self.assertEqual(self.dummy_client.response_code, 200) | |
| 1449 # verify the result | |
| 1450 results = self.server.get_element('issue', issue_id, self.terse_form) | |
| 1451 results = results['data'] | |
| 1452 self.assertEqual(self.dummy_client.response_code, 200) | |
| 1453 self.assertEqual(results['attributes']['status'], '2') | |
| 1376 | 1454 |
| 1377 # try to set a protected prop. It should fail. | 1455 # try to set a protected prop. It should fail. |
| 1378 etag = calculate_etag(self.db.issue.getnode(issue_id)) | 1456 etag = calculate_etag(self.db.issue.getnode(issue_id)) |
| 1379 form = cgi.FieldStorage() | 1457 form = cgi.FieldStorage() |
| 1380 form.list = [ | 1458 form.list = [ |
