def test_post_with_interdiff(self):
        """Testing the
        POST review-requests/<id>/reviews/<id>/diff-comments/ API
        with interdiff
        """
        comment_text = "Test diff comment"

        review_request, filediff = self._create_diff_review_request()

        # Post the second diff.
        interdiffset = self.create_diffset(review_request)
        interfilediff = self.create_filediff(interdiffset)

        review = self.create_review(review_request, user=self.user)

        rsp = self.apiPost(
            get_review_diff_comment_list_url(review),
            {
                'filediff_id': filediff.pk,
                'interfilediff_id': interfilediff.pk,
                'issue_opened': True,
                'first_line': 1,
                'num_lines': 5,
                'text': comment_text,
            },
            expected_mimetype=review_diff_comment_item_mimetype)

        self.assertEqual(rsp['stat'], 'ok')
        self.assertTrue('diff_comment' in rsp)
        self.assertEqual(rsp['diff_comment']['text'], comment_text)

        comment = Comment.objects.get(pk=rsp['diff_comment']['id'])
        self.assertEqual(comment.filediff_id, filediff.pk)
        self.assertEqual(comment.interfilediff_id, interfilediff.pk)
示例#2
0
    def test_post_with_interdiff(self):
        """Testing the
        POST review-requests/<id>/reviews/<id>/diff-comments/ API
        with interdiff
        """
        comment_text = "Test diff comment"

        review_request, filediff = self._create_diff_review_request()

        # Post the second diff.
        interdiffset = self.create_diffset(review_request)
        interfilediff = self.create_filediff(interdiffset)

        review = self.create_review(review_request, user=self.user)

        rsp = self.apiPost(
            get_review_diff_comment_list_url(review),
            {
                "filediff_id": filediff.pk,
                "interfilediff_id": interfilediff.pk,
                "issue_opened": True,
                "first_line": 1,
                "num_lines": 5,
                "text": comment_text,
            },
            expected_mimetype=review_diff_comment_item_mimetype,
        )

        self.assertEqual(rsp["stat"], "ok")
        self.assertTrue("diff_comment" in rsp)
        self.assertEqual(rsp["diff_comment"]["text"], comment_text)

        comment = Comment.objects.get(pk=rsp["diff_comment"]["id"])
        self.assertEqual(comment.filediff_id, filediff.pk)
        self.assertEqual(comment.interfilediff_id, interfilediff.pk)
    def test_post_with_base_filediff_interdiff_dvcs_enabled_with_history(self):
        """Testing the POST <URL> API with base_filediff_id and
        interfilediff_id when DVCS feature enabled
        """
        with override_feature_check(dvcs_feature.feature_id, enabled=True):
            review_request, filediff = self._create_diff_review_request(
                with_history=True)
            review = self.create_review(review_request, user=self.user)

            interdiffset = self.create_diffset(review_request)
            interfilediff = self.create_filediff(interdiffset)

            rsp = self.api_post(
                get_review_diff_comment_list_url(review),
                {
                    'filediff_id': filediff.pk,
                    'base_filediff_id': filediff.pk,
                    'interfilediff_id': interfilediff.pk,
                    'issue_opened': True,
                    'first_line': 1,
                    'num_lines': 5,
                    'text': 'foo',
                },
                expected_status=400)

            self.assertEqual(rsp['stat'], 'fail')
            self.assertEqual(rsp['err']['code'], INVALID_FORM_DATA.code)
            self.assertEqual(rsp['fields'], {
                'base_filediff_id': [
                    'This field cannot be specified with interfilediff_id.',
                ],
                'interfilediff_id': [
                    'This field cannot be specified with base_filediff_id.',
                ],
            })
    def test_post_with_base_filediff_not_exists(self):
        """Testing the POST <URL> API with base_filediff_id set to a
        non-existant ID
        """
        self.spy_on(FileDiff.get_ancestors)

        with override_feature_check(dvcs_feature.feature_id, enabled=True):
            review_request, filediff = self._create_diff_review_request(
                with_history=True)
            review = self.create_review(review_request, user=self.user)

            rsp = self.api_post(
                get_review_diff_comment_list_url(review),
                {
                    'filediff_id': filediff.pk,
                    'base_filediff_id': 12321,
                    'issue_opened': True,
                    'first_line': 1,
                    'num_lines': 5,
                    'text': 'foo',
                },
                expected_status=400)

            self.assertEqual(rsp['stat'], 'fail')
            self.assertEqual(rsp['err']['code'], INVALID_FORM_DATA.code)
            self.assertEqual(rsp['fields'], {
                'base_filediff_id': [
                    'This is not a valid base filediff ID.',
                ]
            })

        self.assertFalse(FileDiff.get_ancestors.called)
    def test_post_with_base_filediff_dvcs_enabled_with_history_same_id(self):
        """Testing the POST <URL> API with base_filediff_id=filediff_id"""
        with override_feature_check(dvcs_feature.feature_id, enabled=True):
            review_request, filediff = self._create_diff_review_request(
                with_history=True)
            review = self.create_review(review_request, user=self.user)

            rsp = self.api_post(
                get_review_diff_comment_list_url(review),
                {
                    'filediff_id': filediff.pk,
                    'base_filediff_id': filediff.pk,
                    'issue_opened': True,
                    'first_line': 1,
                    'num_lines': 5,
                    'text': 'foo',
                },
                expected_status=400)

            self.assertEqual(rsp, {
                'stat': 'fail',
                'err': {
                    'code': INVALID_FORM_DATA.code,
                    'msg': INVALID_FORM_DATA.msg,
                },
                'fields': {
                    'base_filediff_id': [
                        'This cannot be the same as filediff_id.',
                    ],
                },
            })
    def test_post_with_base_filediff_interdiff_dvcs_disabled(self):
        """Testing the POST <URL> API with base_filediff_id and interdiff_id
        when DVCS feature disabled
        """
        with override_feature_check(dvcs_feature.feature_id, enabled=False):
            review_request, filediff = self._create_diff_review_request()
            review = self.create_review(review_request, user=self.user)

            interdiffset = self.create_diffset(review_request)
            interfilediff = self.create_filediff(interdiffset)

            rsp = self.api_post(
                get_review_diff_comment_list_url(review),
                {
                    'filediff_id': filediff.pk,
                    'base_filediff_id': filediff.pk,
                    'interfilediff_id': interfilediff.pk,
                    'issue_opened': True,
                    'first_line': 1,
                    'num_lines': 5,
                    'text': 'foo',
                },
                expected_mimetype=review_diff_comment_item_mimetype)

            self.assertEqual(rsp['stat'], 'ok')
            self.assertIn('diff_comment', rsp)

            item_rsp = rsp['diff_comment']
            comment = Comment.objects.get(pk=item_rsp['id'])

            self.compare_item(item_rsp, comment)
    def test_post_with_base_filediff_dvcs_enabled_no_history(self):
        """Testing the POST <URL> API with base_filediff_id when DVCS feature
        enabled and review request not created with commit history
        """
        with override_feature_check(dvcs_feature.feature_id, enabled=True):
            review_request, filediff = self._create_diff_review_request()
            review = self.create_review(review_request, user=self.user)

            rsp = self.api_post(
                get_review_diff_comment_list_url(review),
                {
                    'filediff_id': filediff.pk,
                    'base_filediff_id': filediff.pk,
                    'issue_opened': True,
                    'first_line': 1,
                    'num_lines': 5,
                    'text': 'foo',
                },
                expected_status=400)

            self.assertEqual(rsp['stat'], 'fail')
            self.assertEqual(rsp['err']['code'], INVALID_FORM_DATA.code)
            self.assertEqual(
                rsp['fields']['base_filediff_id'],
                ['This field cannot be specified on review requests created '
                 'without history support.'])
    def test_post_with_interfilediff_outside_diffset_history(self):
        """Testing the POST <URL> API with interfilediff_id corresponding to a
        FileDiff outside the current DiffSetHistory
        """
        review_request, filediff = self._create_diff_review_request()
        review = self.create_review(review_request, user=self.user)

        other_filediff = self._create_diff_review_request()[1]

        rsp = self.api_post(
            get_review_diff_comment_list_url(review),
            {
                'filediff_id': filediff.pk,
                'interfilediff_id': other_filediff.pk,
                'issue_opened': True,
                'first_line': 1,
                'num_lines': 5,
                'text': 'foo',
            },
            expected_status=400)

        self.assertEqual(rsp['stat'], 'fail')
        self.assertEqual(rsp['err']['code'], INVALID_FORM_DATA.code)
        self.assertEqual(rsp['fields'], {
            'interfilediff_id': ['This is not a valid interfilediff ID.'],
        })
