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 = [

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