diff 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
line wrap: on
line diff
--- a/test/rest_common.py	Thu Apr 11 20:54:39 2019 -0400
+++ b/test/rest_common.py	Thu Apr 11 21:46:51 2019 -0400
@@ -4,6 +4,7 @@
 import errno
 
 from roundup.cgi.exceptions import *
+from roundup.hyperdb import HyperdbValueError
 from roundup.exceptions import *
 from roundup import password, hyperdb
 from roundup.rest import RestfulInstance, calculate_etag
@@ -1295,6 +1296,26 @@
                          expected['error']['status'])
         self.assertEqual(type(results['error']['msg']),
                          type(expected['error']['msg']))
+        self.assertEqual(str(results['error']['msg']),
+                         str(expected['error']['msg']))
+        self.assertEqual(self.dummy_client.response_code, 400)
+
+        # delete bogus property
+        etag = calculate_etag(self.db.issue.getnode(issue_id))
+        form.list.append(cgi.MiniFieldStorage('@etag', etag))
+        results = self.server.delete_attribute(
+            'issue', issue_id, 'nosuchprop', form
+        )
+        expected= {'error': {'status': 400,
+                    'msg': UsageError("Attribute 'nosuchprop' not valid "
+                                      "for class issue.")}}
+        print(results)
+        self.assertEqual(results['error']['status'],
+                         expected['error']['status'])
+        self.assertEqual(type(results['error']['msg']),
+                         type(expected['error']['msg']))
+        self.assertEqual(str(results['error']['msg']),
+                         str(expected['error']['msg']))
         self.assertEqual(self.dummy_client.response_code, 400)
 
     def testPatchAdd(self):
@@ -1331,6 +1352,46 @@
         self.assertEqual(len(results['attributes']['nosy']), 2)
         self.assertListEqual(results['attributes']['nosy'], ['1', '2'])
 
+        etag = calculate_etag(self.db.issue.getnode(issue_id))
+        form = cgi.FieldStorage()
+        form.list = [
+            cgi.MiniFieldStorage('@op', 'add'),
+            cgi.MiniFieldStorage('data', '3'),
+            cgi.MiniFieldStorage('@etag', etag)
+        ]
+        results = self.server.patch_attribute('issue', issue_id, 'nosy', form)
+        self.assertEqual(self.dummy_client.response_code, 200)
+
+        # verify the result
+        results = self.server.get_element('issue', issue_id, self.terse_form)
+        results = results['data']
+        self.assertEqual(self.dummy_client.response_code, 200)
+        self.assertEqual(len(results['attributes']['nosy']), 3)
+        self.assertListEqual(results['attributes']['nosy'], ['1', '2', '3'])
+
+
+        # patch invalid property
+        etag = calculate_etag(self.db.issue.getnode(issue_id))
+        form = cgi.FieldStorage()
+        form.list = [
+            cgi.MiniFieldStorage('@op', 'add'),
+            cgi.MiniFieldStorage('data', '3'),
+            cgi.MiniFieldStorage('@etag', etag)
+        ]
+        results = self.server.patch_attribute('issue', issue_id, 'notGoingToWork', form)
+        self.assertEqual(self.dummy_client.response_code, 400)
+        print(results)
+        expected={'error': {'status': 400,
+                            'msg': UsageError(
+                                HyperdbValueError(
+                            "'notGoingToWork' is not a property of issue",),)}}
+        self.assertEqual(results['error']['status'],
+                         expected['error']['status'])
+        self.assertEqual(type(results['error']['msg']),
+                         type(expected['error']['msg']))
+        self.assertEqual(str(results['error']['msg']),
+                         str(expected['error']['msg']))
+
     def testPatchReplace(self):
         """
         Test Patch op 'Replace'
@@ -1374,6 +1435,23 @@
         self.assertEqual(len(results['attributes']['nosy']), 1)
         self.assertListEqual(results['attributes']['nosy'], ['2'])
 
+        # replace status = 2 using status attribute
+        etag = calculate_etag(self.db.issue.getnode(issue_id))
+        form = cgi.FieldStorage()
+        form.list = [
+            cgi.MiniFieldStorage('@op', 'replace'),
+            cgi.MiniFieldStorage('data', '2'),
+            cgi.MiniFieldStorage('@etag', etag)
+        ]
+        results = self.server.patch_attribute('issue', issue_id, 'status',
+                                              form)
+        self.assertEqual(self.dummy_client.response_code, 200)
+        # verify the result
+        results = self.server.get_element('issue', issue_id, self.terse_form)
+        results = results['data']
+        self.assertEqual(self.dummy_client.response_code, 200)
+        self.assertEqual(results['attributes']['status'], '2')
+
         # try to set a protected prop. It should fail.
         etag = calculate_etag(self.db.issue.getnode(issue_id))
         form = cgi.FieldStorage()

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