示例#9
0
    def test_post_with_issue(self):
        """Testing the
        POST review-requests/<id>/reviews/<id>/diff-comments/ API
        with an issue
        """
        diff_comment_text = "Test diff comment with an opened issue"

        review_request, filediff = self._create_diff_review_request()
        review = self.create_review(review_request, user=self.user)
        rsp = self.apiPost(
            get_review_diff_comment_list_url(review),
            {
                "filediff_id": filediff.pk,
                "issue_opened": True,
                "first_line": 1,
                "num_lines": 5,
                "text": diff_comment_text,
            },
            expected_mimetype=review_diff_comment_item_mimetype,
        )

        self.assertEqual(rsp["stat"], "ok")
        self.assertTrue("diff_comment" in rsp)
        self.assertEqual(rsp["diff_comment"]["text"], diff_comment_text)
        self.assertTrue(rsp["diff_comment"]["issue_opened"])
    def test_get_diff_comments(self):
        """Testing the GET review-requests/<id>/reviews/<id>/diff-comments/ API"""
        review = self._create_diff_review()

        rsp = self.apiGet(get_review_diff_comment_list_url(review),
                          expected_mimetype=review_diff_comment_list_mimetype)
        self.assertEqual(rsp['stat'], 'ok')
        self.assertEqual(len(rsp['diff_comments']), review.comments.count())
    def test_get_diff_comments_with_site(self):
        """Testing the GET review-requests/<id>/reviews/<id>/diff-comments/ API with a local site"""
        review = self.test_post_diff_comments_with_site()

        rsp = self.apiGet(
            get_review_diff_comment_list_url(review, self.local_site_name),
            expected_mimetype=review_diff_comment_list_mimetype)
        self.assertEqual(rsp['stat'], 'ok')
        self.assertEqual(len(rsp['diff_comments']), review.comments.count())
    def test_get_diff_comments_with_counts_only(self):
        """Testing the GET review-requests/<id>/reviews/<id>/diff-comments/?counts-only=1 API"""
        review = self._create_diff_review()

        rsp = self.apiGet(get_review_diff_comment_list_url(review), {
            'counts-only': 1,
        }, expected_mimetype=review_diff_comment_list_mimetype)
        self.assertEqual(rsp['stat'], 'ok')
        self.assertEqual(rsp['count'], review.comments.count())
    def test_get_diff_comments_with_site_no_access(self):
        """Testing the GET review-requests/<id>/reviews/<id>/diff-comments/ API with a local site and Permission Denied error"""
        review = self.test_post_diff_comments_with_site()

        self._login_user()

        rsp = self.apiGet(
            get_review_diff_comment_list_url(review, self.local_site_name),
            expected_status=403)
        self.assertEqual(rsp['stat'], 'fail')
        self.assertEqual(rsp['err']['code'], PERMISSION_DENIED.code)
    def test_post_diff_comments_with_site_no_access(self):
        """Testing the POST review-requests/<id>/reviews/<id>/diff-comments/ API with a local site and Permission Denied error"""
        review_request = self.create_review_request(with_local_site=True,
                                                    publish=True)
        review = self.create_review(review_request, user='******', publish=True)

        rsp = self.apiPost(
            get_review_diff_comment_list_url(review, self.local_site_name),
            {},
            expected_status=403)
        self.assertEqual(rsp['stat'], 'fail')
