def test_post_no_history_allowed(self): """Testing the POST <URL> API for a review request created without history support """ repository = self.create_repository(tool_name='Git') review_request = self.create_review_request( repository=repository, submitter=self.user, create_with_history=False) ReviewRequestDraft.create(review_request) diffset = self.create_diffset(review_request, draft=True) diff = SimpleUploadedFile('diff', self._DEFAULT_DIFF_CONTENTS, content_type='text/x-patch') with override_feature_checks(self.override_features): rsp = self.api_post( get_draft_diffcommit_list_url(review_request, diffset.revision), dict(self._DEFAULT_POST_DATA, **{ 'diff': diff, }), expected_status=400) self.assertEqual(rsp['stat'], 'fail') self.assertEqual(rsp['err']['code'], INVALID_ATTRIBUTE.code) self.assertEqual( rsp['reason'], 'This review request was not created with support for multiple ' 'commits.\n\n' 'Use the draft_diff resource to upload diffs instead. See the ' 'draft_diff link on the parent resource for the URL.')
def test_post_too_large(self): """Testing the POST <URL> API with a diff that is too large""" siteconfig = SiteConfiguration.objects.get_current() max_diff_size = siteconfig.get('diffviewer_max_diff_size') siteconfig.set('diffviewer_max_diff_size', 1) siteconfig.save() repository = self.create_repository(tool_name='Git') review_request = self.create_review_request( repository=repository, submitter=self.user, create_with_history=True) diffset = self.create_diffset(review_request, draft=True) diff = SimpleUploadedFile('diff', self._DEFAULT_DIFF_CONTENTS, content_type='text/x-patch') try: with override_feature_checks(self.override_features): rsp = self.api_post( get_draft_diffcommit_list_url(review_request, diffset.revision), dict(self._DEFAULT_POST_DATA, **{ 'diff': diff, }), expected_status=400) finally: siteconfig.set('diffviewer_max_diff_size', max_diff_size) siteconfig.save() self.assertEqual(rsp['stat'], 'fail') self.assertEqual(rsp['err']['code'], DIFF_TOO_BIG.code) self.assertEqual(rsp['max_size'], 1)
def setup_basic_post_test(self, user, with_local_site=False, local_site_name=None, post_valid_data=False): repository = self.create_repository(tool_name='Git') review_request = self.create_review_request( repository=repository, submitter=user, with_local_site=with_local_site, create_with_history=True) diffset = self.create_diffset(review_request, draft=True) if post_valid_data: diff = SimpleUploadedFile('diff', self._DEFAULT_DIFF_CONTENTS) post_data = dict(self._DEFAULT_POST_DATA, **{'diff': diff}) else: post_data = {} return ( get_draft_diffcommit_list_url(review_request, diffset.revision, local_site_name=local_site_name), draft_diffcommit_item_mimetype, post_data, [], )
def test_post_no_history_allowed(self): """Testing the POST <URL> API for a review request created without history support """ repository = self.create_repository(tool_name='Git') review_request = self.create_review_request(repository=repository, submitter=self.user, create_with_history=False) ReviewRequestDraft.create(review_request) diffset = self.create_diffset(review_request, draft=True) diff = SimpleUploadedFile('diff', self._DEFAULT_DIFF_CONTENTS, content_type='text/x-patch') with override_feature_checks(self.override_features): rsp = self.api_post(get_draft_diffcommit_list_url( review_request, diffset.revision), dict(self._DEFAULT_POST_DATA, **{ 'diff': diff, }), expected_status=400) self.assertEqual(rsp['stat'], 'fail') self.assertEqual(rsp['err']['code'], INVALID_ATTRIBUTE.code) self.assertEqual( rsp['reason'], 'This review request was not created with support for multiple ' 'commits.\n\n' 'Use the draft_diff resource to upload diffs instead. See the ' 'draft_diff link on the parent resource for the URL.')
def test_post_too_large(self): """Testing the POST <URL> API with a diff that is too large""" siteconfig = SiteConfiguration.objects.get_current() max_diff_size = siteconfig.get('diffviewer_max_diff_size') siteconfig.set('diffviewer_max_diff_size', 1) siteconfig.save() repository = self.create_repository(tool_name='Git') review_request = self.create_review_request(repository=repository, submitter=self.user, create_with_history=True) diffset = self.create_diffset(review_request, draft=True) diff = SimpleUploadedFile('diff', self._DEFAULT_DIFF_CONTENTS, content_type='text/x-patch') try: with override_feature_checks(self.override_features): rsp = self.api_post(get_draft_diffcommit_list_url( review_request, diffset.revision), dict(self._DEFAULT_POST_DATA, **{ 'diff': diff, }), expected_status=400) finally: siteconfig.set('diffviewer_max_diff_size', max_diff_size) siteconfig.save() self.assertEqual(rsp['stat'], 'fail') self.assertEqual(rsp['err']['code'], DIFF_TOO_BIG.code) self.assertEqual(rsp['max_size'], 1)
def test_post_subsequent(self): """Testing the POST <URL> API with a subsequent commit""" repository = self.create_repository(tool_name='Git') review_request = self.create_review_request( repository=repository, submitter=self.user, create_with_history=True) diffset = self.create_diffset(review_request, draft=True) commit = self.create_diffcommit( repository, diffset, diff_contents=self._DEFAULT_DIFF_CONTENTS) validation_info = serialize_validation_info({ commit.commit_id: { 'parent_id': commit.parent_id, 'tree': { 'added': [], 'modified': [{ 'filename': 'readme', 'revision': '5b50866', }], 'removed': [], }, }, }) diff = SimpleUploadedFile( 'diff', (b'diff --git a/readme b/readme\n' b'index 5b50866..f00f00f 100644\n' b'--- a/readme\n' b'+++ a/readme\n' b'@@ -1 +1,4 @@\n' b' Hello there\n' b' \n' b' Oh hi!\n' b'+Goodbye!\n'), content_type='text/x-patch') with override_feature_checks(self.override_features): rsp = self.api_post( get_draft_diffcommit_list_url(review_request, diffset.revision), dict(self._DEFAULT_POST_DATA, **{ 'commit_id': 'r2', 'parent_id': 'r1', 'diff': diff, 'validation_info': validation_info, }), expected_mimetype=draft_diffcommit_item_mimetype) self.assertEqual(rsp['stat'], 'ok') self.assertIn('draft_commit', rsp) item_rsp = rsp['draft_commit'] self.compare_item(item_rsp, DiffCommit.objects.get(pk=item_rsp['id']))
def test_post_parent_diff_subsequent(self): """Testing the POST <URL> API with a parent diff on a subsequent commit """ parent_diff_contents = ( b'diff --git a/foo b/foo\n' b'new file mode 100644\n' b'index 0000000..e69de29\n' ) diff_contents = ( b'diff --git a/foo b/foo\n' b'index e69ded29..03b37a0 100644\n' b'--- a/foo\n' b'+++ b/foo\n' b'@@ -0,0 +1 @@' b'+foo bar baz qux\n' ) repository = self.create_repository(tool_name='Git') review_request = self.create_review_request( repository=repository, submitter=self.user, create_with_history=True) diffset = self.create_diffset(review_request, draft=True) self.create_diffcommit(repository, diffset) diff = SimpleUploadedFile('diff', diff_contents, content_type='text/x-patch') parent_diff = SimpleUploadedFile('parent_diff', parent_diff_contents, content_type='text/x-patch') with override_feature_checks(self.override_features): rsp = self.api_post( get_draft_diffcommit_list_url(review_request, diffset.revision), dict(self._DEFAULT_POST_DATA, **{ 'commit_id': 'r0', 'parent_id': 'r1', 'diff': diff, 'parent_diff': parent_diff, }), expected_mimetype=draft_diffcommit_item_mimetype, expected_status=201) self.assertEqual(rsp['stat'], 'ok') self.assertIn('draft_commit', rsp) item_rsp = rsp['draft_commit'] commit = DiffCommit.objects.get(pk=item_rsp['id']) self.compare_item(item_rsp, commit) files = list(commit.files.all()) self.assertEqual(len(files), 1) f = files[0] self.assertIsNotNone(f.parent_diff)
def test_post_subsequent(self): """Testing the POST <URL> API with a subsequent commit""" repository = self.create_repository(tool_name='Git') review_request = self.create_review_request(repository=repository, submitter=self.user, create_with_history=True) diffset = self.create_diffset(review_request, draft=True) commit = self.create_diffcommit( repository, diffset, diff_contents=self._DEFAULT_DIFF_CONTENTS) validation_info = \ resources.validate_diffcommit.serialize_validation_info({ commit.commit_id: { 'parent_id': commit.parent_id, 'tree': { 'added': [], 'modified': [{ 'filename': 'readme', 'revision': '5b50866', }], 'removed': [], }, }, }) diff = SimpleUploadedFile('diff', (b'diff --git a/readme b/readme\n' b'index 5b50866..f00f00f 100644\n' b'--- a/readme\n' b'+++ a/readme\n' b'@@ -1 +1,4 @@\n' b' Hello there\n' b' \n' b' Oh hi!\n' b'+Goodbye!\n'), content_type='text/x-patch') with override_feature_checks(self.override_features): rsp = self.api_post( get_draft_diffcommit_list_url(review_request, diffset.revision), dict( self._DEFAULT_POST_DATA, **{ 'commit_id': 'r2', 'parent_id': 'r1', 'diff': diff, 'validation_info': validation_info, }), expected_mimetype=draft_diffcommit_item_mimetype) self.assertEqual(rsp['stat'], 'ok') self.assertIn('draft_commit', rsp) item_rsp = rsp['draft_commit'] self.compare_item(item_rsp, DiffCommit.objects.get(pk=item_rsp['id']))
def test_post_parent_diff_subsequent(self): """Testing the POST <URL> API with a parent diff on a subsequent commit """ parent_diff_contents = (b'diff --git a/foo b/foo\n' b'new file mode 100644\n' b'index 0000000..e69de29\n') diff_contents = (b'diff --git a/foo b/foo\n' b'index e69ded29..03b37a0 100644\n' b'--- a/foo\n' b'+++ b/foo\n' b'@@ -0,0 +1 @@' b'+foo bar baz qux\n') repository = self.create_repository(tool_name='Git') review_request = self.create_review_request(repository=repository, submitter=self.user, create_with_history=True) diffset = self.create_diffset(review_request, draft=True) self.create_diffcommit(repository, diffset) diff = SimpleUploadedFile('diff', diff_contents, content_type='text/x-patch') parent_diff = SimpleUploadedFile('parent_diff', parent_diff_contents, content_type='text/x-patch') with override_feature_checks(self.override_features): rsp = self.api_post( get_draft_diffcommit_list_url(review_request, diffset.revision), dict( self._DEFAULT_POST_DATA, **{ 'commit_id': 'r0', 'parent_id': 'r1', 'diff': diff, 'parent_diff': parent_diff, }), expected_mimetype=draft_diffcommit_item_mimetype, expected_status=201) self.assertEqual(rsp['stat'], 'ok') self.assertIn('draft_commit', rsp) item_rsp = rsp['draft_commit'] commit = DiffCommit.objects.get(pk=item_rsp['id']) self.compare_item(item_rsp, commit) files = list(commit.files.all()) self.assertEqual(len(files), 1) f = files[0] self.assertIsNotNone(f.parent_diff)
def test_post_finalized(self): """Testing the POST <URL> API after the parent DiffSet has been finalized """ with override_feature_checks(self.override_features): review_request = self.create_review_request( create_repository=True, submitter=self.user, create_with_history=True) diffset = self.create_diffset(review_request, draft=True) diffset.finalize_commit_series( cumulative_diff=self.DEFAULT_GIT_FILEDIFF_DATA_DIFF, validation_info=None, validate=False, save=True) diff = SimpleUploadedFile('diff', self._DEFAULT_DIFF_CONTENTS, content_type='text/x-patch') rsp = self.api_post(get_draft_diffcommit_list_url( review_request, diffset.revision), dict( self._DEFAULT_POST_DATA, **{ 'validation_info': serialize_validation_info({}), 'diff': diff, }), expected_status=400) self.assertEqual( rsp, { 'stat': 'fail', 'err': { 'code': INVALID_ATTRIBUTE.code, 'msg': INVALID_ATTRIBUTE.msg, }, 'reason': 'The diff has already been finalized.', })
def test_post_empty(self): """Testing the POST <URL> API with an empty diff""" repository = self.create_repository(tool_name='Git') review_request = self.create_review_request( repository=repository, submitter=self.user, create_with_history=True) diffset = self.create_diffset(review_request, draft=True) with override_feature_checks(self.override_features): rsp = self.api_post( get_draft_diffcommit_list_url(review_request, diffset.revision), dict(self._DEFAULT_POST_DATA, **{ 'diff': SimpleUploadedFile('diff', b' ', content_type='text/x-patch'), }), expected_status=400) self.assertEqual(rsp['stat'], 'fail') self.assertEqual(rsp['err']['code'], DIFF_EMPTY.code)
def test_post_finalized(self): """Testing the POST <URL> API after the parent DiffSet has been finalized """ with override_feature_checks(self.override_features): review_request = self.create_review_request( create_repository=True, submitter=self.user, create_with_history=True) diffset = self.create_diffset(review_request, draft=True) diffset.finalize_commit_series( cumulative_diff=self.DEFAULT_GIT_FILEDIFF_DATA_DIFF, validation_info=None, validate=False, save=True) diff = SimpleUploadedFile( 'diff', self._DEFAULT_DIFF_CONTENTS, content_type='text/x-patch') rsp = self.api_post( get_draft_diffcommit_list_url(review_request, diffset.revision), dict(self._DEFAULT_POST_DATA, **{ 'validation_info': serialize_validation_info({}), 'diff': diff, }), expected_status=400) self.assertEqual(rsp, { 'stat': 'fail', 'err': { 'code': INVALID_ATTRIBUTE.code, 'msg': INVALID_ATTRIBUTE.msg, }, 'reason': 'The diff has already been finalized.', })
def setup_basic_get_test(self, user, with_local_site, local_site_name, populate_items): repository = self.create_repository(tool_name='Git') review_request = self.create_review_request( repository=repository, submitter=user, publish=True, with_local_site=with_local_site, create_with_history=True) diffset = self.create_diffset(review_request, draft=True) items = [] if populate_items: items.append( self.create_diffcommit(diffset=diffset, repository=repository)) return ( get_draft_diffcommit_list_url(review_request, diffset.revision, local_site_name=local_site_name), draft_diffcommit_list_mimetype, items, )
def test_post_empty(self): """Testing the POST <URL> API with an empty diff""" repository = self.create_repository(tool_name='Git') review_request = self.create_review_request(repository=repository, submitter=self.user, create_with_history=True) diffset = self.create_diffset(review_request, draft=True) with override_feature_checks(self.override_features): rsp = self.api_post( get_draft_diffcommit_list_url(review_request, diffset.revision), dict( self._DEFAULT_POST_DATA, **{ 'diff': SimpleUploadedFile('diff', b' ', content_type='text/x-patch'), }), expected_status=400) self.assertEqual(rsp['stat'], 'fail') self.assertEqual(rsp['err']['code'], DIFF_EMPTY.code)
def test_post_invalid_date_format(self): """Testing the POST <URL> API with an invalid date format""" repository = self.create_repository(tool_name='Git') review_request = self.create_review_request( repository=repository, submitter=self.user, create_with_history=True) diffset = self.create_diffset(review_request, draft=True) diff = SimpleUploadedFile('diff', self._DEFAULT_DIFF_CONTENTS, content_type='text/x-patch') with override_feature_checks(self.override_features): rsp = self.api_post( get_draft_diffcommit_list_url(review_request, diffset.revision), dict(self._DEFAULT_POST_DATA, **{ 'commit_id': 'r0', 'parent_id': 'r1', 'diff': diff, 'committer_date': 'Jun 1 1990', 'author_date': 'Jun 1 1990', }), expected_status=400) self.assertEqual(rsp['stat'], 'fail') self.assertEqual(rsp['err']['code'], INVALID_FORM_DATA.code) err_fields = rsp['fields'] self.assertIn('author_date', err_fields) self.assertIn('committer_date', err_fields) self.assertEqual(err_fields['author_date'], ['This date must be in ISO 8601 format.']) self.assertEqual(err_fields['committer_date'], ['This date must be in ISO 8601 format.'])
def test_post_invalid_date_format(self): """Testing the POST <URL> API with an invalid date format""" repository = self.create_repository(tool_name='Git') review_request = self.create_review_request(repository=repository, submitter=self.user, create_with_history=True) diffset = self.create_diffset(review_request, draft=True) diff = SimpleUploadedFile('diff', self._DEFAULT_DIFF_CONTENTS, content_type='text/x-patch') with override_feature_checks(self.override_features): rsp = self.api_post(get_draft_diffcommit_list_url( review_request, diffset.revision), dict( self._DEFAULT_POST_DATA, **{ 'commit_id': 'r0', 'parent_id': 'r1', 'diff': diff, 'committer_date': 'Jun 1 1990', 'author_date': 'Jun 1 1990', }), expected_status=400) self.assertEqual(rsp['stat'], 'fail') self.assertEqual(rsp['err']['code'], INVALID_FORM_DATA.code) err_fields = rsp['fields'] self.assertIn('author_date', err_fields) self.assertIn('committer_date', err_fields) self.assertEqual(err_fields['author_date'], ['This date must be in ISO 8601 format.']) self.assertEqual(err_fields['committer_date'], ['This date must be in ISO 8601 format.'])
def setup_basic_get_test(self, user, with_local_site, local_site_name, populate_items): repository = self.create_repository(tool_name='Git') review_request = self.create_review_request( repository=repository, submitter=user, publish=True, with_local_site=with_local_site, create_with_history=True) diffset = self.create_diffset(review_request, draft=True) items = [] if populate_items: items.append(self.create_diffcommit(diffset=diffset, repository=repository)) return ( get_draft_diffcommit_list_url( review_request, diffset.revision, local_site_name=local_site_name), draft_diffcommit_list_mimetype, items, )
def setup_http_not_allowed_list_test(self, user): review_request = self.create_review_request(create_repository=True, public=True) diffset = self.create_diffset(review_request=review_request) return get_draft_diffcommit_list_url(review_request, diffset.revision)
def setup_http_not_allowed_list_test(self, user): review_request = self.create_review_request( create_repository=True, public=True) diffset = self.create_diffset(review_request=review_request) return get_draft_diffcommit_list_url(review_request, diffset.revision)