622
623
expected_testing_done_text_type='plain',
623
624
expected_custom_field_text_type='plain')
626
@webapi_test_template
627
def test_put_with_branch(self):
628
"""Testing the PUT <URL> API with branch field"""
629
review_request = self.create_review_request(submitter=self.user,
631
ReviewRequestDraft.create(review_request)
633
self.spy_on(ChangeDescription.save, owner=ChangeDescription)
634
self.spy_on(ReviewRequestDraft.save, owner=ReviewRequestDraft)
637
get_review_request_draft_url(review_request),
639
'branch': 'new branch',
641
expected_mimetype=review_request_draft_item_mimetype)
643
self.assertEqual(rsp['stat'], 'ok')
644
self.assertEqual(rsp['draft']['branch'], 'new branch')
646
draft = ReviewRequestDraft.objects.get(pk=rsp['draft']['id'])
647
self.assertEqual(draft.branch, 'new branch')
649
self.assertFalse(ChangeDescription.save.called)
650
self.assertTrue(ReviewRequestDraft.save.last_called_with(
651
update_fields=['branch', 'last_updated']))
653
@webapi_test_template
654
def test_put_with_bugs_closed(self):
655
"""Testing the PUT <URL> API with bugs_closed field"""
656
review_request = self.create_review_request(submitter=self.user,
658
ReviewRequestDraft.create(review_request)
660
self.spy_on(ChangeDescription.save, owner=ChangeDescription)
661
self.spy_on(ReviewRequestDraft.save, owner=ReviewRequestDraft)
664
get_review_request_draft_url(review_request),
666
'bugs_closed': '10,20, 300,,',
668
expected_mimetype=review_request_draft_item_mimetype)
670
self.assertEqual(rsp['stat'], 'ok')
671
self.assertEqual(rsp['draft']['bugs_closed'], ['10', '20', '300'])
673
draft = ReviewRequestDraft.objects.get(pk=rsp['draft']['id'])
674
self.assertEqual(draft.get_bug_list(), ['10', '20', '300'])
676
self.assertFalse(ChangeDescription.save.called)
677
self.assertTrue(ReviewRequestDraft.save.last_called_with(
678
update_fields=['bugs_closed', 'last_updated']))
680
@webapi_test_template
681
def test_put_with_changedescription(self):
682
"""Testing the PUT <URL> with a change description"""
683
review_request = self.create_review_request(submitter=self.user,
685
ReviewRequestDraft.create(review_request)
687
self.spy_on(ChangeDescription.save, owner=ChangeDescription)
688
self.spy_on(ReviewRequestDraft.save, owner=ReviewRequestDraft)
690
changedesc = 'This is a test change description.'
693
get_review_request_draft_url(review_request),
695
'changedescription': changedesc,
697
expected_mimetype=review_request_draft_item_mimetype)
699
self.assertEqual(rsp['stat'], 'ok')
700
self.assertEqual(rsp['draft']['changedescription'], changedesc)
702
draft = ReviewRequestDraft.objects.get(pk=rsp['draft']['id'])
703
self.assertIsNotNone(draft.changedesc)
704
self.assertEqual(draft.changedesc.text, changedesc)
706
self.assertTrue(ChangeDescription.save.last_called_with(
707
update_fields=['text']))
708
self.assertFalse(ReviewRequestDraft.save.called)
625
710
def test_put_with_commit_id(self):
626
711
"""Testing the PUT review-requests/<id>/draft/ API with commit_id"""
627
712
review_request = self.create_review_request(submitter=self.user,
714
ReviewRequestDraft.create(review_request)
716
self.spy_on(ChangeDescription.save, owner=ChangeDescription)
717
self.spy_on(ReviewRequestDraft.save, owner=ReviewRequestDraft)
629
719
commit_id = 'abc123'
631
721
rsp = self.api_put(
807
960
self.assertEqual(list(depends_1.draft_blocks.all()), [draft])
808
961
self.assertEqual(bad_depends.draft_blocks.count(), 0)
963
self.assertFalse(ChangeDescription.save.called)
964
self.assertTrue(ReviewRequestDraft.save.last_called_with(
965
update_fields=['last_updated']))
810
967
def test_put_with_depends_on_invalid_id(self):
811
968
"""Testing the PUT review-requests/<id>/draft/ API
812
969
with depends_on field and invalid ID
814
971
review_request = self.create_review_request(submitter=self.user,
973
ReviewRequestDraft.create(review_request)
975
self.spy_on(ChangeDescription.save, owner=ChangeDescription)
976
self.spy_on(ReviewRequestDraft.save, owner=ReviewRequestDraft)
817
978
rsp = self.api_put(
818
979
get_review_request_draft_url(review_request),
819
{'depends_on': '10000'},
981
'depends_on': '10000',
820
983
expected_status=400)
822
985
self.assertEqual(rsp['stat'], 'fail')
986
self.assertEqual(rsp['err']['code'], INVALID_FORM_DATA.code)
987
self.assertEqual(rsp['draft']['depends_on'], [])
988
self.assertEqual(rsp['fields'], {
989
'depends_on': ['10000'],
824
992
draft = review_request.get_draft()
825
993
self.assertEqual(draft.depends_on.count(), 0)
995
self.assertFalse(ChangeDescription.save.called)
996
self.assertFalse(ReviewRequestDraft.save.called)
998
@webapi_test_template
999
def test_put_with_summary(self):
1000
"""Testing the PUT <URL> API with summary field"""
1001
review_request = self.create_review_request(submitter=self.user,
1003
ReviewRequestDraft.create(review_request)
1005
self.spy_on(ChangeDescription.save, owner=ChangeDescription)
1006
self.spy_on(ReviewRequestDraft.save, owner=ReviewRequestDraft)
1009
get_review_request_draft_url(review_request),
1011
'summary': 'New summary',
1013
expected_mimetype=review_request_draft_item_mimetype)
1015
self.assertEqual(rsp['stat'], 'ok')
1016
self.assertEqual(rsp['draft']['summary'], 'New summary')
1018
draft = ReviewRequestDraft.objects.get(pk=rsp['draft']['id'])
1019
self.assertEqual(draft.summary, 'New summary')
1021
self.assertFalse(ChangeDescription.save.called)
1022
self.assertTrue(ReviewRequestDraft.save.last_called_with(
1023
update_fields=['last_updated', 'summary']))
1025
@webapi_test_template
1026
def test_put_with_summary_with_newline(self):
1027
"""Testing the PUT <URL> API with summary field containing newline"""
1028
review_request = self.create_review_request(submitter=self.user,
1030
ReviewRequestDraft.create(review_request)
1032
self.spy_on(ChangeDescription.save, owner=ChangeDescription)
1033
self.spy_on(ReviewRequestDraft.save, owner=ReviewRequestDraft)
1036
get_review_request_draft_url(review_request),
1038
'summary': 'New summary\nbah',
1040
expected_status=400)
1042
self.assertEqual(rsp['stat'], 'fail')
1043
self.assertEqual(rsp['err']['code'], INVALID_FORM_DATA.code)
1044
self.assertEqual(rsp['draft']['target_groups'], [])
1045
self.assertTrue(rsp['fields'], {
1046
'summary': ["The summary can't contain a newline"],
1049
draft = ReviewRequestDraft.objects.get(pk=rsp['draft']['id'])
1050
self.assertEqual(draft.summary, 'Test Summary')
1052
self.assertFalse(ChangeDescription.save.called)
1053
self.assertFalse(ReviewRequestDraft.save.called)
1055
@webapi_test_template
1056
def test_put_with_target_groups(self):
1057
"""Testing the PUT <URL> API with target_groups field"""
1058
group1 = self.create_review_group(name='group1')
1059
group2 = self.create_review_group(name='group2')
1061
review_request = self.create_review_request(submitter=self.user,
1063
ReviewRequestDraft.create(review_request)
1065
self.spy_on(ChangeDescription.save, owner=ChangeDescription)
1066
self.spy_on(ReviewRequestDraft.save, owner=ReviewRequestDraft)
1069
get_review_request_draft_url(review_request),
1071
'target_groups': 'group1,group2',
1073
expected_mimetype=review_request_draft_item_mimetype)
1075
self.assertEqual(rsp['stat'], 'ok')
1077
rsp['draft']['target_groups'],
1080
'href': 'http://testserver/api/groups/group1/',
1085
'href': 'http://testserver/api/groups/group2/',
1091
draft = ReviewRequestDraft.objects.get(pk=rsp['draft']['id'])
1092
self.assertEqual(list(draft.target_groups.all()),
1095
self.assertFalse(ChangeDescription.save.called)
1096
self.assertTrue(ReviewRequestDraft.save.last_called_with(
1097
update_fields=['last_updated']))
1099
@add_fixtures(['test_site'])
1100
@webapi_test_template
1101
def test_put_with_target_groups_with_local_site(self):
1102
"""Testing the PUT <URL> API with target_groups field and Local Site
1105
self.user = self._login_user(local_site=True)
1107
review_request = self.create_review_request(submitter=self.user,
1108
with_local_site=True,
1110
ReviewRequestDraft.create(review_request)
1112
local_site = review_request.local_site
1114
group1 = self.create_review_group(name='group1',
1115
local_site=local_site)
1116
group2 = self.create_review_group(name='group2',
1117
local_site=local_site)
1119
self.spy_on(ChangeDescription.save, owner=ChangeDescription)
1120
self.spy_on(ReviewRequestDraft.save, owner=ReviewRequestDraft)
1123
get_review_request_draft_url(review_request, local_site),
1125
'target_groups': 'group1,group2',
1127
expected_mimetype=review_request_draft_item_mimetype)
1129
self.assertEqual(rsp['stat'], 'ok')
1131
rsp['draft']['target_groups'],
1134
'href': 'http://testserver/s/local-site-1/'
1135
'api/groups/group1/',
1140
'href': 'http://testserver/s/local-site-1/'
1141
'api/groups/group2/',
1147
draft = ReviewRequestDraft.objects.get(pk=rsp['draft']['id'])
1148
self.assertEqual(list(draft.target_groups.all()),
1151
self.assertFalse(ChangeDescription.save.called)
1152
self.assertTrue(ReviewRequestDraft.save.last_called_with(
1153
update_fields=['last_updated']))
1155
@add_fixtures(['test_site'])
1156
@webapi_test_template
1157
def test_put_with_target_groups_with_local_site_and_global_group(self):
1158
"""Testing the PUT <URL> API with target_groups field and Local Site
1159
draft with global group
1161
self.user = self._login_user(local_site=True)
1163
review_request = self.create_review_request(submitter=self.user,
1164
with_local_site=True,
1166
ReviewRequestDraft.create(review_request)
1168
local_site = review_request.local_site
1170
self.create_review_group(name='group1', local_site=local_site)
1171
self.create_review_group(name='group2')
1173
self.spy_on(ChangeDescription.save, owner=ChangeDescription)
1174
self.spy_on(ReviewRequestDraft.save, owner=ReviewRequestDraft)
1177
get_review_request_draft_url(review_request, local_site),
1179
'target_groups': 'group1,group2',
1181
expected_status=400)
1183
self.assertEqual(rsp['stat'], 'fail')
1184
self.assertEqual(rsp['err']['code'], INVALID_FORM_DATA.code)
1185
self.assertEqual(rsp['draft']['target_groups'], [])
1186
self.assertTrue(rsp['fields'], {
1187
'target_groups': ['group2'],
1190
draft = ReviewRequestDraft.objects.get(pk=rsp['draft']['id'])
1191
self.assertFalse(draft.target_groups.exists())
1193
self.assertFalse(ChangeDescription.save.called)
1194
self.assertFalse(ReviewRequestDraft.save.called)
1196
@webapi_test_template
1197
def test_put_with_target_people_and_invalid_user(self):
1198
"""Testing the PUT <URL> API with target_people containing invalid
1201
review_request = self.create_review_request(submitter=self.user)
1202
draft = ReviewRequestDraft.create(review_request)
1204
self.spy_on(ChangeDescription.save, owner=ChangeDescription)
1205
self.spy_on(ReviewRequestDraft.save, owner=ReviewRequestDraft)
1208
get_review_request_draft_url(review_request, None),
1210
'target_people': 'invalid'
1212
expected_status=INVALID_FORM_DATA.http_status)
1214
self.assertEqual(rsp['stat'], 'fail')
1215
self.assertEqual(rsp['err']['code'], INVALID_FORM_DATA.code)
1216
self.assertEqual(rsp['fields'], {
1217
'target_people': ['invalid'],
1219
self.assertEqual(rsp['draft']['target_people'], [])
1221
draft = ReviewRequestDraft.objects.get(pk=draft.pk)
1222
self.assertFalse(draft.target_people.exists())
1224
self.assertFalse(ChangeDescription.save.called)
1225
self.assertFalse(ReviewRequestDraft.save.called)
1227
@webapi_test_template
1228
def test_put_with_target_people_and_auth_backend_lookup(self):
1229
"""Testing the PUT <URL> API with target_people and unknown user
1230
lookup in auth backend
1232
def _get_or_create_user(*args, **kwargs):
1233
return User.objects.create(username='backend-user')
1235
review_request = self.create_review_request(submitter=self.user)
1236
draft = ReviewRequestDraft.create(review_request)
1238
self.spy_on(ChangeDescription.save, owner=ChangeDescription)
1239
self.spy_on(ReviewRequestDraft.save, owner=ReviewRequestDraft)
1240
self.spy_on(StandardAuthBackend.get_or_create_user,
1241
call_fake=_get_or_create_user)
1244
get_review_request_draft_url(review_request, None),
1246
'target_people': 'backend-user',
1248
expected_mimetype=review_request_draft_item_mimetype)
1250
self.assertEqual(rsp['stat'], 'ok')
1251
self.assertEqual(rsp['draft']['target_people'], [
1253
'href': 'http://testserver/api/users/backend-user/',
1255
'title': 'backend-user',
1259
self.assertTrue(StandardAuthBackend.get_or_create_user.called_with(
1260
username='backend-user'))
1262
draft = ReviewRequestDraft.objects.get(pk=draft.pk)
1263
self.assertEqual(draft.target_people.count(), 1)
1264
self.assertEqual(draft.target_people.get().username, 'backend-user')
1266
self.assertFalse(ChangeDescription.save.called)
1267
self.assertTrue(ReviewRequestDraft.save.last_called_with(
1268
update_fields=['last_updated']))
1270
@webapi_test_template
1271
def test_put_with_target_people_and_auth_backend_lookup_error(self):
1272
"""Testing the PUT <URL> API with target_people and unknown user
1273
lookup in auth backend errors
1275
def _get_or_create_user(*args, **kwargs):
1278
self.spy_on(StandardAuthBackend.get_or_create_user,
1279
call_fake=_get_or_create_user)
1281
review_request = self.create_review_request(submitter=self.user)
1282
draft = ReviewRequestDraft.create(review_request)
1285
get_review_request_draft_url(review_request, None),
1287
'target_people': 'unknown',
1289
expected_status=INVALID_FORM_DATA.http_status)
1291
self.assertEqual(rsp['stat'], 'fail')
1292
self.assertEqual(rsp['err']['code'], INVALID_FORM_DATA.code)
1293
self.assertEqual(rsp['fields'], {
1294
'target_people': ['unknown'],
1296
self.assertEqual(rsp['draft']['target_people'], [])
1298
self.assertTrue(StandardAuthBackend.get_or_create_user.called_with(
1299
username='unknown'))
1301
draft = ReviewRequestDraft.objects.get(pk=draft.pk)
1302
self.assertFalse(draft.target_people.exists())
827
1304
def test_put_with_permission_denied_error(self):
828
1305
"""Testing the PUT review-requests/<id>/draft/ API
829
1306
with Permission Denied error