示例#15
0
    def setup_review_request_child_test(self, review_request):
        if not review_request.repository_id:
            # The group tests don't create a repository by default.
            review_request.repository = self.create_repository()
            review_request.save()

        diffset = self.create_diffset(review_request)
        self.create_filediff(diffset)
        review = self.create_review(review_request, publish=True)

        return (get_review_diff_comment_list_url(review), review_diff_comment_list_mimetype)
    def test_post_diff_comments_with_interdiff(self):
        """Testing the POST review-requests/<id>/reviews/<id>/diff-comments/ API with interdiff"""
        comment_text = "Test diff comment"

        comment, review_request, review, interdiff_revision = \
            self._common_post_interdiff_comments(comment_text)

        rsp = self.apiGet(get_review_diff_comment_list_url(review),
                          expected_mimetype=review_diff_comment_list_mimetype)
        self.assertEqual(rsp['stat'], 'ok')
        self.assertTrue('diff_comments' in rsp)
        self.assertEqual(len(rsp['diff_comments']), 1)
        self.assertEqual(rsp['diff_comments'][0]['text'], comment_text)
    def test_post_diff_comments_with_issue(self):
        """Testing the POST review-requests/<id>/reviews/<id>/diff-comments/ API with an issue"""
        diff_comment_text = 'Test diff comment with an opened issue'
        comment, review, review_request = self._create_diff_review_with_issue(
            publish=False, comment_text=diff_comment_text)

        rsp = self.apiGet(get_review_diff_comment_list_url(review),
                          expected_mimetype=review_diff_comment_list_mimetype)
        self.assertEqual(rsp['stat'], 'ok')
        self.assertTrue('diff_comments' in rsp)
        self.assertEqual(len(rsp['diff_comments']), 1)
        self.assertEqual(rsp['diff_comments'][0]['text'], diff_comment_text)
        self.assertTrue(rsp['diff_comments'][0]['issue_opened'])
