@@ -2224,6 +2224,24 @@ def testPatchAdd(self):
22242224 self .assertEqual (len (results ['attributes' ]['nosy' ]), 3 )
22252225 self .assertListEqual (results ['attributes' ]['nosy' ], ['1' , '2' , '3' ])
22262226
2227+ # patch with no new_val/data
2228+ etag = calculate_etag (self .db .issue .getnode (issue_id ),
2229+ self .db .config ['WEB_SECRET_KEY' ])
2230+ form = cgi .FieldStorage ()
2231+ form .list = [
2232+ cgi .MiniFieldStorage ('@op' , 'add' ),
2233+ cgi .MiniFieldStorage ('data' , '' ),
2234+ cgi .MiniFieldStorage ('@etag' , etag )
2235+ ]
2236+ results = self .server .patch_attribute ('issue' , issue_id , 'nosy' , form )
2237+ self .assertEqual (self .dummy_client .response_code , 200 )
2238+
2239+ # verify the result
2240+ results = self .server .get_element ('issue' , issue_id , self .terse_form )
2241+ results = results ['data' ]
2242+ self .assertEqual (self .dummy_client .response_code , 200 )
2243+ self .assertEqual (len (results ['attributes' ]['nosy' ]), 3 )
2244+ self .assertListEqual (results ['attributes' ]['nosy' ], ['1' , '2' , '3' ])
22272245
22282246 # patch invalid property
22292247 etag = calculate_etag (self .db .issue .getnode (issue_id ),
@@ -2474,6 +2492,21 @@ def testPatchAction(self):
24742492 # verify the result
24752493 self .assertTrue (self .db .issue .is_retired (issue_id ))
24762494
2495+ # execute action restore
2496+ form = cgi .FieldStorage ()
2497+ etag = calculate_etag (self .db .issue .getnode (issue_id ),
2498+ self .db .config ['WEB_SECRET_KEY' ])
2499+ form .list = [
2500+ cgi .MiniFieldStorage ('@op' , 'action' ),
2501+ cgi .MiniFieldStorage ('@action_name' , 'restore' ),
2502+ cgi .MiniFieldStorage ('@etag' , etag )
2503+ ]
2504+ results = self .server .patch_element ('issue' , issue_id , form )
2505+ self .assertEqual (self .dummy_client .response_code , 200 )
2506+
2507+ # verify the result
2508+ self .assertTrue (not self .db .issue .is_retired (issue_id ))
2509+
24772510 def testPatchRemove (self ):
24782511 """
24792512 Test Patch Action 'Remove' only some element from a list
@@ -2496,7 +2529,7 @@ def testPatchRemove(self):
24962529 self .assertEqual (len (results ['attributes' ]['nosy' ]), 3 )
24972530 self .assertEqual (results ['attributes' ]['nosy' ], ['1' , '2' , '3' ])
24982531
2499- # remove the nosy list and the title
2532+ # remove 1 and 2 from the nosy list
25002533 form = cgi .FieldStorage ()
25012534 etag = calculate_etag (self .db .issue .getnode (issue_id ),
25022535 self .db .config ['WEB_SECRET_KEY' ])
@@ -2515,6 +2548,25 @@ def testPatchRemove(self):
25152548 self .assertEqual (len (results ['attributes' ]['nosy' ]), 1 )
25162549 self .assertEqual (results ['attributes' ]['nosy' ], ['3' ])
25172550
2551+ # delete last element: 3
2552+ etag = calculate_etag (self .db .issue .getnode (issue_id ),
2553+ self .db .config ['WEB_SECRET_KEY' ])
2554+ form = cgi .FieldStorage ()
2555+ form .list = [
2556+ cgi .MiniFieldStorage ('@op' , 'remove' ),
2557+ cgi .MiniFieldStorage ('data' , '3' ),
2558+ cgi .MiniFieldStorage ('@etag' , etag )
2559+ ]
2560+ results = self .server .patch_attribute ('issue' , issue_id , 'nosy' , form )
2561+ self .assertEqual (self .dummy_client .response_code , 200 )
2562+
2563+ # verify the result
2564+ results = self .server .get_element ('issue' , issue_id , self .terse_form )
2565+ results = results ['data' ]
2566+ self .assertEqual (self .dummy_client .response_code , 200 )
2567+ self .assertEqual (len (results ['attributes' ]['nosy' ]), 0 )
2568+ self .assertListEqual (results ['attributes' ]['nosy' ], [])
2569+
25182570
25192571def get_obj (path , id ):
25202572 return {
0 commit comments