Skip to content

Commit 03db880

Browse files
committed
Add more tests including call to patch an attribute with add and
replace; patch a bogus property, delete a bogus property
1 parent 43040dd commit 03db880

File tree

1 file changed

+78
-0
lines changed

1 file changed

+78
-0
lines changed

test/rest_common.py

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import errno
55

66
from roundup.cgi.exceptions import *
7+
from roundup.hyperdb import HyperdbValueError
78
from roundup.exceptions import *
89
from roundup import password, hyperdb
910
from roundup.rest import RestfulInstance, calculate_etag
@@ -1295,6 +1296,26 @@ def testDeleteAttributeUri(self):
12951296
expected['error']['status'])
12961297
self.assertEqual(type(results['error']['msg']),
12971298
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']))
12981319
self.assertEqual(self.dummy_client.response_code, 400)
12991320

13001321
def testPatchAdd(self):
@@ -1331,6 +1352,46 @@ def testPatchAdd(self):
13311352
self.assertEqual(len(results['attributes']['nosy']), 2)
13321353
self.assertListEqual(results['attributes']['nosy'], ['1', '2'])
13331354

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']))
1394+
13341395
def testPatchReplace(self):
13351396
"""
13361397
Test Patch op 'Replace'
@@ -1374,6 +1435,23 @@ def testPatchReplace(self):
13741435
self.assertEqual(len(results['attributes']['nosy']), 1)
13751436
self.assertListEqual(results['attributes']['nosy'], ['2'])
13761437

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')
1454+
13771455
# try to set a protected prop. It should fail.
13781456
etag = calculate_etag(self.db.issue.getnode(issue_id))
13791457
form = cgi.FieldStorage()

0 commit comments

Comments
 (0)