示例#18
0
    def test_get_with_counts_only(self):
        """Testing the
        GET review-requests/<id>/reviews/<id>/diff-comments/?counts-only=1 API
        """
        review = self._create_diff_review()

        rsp = self.apiGet(
            get_review_diff_comment_list_url(review),
            {"counts-only": 1},
            expected_mimetype=review_diff_comment_list_mimetype,
        )
        self.assertEqual(rsp["stat"], "ok")
        self.assertEqual(rsp["count"], review.comments.count())
示例#19
0
    def test_post_with_base_filediff_outside_diffset(self):
        """Testing the POST <URL> API with base_filediff_id belonging to a
        different DiffSet
        """
        self.spy_on(FileDiff.get_ancestors)

        with override_feature_check(dvcs_feature.feature_id, enabled=True):
            review_request = self.create_review_request(
                create_repository=True,
                create_with_history=True,
                publish=True)

            diffsets = [
                self.create_diffset(review_request, revision=1),
                self.create_diffset(review_request, revision=2)
            ]

            commits = [
                self.create_diffcommit(diffset=diffsets[0], commit_id='r1',
                                       parent_id='r0'),
                self.create_diffcommit(diffset=diffsets[1], commit_id='r2',
                                       parent_id='r1'),
            ]

            filediffs = [
                self.create_filediff(diffset=diffset, commit=commit)
                for diffset, commit in zip(diffsets, commits)
            ]
            review = self.create_review(review_request, user=self.user)

            rsp = self.api_post(
                get_review_diff_comment_list_url(review),
                {
                    'filediff_id': filediffs[1].pk,
                    'base_filediff_id': filediffs[0].pk,
                    'issue_opened': True,
                    'first_line': 1,
                    'num_lines': 5,
                    'text': 'foo',
                },
                expected_status=400)

            self.assertEqual(rsp['stat'], 'fail')
            self.assertEqual(rsp['err']['code'], INVALID_FORM_DATA.code)
            self.assertEqual(rsp['fields'], {
                'base_filediff_id': [
                    'This is not a valid base filediff ID.',
                ],
            })

        self.assertFalse(FileDiff.get_ancestors.called)
示例#20
0
    def test_post_with_base_filediff_ancestor(self):
        """Testing the POST <URL> API with base_filediff_id belonging to
        the FileDiff's set of ancestors
        """
        self.spy_on(FileDiff.get_ancestors)

        with override_feature_check(dvcs_feature.feature_id, enabled=True):
            review_request = self.create_review_request(
                create_repository=True,
                create_with_history=True,
                publish=True)

            diffset = self.create_diffset(review_request)

            commits = [
                self.create_diffcommit(diffset=diffset, commit_id='r1',
                                       parent_id='r0'),
                self.create_diffcommit(diffset=diffset, commit_id='r2',
                                       parent_id='r1'),
            ]

            filediffs = [
                self.create_filediff(diffset=diffset, commit=commits[0],
                                     source_revision='123', dest_detail='124'),
                self.create_filediff(diffset=diffset, commit=commits[1],
                                     source_revision='124', dest_detail='125'),
            ]
            review = self.create_review(review_request, user=self.user)

            rsp = self.api_post(
                get_review_diff_comment_list_url(review),
                {
                    'filediff_id': filediffs[1].pk,
                    'base_filediff_id': filediffs[0].pk,
                    'issue_opened': True,
                    'first_line': 1,
                    'num_lines': 5,
                    'text': 'foo',
                },
                expected_mimetype=review_diff_comment_item_mimetype)

            self.assertEqual(rsp['stat'], 'ok')
            self.assertIn('diff_comment', rsp)

            item_rsp = rsp['diff_comment']
            comment = Comment.objects.get(pk=item_rsp['id'])

            self.compare_item(item_rsp, comment)

        self.assertTrue(FileDiff.get_ancestors.called)
