comparison test/rest_common.py @ 5672:a7211712b110

Fix tests for latest REST changes
author Ralf Schlatterbeck <rsc@runtux.com>
date Mon, 25 Mar 2019 19:46:20 +0100
parents d26d2590cd8c
children 6b6bc8d31caf
comparison
equal deleted inserted replaced
5663:a884698173ea 5672:a7211712b110
22 22
23 23
24 class TestCase(): 24 class TestCase():
25 25
26 backend = None 26 backend = None
27 url_pfx = 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/'
27 28
28 def setUp(self): 29 def setUp(self):
29 self.dirname = '_test_rest' 30 self.dirname = '_test_rest'
30 # set up and open a tracker 31 # set up and open a tracker
31 self.instance = setupTracker(self.dirname, self.backend) 32 self.instance = setupTracker(self.dirname, self.backend)
69 'TRACKER_NAME': 'rounduptest' 70 'TRACKER_NAME': 'rounduptest'
70 } 71 }
71 self.dummy_client = client.Client(self.instance, MockNull(), env, [], None) 72 self.dummy_client = client.Client(self.instance, MockNull(), env, [], None)
72 self.dummy_client.request.headers.get = self.get_header 73 self.dummy_client.request.headers.get = self.get_header
73 self.empty_form = cgi.FieldStorage() 74 self.empty_form = cgi.FieldStorage()
75 self.terse_form = cgi.FieldStorage()
76 self.terse_form.list = [
77 cgi.MiniFieldStorage('@verbose', '0'),
78 ]
74 79
75 self.server = RestfulInstance(self.dummy_client, self.db) 80 self.server = RestfulInstance(self.dummy_client, self.db)
76 81
77 def tearDown(self): 82 def tearDown(self):
78 self.db.close() 83 self.db.close()
173 base_path = self.db.config['TRACKER_WEB'] + 'rest/data/issue/' 178 base_path = self.db.config['TRACKER_WEB'] + 'rest/data/issue/'
174 179
175 # Retrieve all issue status=open 180 # Retrieve all issue status=open
176 form = cgi.FieldStorage() 181 form = cgi.FieldStorage()
177 form.list = [ 182 form.list = [
178 cgi.MiniFieldStorage('where_status', 'open') 183 cgi.MiniFieldStorage('status', 'open')
179 ] 184 ]
180 results = self.server.get_collection('issue', form) 185 results = self.server.get_collection('issue', form)
181 self.assertEqual(self.dummy_client.response_code, 200) 186 self.assertEqual(self.dummy_client.response_code, 200)
182 self.assertIn(get_obj(base_path, issue_open_norm), 187 self.assertIn(get_obj(base_path, issue_open_norm),
183 results['data']['collection']) 188 results['data']['collection'])
189 ) 194 )
190 195
191 # Retrieve all issue status=closed and priority=critical 196 # Retrieve all issue status=closed and priority=critical
192 form = cgi.FieldStorage() 197 form = cgi.FieldStorage()
193 form.list = [ 198 form.list = [
194 cgi.MiniFieldStorage('where_status', 'closed'), 199 cgi.MiniFieldStorage('status', 'closed'),
195 cgi.MiniFieldStorage('where_priority', 'critical') 200 cgi.MiniFieldStorage('priority', 'critical')
196 ] 201 ]
197 results = self.server.get_collection('issue', form) 202 results = self.server.get_collection('issue', form)
198 self.assertEqual(self.dummy_client.response_code, 200) 203 self.assertEqual(self.dummy_client.response_code, 200)
199 self.assertIn(get_obj(base_path, issue_closed_crit), 204 self.assertIn(get_obj(base_path, issue_closed_crit),
200 results['data']['collection']) 205 results['data']['collection'])
206 ) 211 )
207 212
208 # Retrieve all issue status=closed and priority=normal,critical 213 # Retrieve all issue status=closed and priority=normal,critical
209 form = cgi.FieldStorage() 214 form = cgi.FieldStorage()
210 form.list = [ 215 form.list = [
211 cgi.MiniFieldStorage('where_status', 'closed'), 216 cgi.MiniFieldStorage('status', 'closed'),
212 cgi.MiniFieldStorage('where_priority', 'normal,critical') 217 cgi.MiniFieldStorage('priority', 'normal,critical')
213 ] 218 ]
214 results = self.server.get_collection('issue', form) 219 results = self.server.get_collection('issue', form)
215 self.assertEqual(self.dummy_client.response_code, 200) 220 self.assertEqual(self.dummy_client.response_code, 200)
216 self.assertIn(get_obj(base_path, issue_closed_crit), 221 self.assertIn(get_obj(base_path, issue_closed_crit),
217 results['data']['collection']) 222 results['data']['collection'])
257 "bugs/rest/data/issue" 262 "bugs/rest/data/issue"
258 263
259 # Retrieve page 1 264 # Retrieve page 1
260 form = cgi.FieldStorage() 265 form = cgi.FieldStorage()
261 form.list = [ 266 form.list = [
262 cgi.MiniFieldStorage('page_size', page_size), 267 cgi.MiniFieldStorage('@page_size', page_size),
263 cgi.MiniFieldStorage('page_index', 1) 268 cgi.MiniFieldStorage('@page_index', 1)
264 ] 269 ]
265 results = self.server.get_collection('issue', form) 270 results = self.server.get_collection('issue', form)
266 self.assertEqual(self.dummy_client.response_code, 200) 271 self.assertEqual(self.dummy_client.response_code, 200)
267 self.assertEqual(len(results['data']['collection']), 272 self.assertEqual(len(results['data']['collection']),
268 page_one_expected) 273 page_one_expected)
269 self.assertTrue('@links' in results['data']) 274 self.assertTrue('@links' in results['data'])
270 self.assertTrue('self' in results['data']['@links']) 275 self.assertTrue('self' in results['data']['@links'])
271 self.assertTrue('next' in results['data']['@links']) 276 self.assertTrue('next' in results['data']['@links'])
272 self.assertFalse('prev' in results['data']['@links']) 277 self.assertFalse('prev' in results['data']['@links'])
273 self.assertEqual(results['data']['@links']['self'][0]['uri'], 278 self.assertEqual(results['data']['@links']['self'][0]['uri'],
274 "%s?page_index=1&page_size=%s"%(base_url,page_size)) 279 "%s?@page_index=1&@page_size=%s"%(base_url,page_size))
275 self.assertEqual(results['data']['@links']['next'][0]['uri'], 280 self.assertEqual(results['data']['@links']['next'][0]['uri'],
276 "%s?page_index=2&page_size=%s"%(base_url,page_size)) 281 "%s?@page_index=2&@page_size=%s"%(base_url,page_size))
277 282
278 page_one_results = results # save this for later 283 page_one_results = results # save this for later
279 284
280 # Retrieve page 2 285 # Retrieve page 2
281 form = cgi.FieldStorage() 286 form = cgi.FieldStorage()
282 form.list = [ 287 form.list = [
283 cgi.MiniFieldStorage('page_size', page_size), 288 cgi.MiniFieldStorage('@page_size', page_size),
284 cgi.MiniFieldStorage('page_index', 2) 289 cgi.MiniFieldStorage('@page_index', 2)
285 ] 290 ]
286 results = self.server.get_collection('issue', form) 291 results = self.server.get_collection('issue', form)
287 self.assertEqual(self.dummy_client.response_code, 200) 292 self.assertEqual(self.dummy_client.response_code, 200)
288 self.assertEqual(len(results['data']['collection']), page_two_expected) 293 self.assertEqual(len(results['data']['collection']), page_two_expected)
289 self.assertTrue('@links' in results['data']) 294 self.assertTrue('@links' in results['data'])
290 self.assertTrue('self' in results['data']['@links']) 295 self.assertTrue('self' in results['data']['@links'])
291 self.assertTrue('next' in results['data']['@links']) 296 self.assertTrue('next' in results['data']['@links'])
292 self.assertTrue('prev' in results['data']['@links']) 297 self.assertTrue('prev' in results['data']['@links'])
293 self.assertEqual(results['data']['@links']['self'][0]['uri'], 298 self.assertEqual(results['data']['@links']['self'][0]['uri'],
294 "http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/issue?page_index=2&page_size=%s"%page_size) 299 "http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/issue?@page_index=2&@page_size=%s"%page_size)
295 self.assertEqual(results['data']['@links']['next'][0]['uri'], 300 self.assertEqual(results['data']['@links']['next'][0]['uri'],
296 "http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/issue?page_index=3&page_size=%s"%page_size) 301 "http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/issue?@page_index=3&@page_size=%s"%page_size)
297 self.assertEqual(results['data']['@links']['prev'][0]['uri'], 302 self.assertEqual(results['data']['@links']['prev'][0]['uri'],
298 "http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/issue?page_index=1&page_size=%s"%page_size) 303 "http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/issue?@page_index=1&@page_size=%s"%page_size)
299 self.assertEqual(results['data']['@links']['self'][0]['rel'], 304 self.assertEqual(results['data']['@links']['self'][0]['rel'],
300 'self') 305 'self')
301 self.assertEqual(results['data']['@links']['next'][0]['rel'], 306 self.assertEqual(results['data']['@links']['next'][0]['rel'],
302 'next') 307 'next')
303 self.assertEqual(results['data']['@links']['prev'][0]['rel'], 308 self.assertEqual(results['data']['@links']['prev'][0]['rel'],
304 'prev') 309 'prev')
305 310
306 # Retrieve page 3 311 # Retrieve page 3
307 form = cgi.FieldStorage() 312 form = cgi.FieldStorage()
308 form.list = [ 313 form.list = [
309 cgi.MiniFieldStorage('page_size', page_size), 314 cgi.MiniFieldStorage('@page_size', page_size),
310 cgi.MiniFieldStorage('page_index', 3) 315 cgi.MiniFieldStorage('@page_index', 3)
311 ] 316 ]
312 results = self.server.get_collection('issue', form) 317 results = self.server.get_collection('issue', form)
313 self.assertEqual(self.dummy_client.response_code, 200) 318 self.assertEqual(self.dummy_client.response_code, 200)
314 self.assertEqual(len(results['data']['collection']), page_three_expected) 319 self.assertEqual(len(results['data']['collection']), page_three_expected)
315 self.assertTrue('@links' in results['data']) 320 self.assertTrue('@links' in results['data'])
316 self.assertTrue('self' in results['data']['@links']) 321 self.assertTrue('self' in results['data']['@links'])
317 self.assertFalse('next' in results['data']['@links']) 322 self.assertFalse('next' in results['data']['@links'])
318 self.assertTrue('prev' in results['data']['@links']) 323 self.assertTrue('prev' in results['data']['@links'])
319 self.assertEqual(results['data']['@links']['self'][0]['uri'], 324 self.assertEqual(results['data']['@links']['self'][0]['uri'],
320 "http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/issue?page_index=3&page_size=%s"%page_size) 325 "http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/issue?@page_index=3&@page_size=%s"%page_size)
321 self.assertEqual(results['data']['@links']['prev'][0]['uri'], 326 self.assertEqual(results['data']['@links']['prev'][0]['uri'],
322 "http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/issue?page_index=2&page_size=%s"%page_size) 327 "http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/issue?@page_index=2&@page_size=%s"%page_size)
323 328
324 # Verify that page_index is optional 329 # Verify that page_index is optional
325 # Should start at page 1 330 # Should start at page 1
326 form = cgi.FieldStorage() 331 form = cgi.FieldStorage()
327 form.list = [ 332 form.list = [
328 cgi.MiniFieldStorage('page_size', page_size), 333 cgi.MiniFieldStorage('@page_size', page_size),
329 ] 334 ]
330 results = self.server.get_collection('issue', form) 335 results = self.server.get_collection('issue', form)
331 self.assertEqual(self.dummy_client.response_code, 200) 336 self.assertEqual(self.dummy_client.response_code, 200)
332 self.assertEqual(len(results['data']['collection']), page_size) 337 self.assertEqual(len(results['data']['collection']), page_size)
333 self.assertTrue('@links' in results['data']) 338 self.assertTrue('@links' in results['data'])
694 self.assertEqual(self.dummy_client.response_code, 201) 699 self.assertEqual(self.dummy_client.response_code, 201)
695 fileid = results['data']['id'] 700 fileid = results['data']['id']
696 results = self.server.get_element('file', fileid, self.empty_form) 701 results = self.server.get_element('file', fileid, self.empty_form)
697 results = results['data'] 702 results = results['data']
698 self.assertEqual(self.dummy_client.response_code, 200) 703 self.assertEqual(self.dummy_client.response_code, 200)
704 self.assertEqual(results['attributes']['content'],
705 {'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/file1/'})
706
707 # File content is only shown with verbose=3
708 form = cgi.FieldStorage()
709 form.list = [
710 cgi.MiniFieldStorage('@verbose', '3')
711 ]
712 results = self.server.get_element('file', fileid, form)
713 results = results['data']
714 self.assertEqual(self.dummy_client.response_code, 200)
699 self.assertEqual(results['attributes']['content'], 'hello\r\nthere') 715 self.assertEqual(results['attributes']['content'], 'hello\r\nthere')
700 716
701 def testAuthDeniedPut(self): 717 def testAuthDeniedPut(self):
702 """ 718 """
703 Test unauthorized PUT request 719 Test unauthorized PUT request
770 self.assertEqual(self.dummy_client.response_code, 412) 786 self.assertEqual(self.dummy_client.response_code, 412)
771 results = self.server.get_element('issue', issue_id, self.empty_form) 787 results = self.server.get_element('issue', issue_id, self.empty_form)
772 results = results['data'] 788 results = results['data']
773 self.assertEqual(self.dummy_client.response_code, 200) 789 self.assertEqual(self.dummy_client.response_code, 200)
774 self.assertEqual(len(results['attributes']['nosy']), 1) 790 self.assertEqual(len(results['attributes']['nosy']), 1)
775 self.assertListEqual(results['attributes']['nosy'], ['1']) 791 self.assertListEqual(results['attributes']['nosy'],
792 [{'id': '1', 'link': self.url_pfx + 'user/1'}])
776 793
777 form = cgi.FieldStorage() 794 form = cgi.FieldStorage()
778 etag = calculate_etag(self.db.issue.getnode(issue_id)) 795 etag = calculate_etag(self.db.issue.getnode(issue_id))
779 form.list.append(cgi.MiniFieldStorage('@etag', etag)) 796 form.list.append(cgi.MiniFieldStorage('@etag', etag))
780 # remove the title and nosy 797 # remove the title and nosy
790 'issue', issue_id, 'nosy', form 807 'issue', issue_id, 'nosy', form
791 ) 808 )
792 self.assertEqual(self.dummy_client.response_code, 200) 809 self.assertEqual(self.dummy_client.response_code, 200)
793 810
794 # verify the result 811 # verify the result
795 results = self.server.get_element('issue', issue_id, self.empty_form) 812 results = self.server.get_element('issue', issue_id, self.terse_form)
796 results = results['data'] 813 results = results['data']
797 self.assertEqual(self.dummy_client.response_code, 200) 814 self.assertEqual(self.dummy_client.response_code, 200)
798 self.assertEqual(len(results['attributes']['nosy']), 0) 815 self.assertEqual(len(results['attributes']['nosy']), 0)
799 self.assertListEqual(results['attributes']['nosy'], []) 816 self.assertListEqual(results['attributes']['nosy'], [])
800 self.assertEqual(results['attributes']['title'], None) 817 self.assertEqual(results['attributes']['title'], None)
808 825
809 # fail to add userid 2 to the nosy list 826 # fail to add userid 2 to the nosy list
810 # no etag 827 # no etag
811 form = cgi.FieldStorage() 828 form = cgi.FieldStorage()
812 form.list = [ 829 form.list = [
813 cgi.MiniFieldStorage('op', 'add'), 830 cgi.MiniFieldStorage('@op', 'add'),
814 cgi.MiniFieldStorage('nosy', '2') 831 cgi.MiniFieldStorage('nosy', '2')
815 ] 832 ]
816 results = self.server.patch_element('issue', issue_id, form) 833 results = self.server.patch_element('issue', issue_id, form)
817 self.assertEqual(self.dummy_client.response_code, 412) 834 self.assertEqual(self.dummy_client.response_code, 412)
818 835
819 etag = calculate_etag(self.db.issue.getnode(issue_id)) 836 etag = calculate_etag(self.db.issue.getnode(issue_id))
820 form = cgi.FieldStorage() 837 form = cgi.FieldStorage()
821 form.list = [ 838 form.list = [
822 cgi.MiniFieldStorage('op', 'add'), 839 cgi.MiniFieldStorage('@op', 'add'),
823 cgi.MiniFieldStorage('nosy', '2'), 840 cgi.MiniFieldStorage('nosy', '2'),
824 cgi.MiniFieldStorage('@etag', etag) 841 cgi.MiniFieldStorage('@etag', etag)
825 ] 842 ]
826 results = self.server.patch_element('issue', issue_id, form) 843 results = self.server.patch_element('issue', issue_id, form)
827 self.assertEqual(self.dummy_client.response_code, 200) 844 self.assertEqual(self.dummy_client.response_code, 200)
828 845
829 # verify the result 846 # verify the result
830 results = self.server.get_element('issue', issue_id, self.empty_form) 847 results = self.server.get_element('issue', issue_id, self.terse_form)
831 results = results['data'] 848 results = results['data']
832 self.assertEqual(self.dummy_client.response_code, 200) 849 self.assertEqual(self.dummy_client.response_code, 200)
833 self.assertEqual(len(results['attributes']['nosy']), 2) 850 self.assertEqual(len(results['attributes']['nosy']), 2)
834 self.assertListEqual(results['attributes']['nosy'], ['1', '2']) 851 self.assertListEqual(results['attributes']['nosy'], ['1', '2'])
835 852
842 859
843 # fail to replace userid 2 to the nosy list and status = 3 860 # fail to replace userid 2 to the nosy list and status = 3
844 # no etag. 861 # no etag.
845 form = cgi.FieldStorage() 862 form = cgi.FieldStorage()
846 form.list = [ 863 form.list = [
847 cgi.MiniFieldStorage('op', 'replace'), 864 cgi.MiniFieldStorage('@op', 'replace'),
848 cgi.MiniFieldStorage('nosy', '2'), 865 cgi.MiniFieldStorage('nosy', '2'),
849 cgi.MiniFieldStorage('status', '3') 866 cgi.MiniFieldStorage('status', '3')
850 ] 867 ]
851 results = self.server.patch_element('issue', issue_id, form) 868 results = self.server.patch_element('issue', issue_id, form)
852 self.assertEqual(self.dummy_client.response_code, 412) 869 self.assertEqual(self.dummy_client.response_code, 412)
853 results = self.server.get_element('issue', issue_id, self.empty_form) 870 results = self.server.get_element('issue', issue_id, self.terse_form)
854 results = results['data'] 871 results = results['data']
855 self.assertEqual(self.dummy_client.response_code, 200) 872 self.assertEqual(self.dummy_client.response_code, 200)
856 self.assertEqual(results['attributes']['status'], '1') 873 self.assertEqual(results['attributes']['status'], '1')
857 self.assertEqual(len(results['attributes']['nosy']), 1) 874 self.assertEqual(len(results['attributes']['nosy']), 1)
858 self.assertListEqual(results['attributes']['nosy'], ['1']) 875 self.assertListEqual(results['attributes']['nosy'], ['1'])
859 876
860 # replace userid 2 to the nosy list and status = 3 877 # replace userid 2 to the nosy list and status = 3
861 etag = calculate_etag(self.db.issue.getnode(issue_id)) 878 etag = calculate_etag(self.db.issue.getnode(issue_id))
862 form = cgi.FieldStorage() 879 form = cgi.FieldStorage()
863 form.list = [ 880 form.list = [
864 cgi.MiniFieldStorage('op', 'replace'), 881 cgi.MiniFieldStorage('@op', 'replace'),
865 cgi.MiniFieldStorage('nosy', '2'), 882 cgi.MiniFieldStorage('nosy', '2'),
866 cgi.MiniFieldStorage('status', '3'), 883 cgi.MiniFieldStorage('status', '3'),
867 cgi.MiniFieldStorage('@etag', etag) 884 cgi.MiniFieldStorage('@etag', etag)
868 ] 885 ]
869 results = self.server.patch_element('issue', issue_id, form) 886 results = self.server.patch_element('issue', issue_id, form)
870 self.assertEqual(self.dummy_client.response_code, 200) 887 self.assertEqual(self.dummy_client.response_code, 200)
871 # verify the result 888 # verify the result
872 results = self.server.get_element('issue', issue_id, self.empty_form) 889 results = self.server.get_element('issue', issue_id, self.terse_form)
873 results = results['data'] 890 results = results['data']
874 self.assertEqual(self.dummy_client.response_code, 200) 891 self.assertEqual(self.dummy_client.response_code, 200)
875 self.assertEqual(results['attributes']['status'], '3') 892 self.assertEqual(results['attributes']['status'], '3')
876 self.assertEqual(len(results['attributes']['nosy']), 1) 893 self.assertEqual(len(results['attributes']['nosy']), 1)
877 self.assertListEqual(results['attributes']['nosy'], ['2']) 894 self.assertListEqual(results['attributes']['nosy'], ['2'])
885 902
886 # fail to remove the nosy list and the title 903 # fail to remove the nosy list and the title
887 # no etag 904 # no etag
888 form = cgi.FieldStorage() 905 form = cgi.FieldStorage()
889 form.list = [ 906 form.list = [
890 cgi.MiniFieldStorage('op', 'remove'), 907 cgi.MiniFieldStorage('@op', 'remove'),
891 cgi.MiniFieldStorage('nosy', ''), 908 cgi.MiniFieldStorage('nosy', ''),
892 cgi.MiniFieldStorage('title', '') 909 cgi.MiniFieldStorage('title', '')
893 ] 910 ]
894 results = self.server.patch_element('issue', issue_id, form) 911 results = self.server.patch_element('issue', issue_id, form)
895 self.assertEqual(self.dummy_client.response_code, 412) 912 self.assertEqual(self.dummy_client.response_code, 412)
896 results = self.server.get_element('issue', issue_id, self.empty_form) 913 results = self.server.get_element('issue', issue_id, self.terse_form)
897 results = results['data'] 914 results = results['data']
898 self.assertEqual(self.dummy_client.response_code, 200) 915 self.assertEqual(self.dummy_client.response_code, 200)
899 self.assertEqual(results['attributes']['title'], 'foo') 916 self.assertEqual(results['attributes']['title'], 'foo')
900 self.assertEqual(len(results['attributes']['nosy']), 2) 917 self.assertEqual(len(results['attributes']['nosy']), 2)
901 self.assertEqual(results['attributes']['nosy'], ['1', '2']) 918 self.assertEqual(results['attributes']['nosy'], ['1', '2'])
902 919
903 # remove the nosy list and the title 920 # remove the nosy list and the title
904 form = cgi.FieldStorage() 921 form = cgi.FieldStorage()
905 etag = calculate_etag(self.db.issue.getnode(issue_id)) 922 etag = calculate_etag(self.db.issue.getnode(issue_id))
906 form.list = [ 923 form.list = [
907 cgi.MiniFieldStorage('op', 'remove'), 924 cgi.MiniFieldStorage('@op', 'remove'),
908 cgi.MiniFieldStorage('nosy', ''), 925 cgi.MiniFieldStorage('nosy', ''),
909 cgi.MiniFieldStorage('title', ''), 926 cgi.MiniFieldStorage('title', ''),
910 cgi.MiniFieldStorage('@etag', etag) 927 cgi.MiniFieldStorage('@etag', etag)
911 ] 928 ]
912 results = self.server.patch_element('issue', issue_id, form) 929 results = self.server.patch_element('issue', issue_id, form)
913 self.assertEqual(self.dummy_client.response_code, 200) 930 self.assertEqual(self.dummy_client.response_code, 200)
914 931
915 # verify the result 932 # verify the result
916 results = self.server.get_element('issue', issue_id, self.empty_form) 933 results = self.server.get_element('issue', issue_id, self.terse_form)
917 results = results['data'] 934 results = results['data']
918 self.assertEqual(self.dummy_client.response_code, 200) 935 self.assertEqual(self.dummy_client.response_code, 200)
919 self.assertEqual(results['attributes']['title'], None) 936 self.assertEqual(results['attributes']['title'], None)
920 self.assertEqual(len(results['attributes']['nosy']), 0) 937 self.assertEqual(len(results['attributes']['nosy']), 0)
921 self.assertEqual(results['attributes']['nosy'], []) 938 self.assertEqual(results['attributes']['nosy'], [])
929 946
930 # fail to execute action retire 947 # fail to execute action retire
931 # no etag 948 # no etag
932 form = cgi.FieldStorage() 949 form = cgi.FieldStorage()
933 form.list = [ 950 form.list = [
934 cgi.MiniFieldStorage('op', 'action'), 951 cgi.MiniFieldStorage('@op', 'action'),
935 cgi.MiniFieldStorage('action_name', 'retire') 952 cgi.MiniFieldStorage('@action_name', 'retire')
936 ] 953 ]
937 results = self.server.patch_element('issue', issue_id, form) 954 results = self.server.patch_element('issue', issue_id, form)
938 self.assertEqual(self.dummy_client.response_code, 412) 955 self.assertEqual(self.dummy_client.response_code, 412)
939 self.assertFalse(self.db.issue.is_retired(issue_id)) 956 self.assertFalse(self.db.issue.is_retired(issue_id))
940 957
941 # execute action retire 958 # execute action retire
942 form = cgi.FieldStorage() 959 form = cgi.FieldStorage()
943 etag = calculate_etag(self.db.issue.getnode(issue_id)) 960 etag = calculate_etag(self.db.issue.getnode(issue_id))
944 form.list = [ 961 form.list = [
945 cgi.MiniFieldStorage('op', 'action'), 962 cgi.MiniFieldStorage('@op', 'action'),
946 cgi.MiniFieldStorage('action_name', 'retire'), 963 cgi.MiniFieldStorage('@action_name', 'retire'),
947 cgi.MiniFieldStorage('@etag', etag) 964 cgi.MiniFieldStorage('@etag', etag)
948 ] 965 ]
949 results = self.server.patch_element('issue', issue_id, form) 966 results = self.server.patch_element('issue', issue_id, form)
950 self.assertEqual(self.dummy_client.response_code, 200) 967 self.assertEqual(self.dummy_client.response_code, 200)
951 968
961 978
962 # fail to remove the nosy list and the title 979 # fail to remove the nosy list and the title
963 # no etag 980 # no etag
964 form = cgi.FieldStorage() 981 form = cgi.FieldStorage()
965 form.list = [ 982 form.list = [
966 cgi.MiniFieldStorage('op', 'remove'), 983 cgi.MiniFieldStorage('@op', 'remove'),
967 cgi.MiniFieldStorage('nosy', '1, 2'), 984 cgi.MiniFieldStorage('nosy', '1, 2'),
968 ] 985 ]
969 results = self.server.patch_element('issue', issue_id, form) 986 results = self.server.patch_element('issue', issue_id, form)
970 self.assertEqual(self.dummy_client.response_code, 412) 987 self.assertEqual(self.dummy_client.response_code, 412)
971 results = self.server.get_element('issue', issue_id, self.empty_form) 988 results = self.server.get_element('issue', issue_id, self.terse_form)
972 results = results['data'] 989 results = results['data']
973 self.assertEqual(self.dummy_client.response_code, 200) 990 self.assertEqual(self.dummy_client.response_code, 200)
974 self.assertEqual(len(results['attributes']['nosy']), 3) 991 self.assertEqual(len(results['attributes']['nosy']), 3)
975 self.assertEqual(results['attributes']['nosy'], ['1', '2', '3']) 992 self.assertEqual(results['attributes']['nosy'], ['1', '2', '3'])
976 993
977 # remove the nosy list and the title 994 # remove the nosy list and the title
978 form = cgi.FieldStorage() 995 form = cgi.FieldStorage()
979 etag = calculate_etag(self.db.issue.getnode(issue_id)) 996 etag = calculate_etag(self.db.issue.getnode(issue_id))
980 form.list = [ 997 form.list = [
981 cgi.MiniFieldStorage('op', 'remove'), 998 cgi.MiniFieldStorage('@op', 'remove'),
982 cgi.MiniFieldStorage('nosy', '1, 2'), 999 cgi.MiniFieldStorage('nosy', '1, 2'),
983 cgi.MiniFieldStorage('@etag', etag) 1000 cgi.MiniFieldStorage('@etag', etag)
984 ] 1001 ]
985 results = self.server.patch_element('issue', issue_id, form) 1002 results = self.server.patch_element('issue', issue_id, form)
986 self.assertEqual(self.dummy_client.response_code, 200) 1003 self.assertEqual(self.dummy_client.response_code, 200)
987 1004
988 # verify the result 1005 # verify the result
989 results = self.server.get_element('issue', issue_id, self.empty_form) 1006 results = self.server.get_element('issue', issue_id, self.terse_form)
990 results = results['data'] 1007 results = results['data']
991 self.assertEqual(self.dummy_client.response_code, 200) 1008 self.assertEqual(self.dummy_client.response_code, 200)
992 self.assertEqual(len(results['attributes']['nosy']), 1) 1009 self.assertEqual(len(results['attributes']['nosy']), 1)
993 self.assertEqual(results['attributes']['nosy'], ['3']) 1010 self.assertEqual(results['attributes']['nosy'], ['3'])
994 1011

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