def test_post_repo_multiple(self): """Testing the POST <URL> API with multiple matching repositories""" repo = self.create_repository(name='repo') self.create_repository(name=repo.name) with override_feature_checks(self.override_features): rsp = self.api_post(get_validate_diffcommit_url(), { 'commit_id': 'r1', 'parent_id': 'r0', 'diff': SimpleUploadedFile('diff', self.DEFAULT_GIT_FILEDIFF_DATA, content_type='text/x-patch'), 'repository': repo.name, }, expected_status=400) self.assertEqual(rsp['stat'], 'fail') self.assertEqual(rsp['err']['code'], INVALID_REPOSITORY.code) self.assertEqual( rsp['err']['msg'], 'Too many repositories matched "%s". Try specifying ' 'the repository by name instead.' % repo.name)
def test_post_diff_too_big(self): """Testing the POST <URL> API with a diff that is too big""" repo = self.create_repository(tool_name='Git') siteconfig = SiteConfiguration.objects.get_current() max_diff_size = siteconfig.get('diffviewer_max_diff_size') siteconfig.set('diffviewer_max_diff_size', 1) siteconfig.save() try: with override_feature_checks(self.override_features): rsp = self.api_post(get_validate_diffcommit_url(), { 'commit_id': 'r1', 'parent_id': 'r0', 'diff': SimpleUploadedFile('diff', self.DEFAULT_GIT_FILEDIFF_DATA, content_type='text/x-patch'), 'repository': repo.name, }, 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_repo_no_history_support(self): """Testing the POST <URL> API with a repository that does not support history """ repo = self.create_repository(tool_name='Test') with override_feature_checks(self.override_features): rsp = self.api_post(get_validate_diffcommit_url(), { 'commit_id': 'r1', 'parent_id': 'r0', 'diff': SimpleUploadedFile('diff', self.DEFAULT_GIT_FILEDIFF_DATA, content_type='text/x-patch'), 'repository': repo.name, }, expected_status=400) self.assertEqual(rsp['stat'], 'fail') self.assertEqual(rsp['err']['code'], INVALID_ATTRIBUTE.code) self.assertEqual( rsp['reason'], 'The "%s" repository does not support review requests created ' 'with history.' % repo.name)
def test_post_added_in_parent(self): """Testing the POST <URL> API with a subsequent commit that contains a file added in the parent diff """ def _exists(repository, filename, revision, *args, **kwargs): return filename == 'README' and revision == '94bdd3e' initial_validation_info = { 'r1': { 'parent_id': 'r0', 'tree': { 'added': [], 'modified': [], 'removed': [], }, }, } repo = self.create_repository(name='repo') self.spy_on(Repository.get_file_exists, owner=Repository, call_fake=_exists) diff = SimpleUploadedFile('diff', self.DEFAULT_GIT_FILEDIFF_DATA_DIFF, content_type='text/x-patch') with override_feature_checks(self.override_features): rsp = self.api_post(get_validate_diffcommit_url(), { 'commit_id': 'r2', 'parent_id': 'r1', 'diff': diff, 'repository': repo.name, 'validation_info': serialize_validation_info(initial_validation_info), }, expected_mimetype=validate_diffcommit_mimetype, expected_status=200) self.assertEqual(rsp['stat'], 'ok')
def test_post_repo_does_not_exist(self): """Testing the POST <URL> API with a repository that does not exist""" with override_feature_checks(self.override_features): rsp = self.api_post( get_validate_diffcommit_url(), { 'commit_id': 'r1', 'parent_id': 'r0', 'diff': SimpleUploadedFile( 'diff', self.DEFAULT_GIT_FILEDIFF_DATA_DIFF, content_type='text/x-patch'), 'repository': 'nope', }, expected_status=400) self.assertEqual(rsp['stat'], 'fail') self.assertEqual(rsp['err']['code'], INVALID_REPOSITORY.code)
def test_post_diff_empty(self): """Testing the POST <URL> API with an empty diff""" repo = self.create_repository(tool_name='Git') with override_feature_checks(self.override_features): rsp = self.api_post(get_validate_diffcommit_url(), { 'commit_id': 'r1', 'parent_id': 'r0', 'diff': SimpleUploadedFile( 'diff', b' ', content_type='text/x-patch'), 'repository': repo.name, }, expected_status=400) self.assertEqual(rsp['stat'], 'fail') self.assertEqual(rsp['err']['code'], DIFF_EMPTY.code)
def test_post_diff_parser_error(self): """Testing the POST <URL> API with a diff that does not parse""" repo = self.create_repository(tool_name='Git') with override_feature_checks(self.override_features): rsp = self.api_post( get_validate_diffcommit_url(), { 'commit_id': 'r1', 'parent_id': 'r0', 'diff': SimpleUploadedFile('diff', b'not a valid diff at all.', content_type='text/x-patch'), 'repository': repo.name, }, expected_status=400) self.assertEqual(rsp['stat'], 'fail') self.assertEqual(rsp['err']['code'], DIFF_PARSE_ERROR.code) self.assertEqual(rsp['linenum'], 0)
def setup_basic_post_test(self, user, with_local_site, local_site_name, post_valid_data): repository = self.create_repository(tool_name='Git', with_local_site=with_local_site) post_data = {} if post_valid_data: self.spy_on(Repository.get_file_exists, owner=Repository, call_fake=lambda *args, **kwargs: True) validation_info = serialize_validation_info({ 'r1': { 'parent_id': 'r0', 'tree': { 'added': [{ 'filename': 'README', 'revision': '94bdd3e', }], 'modified': [], 'removed': [], }, }, }) diff = SimpleUploadedFile('diff', self.DEFAULT_GIT_FILEDIFF_DATA_DIFF, content_type='text/x-patch') post_data = { 'commit_id': 'r2', 'parent_id': 'r1', 'diff': diff, 'validation_info': validation_info, 'repository': repository.pk, } return (get_validate_diffcommit_url(local_site_name=local_site_name), validate_diffcommit_mimetype, post_data, [])
def test_post_repo_no_access(self): """Testing the POST <URL> API with a repository the user does not have access to """ repo = self.create_repository(public=False) with override_feature_checks(self.override_features): rsp = self.api_post( get_validate_diffcommit_url(), { 'commit_id': 'r1', 'parent_id': 'r0', 'diff': SimpleUploadedFile( 'diff', self.DEFAULT_GIT_FILEDIFF_DATA_DIFF, content_type='text/x-patch'), 'repository': repo.name, }, expected_status=400) self.assertEqual(rsp['stat'], 'fail') self.assertEqual(rsp['err']['code'], INVALID_REPOSITORY.code)
def test_post_diff_too_big(self): """Testing the POST <URL> API with a diff that is too big""" repo = self.create_repository(tool_name='Git') with self.siteconfig_settings({'diffviewer_max_diff_size': 1}, reload_settings=False): with override_feature_checks(self.override_features): rsp = self.api_post(get_validate_diffcommit_url(), { 'commit_id': 'r1', 'parent_id': 'r0', 'diff': SimpleUploadedFile('diff', self.DEFAULT_GIT_FILEDIFF_DATA_DIFF, content_type='text/x-patch'), 'repository': repo.name, }, expected_status=400) self.assertEqual(rsp['stat'], 'fail') self.assertEqual(rsp['err']['code'], DIFF_TOO_BIG.code) self.assertEqual(rsp['max_size'], 1)
def setup_basic_get_test(self, user, with_local_site, local_site_name): return (get_validate_diffcommit_url(local_site_name=local_site_name), validate_diffcommit_mimetype, None)
def setup_http_not_allowed_item_test(self, user): return get_validate_diffcommit_url()
def test_post_parent_diff(self): """Testing the POST <URL> API with a parent diff""" def _exists(repository, filename, revision, *args, **kwargs): return filename == 'README' and revision == '94bdd3e' repo = self.create_repository(name='repo') self.spy_on(Repository.get_file_exists, call_fake=_exists) parent_diff_contents = (b'diff --git a/README b/README\n' b'index 94bdd3e..f00f00 100644\n' b'--- README\n' b'+++ README\n' b'@@ -2 +2 @@\n' b'-blah blah\n' b'+foo bar\n') parent_diff = SimpleUploadedFile('parent_diff', parent_diff_contents, content_type='text/x-patch') diff_contents = (b'diff --git a/README b/README\n' b'index f00f00..197009f 100644\n' b'--- README\n' b'+++ README\n' b'@@ -2 +2 @@\n' b'-foo bar\n' b'+blah!\n') diff = SimpleUploadedFile('diff', diff_contents, content_type='text/x-patch') with override_feature_checks(self.override_features): rsp = self.api_post(get_validate_diffcommit_url(), { 'commit_id': 'r1', 'parent_id': 'r0', 'diff': diff, 'parent_diff': parent_diff, 'repository': repo.name, }, expected_mimetype=validate_diffcommit_mimetype, expected_status=200) self.assertEqual(rsp['stat'], 'ok') validation_info = json.loads( base64.b64decode(rsp['commit_validation']['validation_info'])) self.assertEqual( validation_info, { 'r1': { 'parent_id': 'r0', 'tree': { 'added': [], 'modified': [ { 'filename': 'README', 'revision': '197009f', }, ], 'removed': [], }, }, })