示例#21
0
    def setup_basic_get_test(self, user, with_local_site, local_site_name, populate_items):
        review_request = self.create_review_request(
            create_repository=True, with_local_site=with_local_site, submitter=user, publish=True
        )
        diffset = self.create_diffset(review_request)
        filediff = self.create_filediff(diffset)
        review = self.create_review(review_request, publish=True)

        if populate_items:
            items = [self.create_diff_comment(review, filediff)]
        else:
            items = []

        return (get_review_diff_comment_list_url(review, local_site_name), review_diff_comment_list_mimetype, items)
示例#22
0
    def setup_basic_post_test(self, user, with_local_site, local_site_name, post_valid_data):
        review_request = self.create_review_request(
            create_repository=True, with_local_site=with_local_site, submitter=user, publish=True
        )
        diffset = self.create_diffset(review_request)
        filediff = self.create_filediff(diffset)
        review = self.create_review(review_request, user=user)

        return (
            get_review_diff_comment_list_url(review, local_site_name),
            review_diff_comment_item_mimetype,
            {"filediff_id": filediff.pk, "text": "My new text", "first_line": 1, "num_lines": 2},
            [review],
        )
    def test_delete_diff_comment_with_interdiff(self):
        """Testing the DELETE review-requests/<id>/reviews/<id>/diff-comments/<id>/ API"""
        comment_text = "This is a test comment."

        comment, review_request, review, interdiff_revision = \
            self._common_post_interdiff_comments(comment_text)

        self.apiDelete(get_review_diff_comment_item_url(review, comment.pk))

        rsp = self.apiGet(get_review_diff_comment_list_url(review),
                          expected_mimetype=review_diff_comment_list_mimetype)
        self.assertEqual(rsp['stat'], 'ok')
        self.assertTrue('diff_comments' in rsp)
        self.assertEqual(len(rsp['diff_comments']), 0)
示例#24
0
    def test_get_with_interdiff(self):
        """Testing the GET review-requests/<id>/reviews/<id>/diff-comments/ API
        with interdiff
        """
        comment_text = "Test diff comment"

        comment, review_request, review, interdiff_revision = self._common_post_interdiff_comments(comment_text)

        rsp = self.apiGet(
            get_review_diff_comment_list_url(review),
            {"interdiff-revision": interdiff_revision},
            expected_mimetype=review_diff_comment_list_mimetype,
        )
        self.assertEqual(rsp["stat"], "ok")
        self.assertTrue("diff_comments" in rsp)
        self.assertEqual(len(rsp["diff_comments"]), 1)
        self.assertEqual(rsp["diff_comments"][0]["text"], comment_text)
    def test_post(self):
        """Testing the
        POST review-requests/<id>/reviews/<id>/diff-comments/ API
        """
        review_request = self.create_review_request(create_repository=True,
                                                    publish=True)
        diffset = self.create_diffset(review_request)
        filediff = self.create_filediff(diffset)
        review = self.create_review(review_request, user=self.user)
        comment = self.create_diff_comment(review, filediff)

        rsp = self.apiGet(get_review_diff_comment_list_url(review),
                          expected_mimetype=review_diff_comment_list_mimetype)
        self.assertEqual(rsp['stat'], 'ok')
        self.assertTrue('diff_comments' in rsp)
        self.assertEqual(len(rsp['diff_comments']), 1)
        self.assertEqual(rsp['diff_comments'][0]['text'], comment.text)
    def test_post_with_extra_fields(self):
        """Testing the
        POST review-requests/<id>/reviews/<id>/diff-comments/ API
        with extra fields
        """
        comment_text = "This is a test comment."
        extra_fields = {
            'extra_data.foo': '123',
            'extra_data.bar': '456',
            'extra_data.baz': '',
            'ignored': 'foo',
        }

        # Post the review request.
        review_request = self.create_review_request(create_repository=True,
                                                    submitter=self.user,
                                                    publish=True)
        diffset = self.create_diffset(review_request)
        filediff = self.create_filediff(diffset)

        # Post the review.
        review = self.create_review(review_request, user=self.user)

        rsp = self.apiPost(
            get_review_diff_comment_list_url(review),
            dict({
                'filediff_id': filediff.pk,
                'first_line': 1,
                'num_lines': 5,
                'text': comment_text,
            }, **extra_fields),
            expected_mimetype=review_diff_comment_item_mimetype)

        comment = Comment.objects.get(pk=rsp['diff_comment']['id'])

        self.assertTrue('foo' in comment.extra_data)
        self.assertTrue('bar' in comment.extra_data)
        self.assertFalse('baz' in comment.extra_data)
        self.assertFalse('ignored' in comment.extra_data)
        self.assertEqual(comment.extra_data['foo'],
                         extra_fields['extra_data.foo'])
        self.assertEqual(comment.extra_data['bar'],
                         extra_fields['extra_data.bar'])
