示例#1
0
    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)
示例#2
0
    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)
示例#3
0
    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)
示例#4
0
    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')
示例#5
0
    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)
示例#6
0
    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)
示例#7
0
    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)
示例#8
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,
                [])
示例#9
0
    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)
示例#10
0
    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)
示例#11
0
 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)
示例#12
0
 def setup_http_not_allowed_item_test(self, user):
     return get_validate_diffcommit_url()
示例#13
0
    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': [],
                    },
                },
            })