示例#27
0
    def setup_basic_get_test(self, user, with_local_site, local_site_name,
                             populate_items):
        review_request = self.create_review_request(
            create_repository=True,
            with_local_site=with_local_site,
            submitter=user,
            publish=True)
        diffset = self.create_diffset(review_request)
        filediff = self.create_filediff(diffset)
        review = self.create_review(review_request, publish=True)

        if populate_items:
            items = [self.create_diff_comment(review, filediff)]
        else:
            items = []

        return (get_review_diff_comment_list_url(review, local_site_name),
                review_diff_comment_list_mimetype,
                items)
示例#28
0
    def test_post_with_extra_fields(self):
        """Testing the
        POST review-requests/<id>/reviews/<id>/diff-comments/ API
        with extra fields
        """
        comment_text = "This is a test comment."
        extra_fields = {
            'extra_data.foo': '123',
            'extra_data.bar': '456',
            'extra_data.baz': '',
            'ignored': 'foo',
        }

        # Post the review request.
        review_request = self.create_review_request(create_repository=True,
                                                    submitter=self.user,
                                                    publish=True)
        diffset = self.create_diffset(review_request)
        filediff = self.create_filediff(diffset)

        # Post the review.
        review = self.create_review(review_request, user=self.user)

        rsp = self.apiPost(get_review_diff_comment_list_url(review),
                           dict(
                               {
                                   'filediff_id': filediff.pk,
                                   'first_line': 1,
                                   'num_lines': 5,
                                   'text': comment_text,
                               }, **extra_fields),
                           expected_mimetype=review_diff_comment_item_mimetype)

        comment = Comment.objects.get(pk=rsp['diff_comment']['id'])

        self.assertTrue('foo' in comment.extra_data)
        self.assertTrue('bar' in comment.extra_data)
        self.assertFalse('baz' in comment.extra_data)
        self.assertFalse('ignored' in comment.extra_data)
        self.assertEqual(comment.extra_data['foo'],
                         extra_fields['extra_data.foo'])
        self.assertEqual(comment.extra_data['bar'],
                         extra_fields['extra_data.bar'])
    def test_post_with_base_filediff_same_commit(self):
        """Testing the POST <URL> API with base_filediff_id belonging to a
        different FileDiff in the same commit
        """
        self.spy_on(FileDiff.get_ancestors,
                    owner=FileDiff)

        with override_feature_check(dvcs_feature.feature_id, enabled=True):
            review_request = self.create_review_request(
                create_repository=True,
                create_with_history=True,
                publish=True)

            diffset = self.create_diffset(review_request)
            commit = self.create_diffcommit(diffset=diffset)
            filediffs = [
                self.create_filediff(diffset=diffset, commit=commit),
                self.create_filediff(diffset=diffset, commit=commit),
            ]
            review = self.create_review(review_request, user=self.user)

            rsp = self.api_post(
                get_review_diff_comment_list_url(review),
                {
                    'filediff_id': filediffs[0].pk,
                    'base_filediff_id': filediffs[1].pk,
                    'issue_opened': True,
                    'first_line': 1,
                    'num_lines': 5,
                    'text': 'foo',
                },
                expected_status=400)

            self.assertEqual(rsp['stat'], 'fail')
            self.assertEqual(rsp['err']['code'], INVALID_FORM_DATA.code)
            self.assertEqual(rsp['fields'], {
                'base_filediff_id': [
                    'This is not a valid base filediff ID.',
                ]
            })

        self.assertFalse(FileDiff.get_ancestors.called)
示例#30
0
    def test_post_with_interfilediff_same_filediff(self):
        """Testing the POST <URL> API with interfilediff_id == filediff_id"""
        review_request, filediff = self._create_diff_review_request()
        review = self.create_review(review_request, user=self.user)

        rsp = self.api_post(get_review_diff_comment_list_url(review), {
            'filediff_id': filediff.pk,
            'interfilediff_id': filediff.pk,
            'issue_opened': True,
            'first_line': 1,
            'num_lines': 5,
            'text': 'foo',
        },
                            expected_status=400)

        self.assertEqual(rsp['stat'], 'fail')
        self.assertEqual(rsp['err']['code'], INVALID_FORM_DATA.code)
        self.assertEqual(rsp['fields'], {
            'interfilediff_id': ['This cannot be the same as filediff_id.'],
        })
示例#31
0
    def setup_basic_post_test(self, user, with_local_site, local_site_name,
                              post_valid_data):
        review_request = self.create_review_request(
            create_repository=True,
            with_local_site=with_local_site,
            submitter=user,
            publish=True)
        diffset = self.create_diffset(review_request)
        filediff = self.create_filediff(diffset)
        review = self.create_review(review_request, user=user)

        return (get_review_diff_comment_list_url(review, local_site_name),
                review_diff_comment_item_mimetype,
                {
                    'filediff_id': filediff.pk,
                    'text': 'My new text',
                    'first_line': 1,
                    'num_lines': 2,
                },
                [review])
    def test_post_with_site(self):
        """Testing the
        POST review-requests/<id>/reviews/<id>/diff-comments/ API
        with a local site
        """
        review_request, filediff = \
            self._create_diff_review_request(with_local_site=True)
        user = self._login_user(local_site=True)
        review = self.create_review(review_request, user=user)
        comment = self.create_diff_comment(review, filediff)

        rsp = self.apiGet(
            get_review_diff_comment_list_url(review, self.local_site_name),
            expected_mimetype=review_diff_comment_list_mimetype)
        self.assertEqual(rsp['stat'], 'ok')
        self.assertTrue('diff_comments' in rsp)
        self.assertEqual(len(rsp['diff_comments']), 1)
        self.assertEqual(rsp['diff_comments'][0]['text'], comment.text)

        return review
    def test_post_diff_comments_with_site(self):
        """Testing the POST review-requests/<id>/reviews/<id>/diff-comments/ API with a local site"""
        diff_comment_text = "Test diff comment"
        review_request, filediff = \
            self._create_diff_review_request(with_local_site=True)

        user = self._login_user(local_site=True)

        review = self.create_review(review_request, user=user)

        self._postNewDiffComment(review_request, review.pk, diff_comment_text)

        rsp = self.apiGet(
            get_review_diff_comment_list_url(review, self.local_site_name),
            expected_mimetype=review_diff_comment_list_mimetype)
        self.assertEqual(rsp['stat'], 'ok')
        self.assertTrue('diff_comments' in rsp)
        self.assertEqual(len(rsp['diff_comments']), 1)
        self.assertEqual(rsp['diff_comments'][0]['text'], diff_comment_text)

        return review
示例#34
0
    def _postNewDiffComment(self, review_request, review_id, comment_text,
                            filediff_id=None, interfilediff_id=None,
                            first_line=10, num_lines=5, issue_opened=None,
                            issue_status=None):
        """Creates a diff comment and returns the payload response."""
        if filediff_id is None:
            diffset = review_request.diffset_history.diffsets.latest()
            filediff = diffset.files.all()[0]
            filediff_id = filediff.id

        data = {
            'filediff_id': filediff_id,
            'text': comment_text,
            'first_line': first_line,
            'num_lines': num_lines,
        }

        if interfilediff_id is not None:
            data['interfilediff_id'] = interfilediff_id

        if issue_opened is not None:
            data['issue_opened'] = issue_opened

        if issue_status is not None:
            data['issue_status'] = issue_status

        if review_request.local_site:
            local_site_name = review_request.local_site.name
        else:
            local_site_name = None

        review = Review.objects.get(pk=review_id)

        rsp = self.api_post(
            get_review_diff_comment_list_url(review, local_site_name),
            data,
            expected_mimetype=review_diff_comment_item_mimetype)
        self.assertEqual(rsp['stat'], 'ok')

        return rsp
示例#35
0
    def _postNewDiffComment(self, review_request, review_id, comment_text,
                            filediff_id=None, interfilediff_id=None,
                            first_line=10, num_lines=5, issue_opened=None,
                            issue_status=None):
        """Creates a diff comment and returns the payload response."""
        if filediff_id is None:
            diffset = review_request.diffset_history.diffsets.latest()
            filediff = diffset.files.all()[0]
            filediff_id = filediff.id

        data = {
            'filediff_id': filediff_id,
            'text': comment_text,
            'first_line': first_line,
            'num_lines': num_lines,
        }

        if interfilediff_id is not None:
            data['interfilediff_id'] = interfilediff_id

        if issue_opened is not None:
            data['issue_opened'] = issue_opened

        if issue_status is not None:
            data['issue_status'] = issue_status

        if review_request.local_site:
            local_site_name = review_request.local_site.name
        else:
            local_site_name = None

        review = Review.objects.get(pk=review_id)

        rsp = self.apiPost(
            get_review_diff_comment_list_url(review, local_site_name),
            data,
            expected_mimetype=review_diff_comment_item_mimetype)
        self.assertEqual(rsp['stat'], 'ok')

        return rsp
示例#36
0
    def test_post_with_issue(self):
        """Testing the
        POST review-requests/<id>/reviews/<id>/diff-comments/ API
        with an issue
        """
        diff_comment_text = 'Test diff comment with an opened issue'

        review_request, filediff = self._create_diff_review_request()
        review = self.create_review(review_request, user=self.user)
        rsp = self.apiPost(get_review_diff_comment_list_url(review), {
            'filediff_id': filediff.pk,
            'issue_opened': True,
            'first_line': 1,
            'num_lines': 5,
            'text': diff_comment_text,
        },
                           expected_mimetype=review_diff_comment_item_mimetype)

        self.assertEqual(rsp['stat'], 'ok')
        self.assertTrue('diff_comment' in rsp)
        self.assertEqual(rsp['diff_comment']['text'], diff_comment_text)
        self.assertTrue(rsp['diff_comment']['issue_opened'])
示例#37
0
    def test_post_with_interfilediff_same_filediff(self):
        """Testing the POST <URL> API with interfilediff_id == filediff_id"""
        review_request, filediff = self._create_diff_review_request()
        review = self.create_review(review_request, user=self.user)

        rsp = self.api_post(
            get_review_diff_comment_list_url(review),
            {
                'filediff_id': filediff.pk,
                'interfilediff_id': filediff.pk,
                'issue_opened': True,
                'first_line': 1,
                'num_lines': 5,
                'text': 'foo',
            },
            expected_status=400)

        self.assertEqual(rsp['stat'], 'fail')
        self.assertEqual(rsp['err']['code'], INVALID_FORM_DATA.code)
        self.assertEqual(rsp['fields'], {
            'interfilediff_id': ['This cannot be the same as filediff_id.'],
        })
示例#38
0
    def test_post_with_interfilediff_outside_diffset_history(self):
        """Testing the POST <URL> API with interfilediff_id corresponding to a
        FileDiff outside the current DiffSetHistory
        """
        review_request, filediff = self._create_diff_review_request()
        review = self.create_review(review_request, user=self.user)

        other_filediff = self._create_diff_review_request()[1]

        rsp = self.api_post(get_review_diff_comment_list_url(review), {
            'filediff_id': filediff.pk,
            'interfilediff_id': other_filediff.pk,
            'issue_opened': True,
            'first_line': 1,
            'num_lines': 5,
            'text': 'foo',
        },
                            expected_status=400)

        self.assertEqual(rsp['stat'], 'fail')
        self.assertEqual(rsp['err']['code'], INVALID_FORM_DATA.code)
        self.assertEqual(rsp['fields'], {
            'interfilediff_id': ['This is not a valid interfilediff ID.'],
        })
示例#39
0
    def test_post_with_base_filediff_dvcs_enabled_no_history(self):
        """Testing the POST <URL> API with base_filediff_id when DVCS feature
        enabled and review request not created with commit history
        """
        with override_feature_check(dvcs_feature.feature_id, enabled=True):
            review_request, filediff = self._create_diff_review_request()
            review = self.create_review(review_request, user=self.user)

            rsp = self.api_post(get_review_diff_comment_list_url(review), {
                'filediff_id': filediff.pk,
                'base_filediff_id': filediff.pk,
                'issue_opened': True,
                'first_line': 1,
                'num_lines': 5,
                'text': 'foo',
            },
                                expected_status=400)

            self.assertEqual(rsp['stat'], 'fail')
            self.assertEqual(rsp['err']['code'], INVALID_FORM_DATA.code)
            self.assertEqual(rsp['fields']['base_filediff_id'], [
                'This field cannot be specified on review requests created '
                'without history support.'
            ])
    def test_post_with_issue(self):
        """Testing the
        POST review-requests/<id>/reviews/<id>/diff-comments/ API
        with an issue
        """
        diff_comment_text = 'Test diff comment with an opened issue'

        review_request, filediff = self._create_diff_review_request()
        review = self.create_review(review_request, user=self.user)
        rsp = self.apiPost(
            get_review_diff_comment_list_url(review),
            {
                'filediff_id': filediff.pk,
                'issue_opened': True,
                'first_line': 1,
                'num_lines': 5,
                'text': diff_comment_text,
            },
            expected_mimetype=review_diff_comment_item_mimetype)

        self.assertEqual(rsp['stat'], 'ok')
        self.assertTrue('diff_comment' in rsp)
        self.assertEqual(rsp['diff_comment']['text'], diff_comment_text)
        self.assertTrue(rsp['diff_comment']['issue_opened'])