예제 #1
0
    def test_get_file_attachments(self):
        """Testing the GET review-requests/<id>/file-attachments/ API"""
        review_request = self.create_review_request(create_repository=True, publish=True)

        # This is the file attachment that should be returned.
        self.create_file_attachment(review_request, orig_filename="trophy1.png")

        # This attachment shouldn't be shown in the results. It represents
        # a file to be shown in the diff viewer.
        self.create_file_attachment(
            review_request,
            orig_filename="trophy2.png",
            repo_path="/trophy.png",
            repo_revision="123",
            repository=review_request.repository,
        )

        # This attachment shouldn't be shown either, for the same
        # reasons.
        diffset = self.create_diffset(review_request)
        filediff = self.create_filediff(
            diffset, source_file="/trophy3.png", dest_file="/trophy3.png", source_revision="123", dest_detail="124"
        )
        self.create_file_attachment(review_request, orig_filename="trophy3.png", added_in_filediff=filediff)

        rsp = self.apiGet(get_file_attachment_list_url(review_request), expected_mimetype=file_attachment_list_mimetype)
        self.assertEqual(rsp["stat"], "ok")

        file_attachments = rsp["file_attachments"]
        self.assertEqual(len(file_attachments), 1)
        self.assertEqual(file_attachments[0]["filename"], "trophy1.png")
    def test_post_with_attachment_history_id_wrong_review_request(self):
        """Testing the POST review-requests/<id>/file-attachments/ API with a
        file attachment history belonging to a different reiew request
        """
        review_request_1 = self.create_review_request(submitter=self.user,
                                                      publish=True)
        history = FileAttachmentHistory.objects.create(display_position=0)
        review_request_1.file_attachment_histories.add(history)

        review_request_2 = self.create_review_request(submitter=self.user,
                                                      publish=True)

        self.assertEqual(history.latest_revision, 0)

        with open(self._getTrophyFilename(), "r") as f:
            self.assertTrue(f)
            rsp = self.api_post(
                get_file_attachment_list_url(review_request_2),
                {
                    'path': f,
                    'attachment_history': history.pk,
                },
                expected_status=400)

            self.assertEqual(rsp['stat'], 'fail')
            self.assertEqual(rsp['err']['code'], INVALID_FORM_DATA.code)

            history = FileAttachmentHistory.objects.get(pk=history.pk)
            self.assertEqual(history.latest_revision, 0)
예제 #3
0
    def test_post_with_attachment_history_id_wrong_review_request(self):
        """Testing the POST review-requests/<id>/file-attachments/ API with a
        file attachment history belonging to a different reiew request
        """
        review_request_1 = self.create_review_request(submitter=self.user,
                                                      publish=True)
        history = FileAttachmentHistory.objects.create(display_position=0)
        review_request_1.file_attachment_histories.add(history)

        review_request_2 = self.create_review_request(submitter=self.user,
                                                      publish=True)

        self.assertEqual(history.latest_revision, 0)

        with open(self.get_sample_image_filename(), 'rb') as f:
            self.assertTrue(f)
            rsp = self.api_post(get_file_attachment_list_url(review_request_2),
                                {
                                    'path': f,
                                    'attachment_history': history.pk,
                                },
                                expected_status=400)

            self.assertEqual(rsp['stat'], 'fail')
            self.assertEqual(rsp['err']['code'], INVALID_FORM_DATA.code)

            history = FileAttachmentHistory.objects.get(pk=history.pk)
            self.assertEqual(history.latest_revision, 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
        )

        if populate_items:
            # This is the file attachment that should be returned.
            items = [self.create_file_attachment(review_request, orig_filename="logo1.png")]

            # This attachment shouldn't be shown in the results. It represents
            # a file to be shown in the diff viewer.
            self.create_file_attachment(
                review_request,
                orig_filename="logo2.png",
                repo_path="/logo.png",
                repo_revision="123",
                repository=review_request.repository,
            )

            # This attachment shouldn't be shown either, for the same
            # reasons.
            diffset = self.create_diffset(review_request)
            filediff = self.create_filediff(
                diffset, source_file="/logo3.png", dest_file="/logo3.png", source_revision="123", dest_detail="124"
            )
            self.create_file_attachment(review_request, orig_filename="logo3.png", added_in_filediff=filediff)
        else:
            items = []

        return (get_file_attachment_list_url(review_request, local_site_name), file_attachment_list_mimetype, items)
    def test_post_with_attachment_history_id_wrong_review_request(self):
        """Testing the POST review-requests/<id>/file-attachments/ API with a
        file attachment history belonging to a different reiew request
        """
        review_request_1 = self.create_review_request(submitter=self.user, publish=True)
        history = FileAttachmentHistory.objects.create(display_position=0)
        review_request_1.file_attachment_histories.add(history)

        review_request_2 = self.create_review_request(submitter=self.user, publish=True)

        self.assertEqual(history.latest_revision, 0)

        with open(self.get_sample_image_filename(), "r") as f:
            self.assertTrue(f)
            rsp = self.api_post(
                get_file_attachment_list_url(review_request_2),
                {"path": f, "attachment_history": history.pk},
                expected_status=400,
            )

            self.assertEqual(rsp["stat"], "fail")
            self.assertEqual(rsp["err"]["code"], INVALID_FORM_DATA.code)

            history = FileAttachmentHistory.objects.get(pk=history.pk)
            self.assertEqual(history.latest_revision, 0)
    def test_post_with_attachment_history_id(self):
        """Testing the POST review-requests/<id>/file-attachments/ API with a
        file attachment history
        """
        review_request = self.create_review_request(submitter=self.user,
                                                    publish=True)
        history = FileAttachmentHistory.objects.create(display_position=0)
        review_request.file_attachment_histories.add(history)

        self.assertEqual(history.latest_revision, 0)

        with open(self._getTrophyFilename(), "r") as f:
            self.assertTrue(f)
            rsp = self.api_post(
                get_file_attachment_list_url(review_request),
                {
                    'path': f,
                    'attachment_history': history.pk,
                },
                expected_mimetype=file_attachment_item_mimetype)

            self.assertEqual(rsp['stat'], 'ok')
            self.assertEqual(rsp['file_attachment']['attachment_history_id'],
                             history.pk)

            history = FileAttachmentHistory.objects.get(pk=history.pk)
            self.assertEqual(history.latest_revision, 1)

            review_request.get_draft().publish()

            # Add a second revision
            f.seek(0)
            rsp = self.api_post(
                get_file_attachment_list_url(review_request),
                {
                    'path': f,
                    'attachment_history': history.pk,
                },
                expected_mimetype=file_attachment_item_mimetype)

            self.assertEqual(rsp['stat'], 'ok')
            self.assertEqual(rsp['file_attachment']['attachment_history_id'],
                             history.pk)

            history = FileAttachmentHistory.objects.get(pk=history.pk)
            self.assertEqual(history.latest_revision, 2)
예제 #7
0
    def setup_basic_post_test(self, user, with_local_site, local_site_name,
                              post_valid_data):
        review_request = self.create_review_request(
            with_local_site=with_local_site, submitter=user, publish=True)

        return (get_file_attachment_list_url(review_request, local_site_name),
                file_attachment_item_mimetype, {
                    'path': open(self.get_sample_image_filename(), 'rb')
                }, [review_request])
    def setup_basic_post_test(self, user, with_local_site, local_site_name, post_valid_data):
        review_request = self.create_review_request(with_local_site=with_local_site, submitter=user, publish=True)

        return (
            get_file_attachment_list_url(review_request, local_site_name),
            file_attachment_item_mimetype,
            {"path": open(self.get_sample_image_filename(), "r")},
            [review_request],
        )
    def setup_basic_post_test(self, user, with_local_site, local_site_name,
                              post_valid_data):
        review_request = self.create_review_request(
            with_local_site=with_local_site,
            submitter=user,
            publish=True)

        return (get_file_attachment_list_url(review_request, local_site_name),
                file_attachment_item_mimetype,
                {'path': open(self._getTrophyFilename(), 'r')},
                [review_request])
    def test_post_with_attachment_history_id(self):
        """Testing the POST review-requests/<id>/file-attachments/ API with a
        file attachment history
        """
        review_request = self.create_review_request(submitter=self.user, publish=True)
        history = FileAttachmentHistory.objects.create(display_position=0)
        review_request.file_attachment_histories.add(history)

        self.assertEqual(history.latest_revision, 0)

        with open(self.get_sample_image_filename(), "r") as f:
            self.assertTrue(f)
            rsp = self.api_post(
                get_file_attachment_list_url(review_request),
                {"path": f, "attachment_history": history.pk},
                expected_mimetype=file_attachment_item_mimetype,
            )

            self.assertEqual(rsp["stat"], "ok")
            self.assertEqual(rsp["file_attachment"]["attachment_history_id"], history.pk)

            history = FileAttachmentHistory.objects.get(pk=history.pk)
            self.assertEqual(history.latest_revision, 1)

            review_request.get_draft().publish()

            # Add a second revision
            f.seek(0)
            rsp = self.api_post(
                get_file_attachment_list_url(review_request),
                {"path": f, "attachment_history": history.pk},
                expected_mimetype=file_attachment_item_mimetype,
            )

            self.assertEqual(rsp["stat"], "ok")
            self.assertEqual(rsp["file_attachment"]["attachment_history_id"], history.pk)

            history = FileAttachmentHistory.objects.get(pk=history.pk)
            self.assertEqual(history.latest_revision, 2)
예제 #11
0
    def test_post_file_attachments(self):
        """Testing the POST review-requests/<id>/file-attachments/ API"""
        review_request = self.create_review_request(submitter=self.user, publish=True)

        f = open(self._getTrophyFilename(), "r")
        self.assertNotEqual(f, None)
        rsp = self.apiPost(
            get_file_attachment_list_url(review_request), {"path": f}, expected_mimetype=file_attachment_item_mimetype
        )
        f.close()

        self.assertEqual(rsp["stat"], "ok")

        review_request.publish(review_request.submitter)
예제 #12
0
    def test_post_file_attachments_with_permission_denied_error(self):
        """Testing the POST review-requests/<id>/file-attachments/ API with Permission Denied error"""
        review_request = self.create_review_request()
        self.assertNotEqual(review_request.submitter, self.user)

        f = open(self._getTrophyFilename(), "r")
        self.assert_(f)
        rsp = self.apiPost(
            get_file_attachment_list_url(review_request), {"caption": "Trophy", "path": f}, expected_status=403
        )
        f.close()

        self.assertEqual(rsp["stat"], "fail")
        self.assertEqual(rsp["err"]["code"], PERMISSION_DENIED.code)
    def test_post_not_owner(self):
        """Testing the POST review-requests/<id>/file-attachments/ API
        without owner
        """
        review_request = self.create_review_request()
        self.assertNotEqual(review_request.submitter, self.user)

        with open(self.get_sample_image_filename(), "r") as f:
            self.assertTrue(f)
            rsp = self.api_post(
                get_file_attachment_list_url(review_request), {"caption": "logo", "path": f}, expected_status=403
            )

        self.assertEqual(rsp["stat"], "fail")
        self.assertEqual(rsp["err"]["code"], PERMISSION_DENIED.code)
예제 #14
0
    def test_post_file_attachments_with_site(self):
        """Testing the POST review-requests/<id>/file-attachments/ API with a local site"""
        user = self._login_user(local_site=True)

        review_request = self.create_review_request(with_local_site=True, publish=True, submitter=user)

        f = open(self._getTrophyFilename(), "r")
        self.assertNotEqual(f, None)
        rsp = self.apiPost(
            get_file_attachment_list_url(review_request, self.local_site_name),
            {"path": f},
            expected_mimetype=file_attachment_item_mimetype,
        )
        f.close()

        self.assertEqual(rsp["stat"], "ok")
예제 #15
0
    def test_post_file_attachments(self):
        """Testing the POST review-requests/<id>/file-attachments/ API"""
        review_request = self.create_review_request(submitter=self.user,
                                                    publish=True)

        f = open(self._getTrophyFilename(), "r")
        self.assertNotEqual(f, None)
        rsp = self.apiPost(
            get_file_attachment_list_url(review_request),
            {'path': f},
            expected_mimetype=file_attachment_item_mimetype)
        f.close()

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

        review_request.publish(review_request.submitter)
예제 #16
0
    def test_post_file_attachments_with_site(self):
        """Testing the POST review-requests/<id>/file-attachments/ API with a local site"""
        user = self._login_user(local_site=True)

        review_request = self.create_review_request(with_local_site=True,
                                                    publish=True,
                                                    submitter=user)

        f = open(self._getTrophyFilename(), 'r')
        self.assertNotEqual(f, None)
        rsp = self.apiPost(
            get_file_attachment_list_url(review_request, self.local_site_name),
            {'path': f},
            expected_mimetype=file_attachment_item_mimetype)
        f.close()

        self.assertEqual(rsp['stat'], 'ok')
예제 #17
0
    def test_post_not_owner(self):
        """Testing the POST review-requests/<id>/file-attachments/ API
        without owner
        """
        review_request = self.create_review_request()
        self.assertNotEqual(review_request.submitter, self.user)

        with open(self.get_sample_image_filename(), 'rb') as f:
            self.assertTrue(f)
            rsp = self.api_post(get_file_attachment_list_url(review_request), {
                'caption': 'logo',
                'path': f,
            },
                                expected_status=403)

        self.assertEqual(rsp['stat'], 'fail')
        self.assertEqual(rsp['err']['code'], PERMISSION_DENIED.code)
예제 #18
0
    def test_post_file_attachments_with_site_no_access(self):
        """Testing the POST review-requests/<id>/file-attachments/ API with a local site and Permission Denied error"""
        user = self._login_user(local_site=True)

        review_request = self.create_review_request(with_local_site=True, publish=True, submitter=user)

        self._login_user()

        f = open(self._getTrophyFilename(), "r")
        self.assertNotEqual(f, None)
        rsp = self.apiPost(
            get_file_attachment_list_url(review_request, self.local_site_name), {"path": f}, expected_status=403
        )
        f.close()

        self.assertEqual(rsp["stat"], "fail")
        self.assertEqual(rsp["err"]["code"], PERMISSION_DENIED.code)
예제 #19
0
    def test_post_file_attachments_with_permission_denied_error(self):
        """Testing the POST review-requests/<id>/file-attachments/ API with Permission Denied error"""
        review_request = self.create_review_request()
        self.assertNotEqual(review_request.submitter, self.user)

        f = open(self._getTrophyFilename(), "r")
        self.assert_(f)
        rsp = self.apiPost(
            get_file_attachment_list_url(review_request),
            {
                'caption': 'Trophy',
                'path': f,
            },
            expected_status=403)
        f.close()

        self.assertEqual(rsp['stat'], 'fail')
        self.assertEqual(rsp['err']['code'], PERMISSION_DENIED.code)
예제 #20
0
    def test_post_not_owner(self):
        """Testing the POST review-requests/<id>/file-attachments/ API
        without owner
        """
        review_request = self.create_review_request()
        self.assertNotEqual(review_request.submitter, self.user)

        with open(self._getTrophyFilename(), "r") as f:
            self.assertTrue(f)
            rsp = self.api_post(
                get_file_attachment_list_url(review_request),
                {
                    'caption': 'Trophy',
                    'path': f,
                },
                expected_status=403)

        self.assertEqual(rsp['stat'], 'fail')
        self.assertEqual(rsp['err']['code'], PERMISSION_DENIED.code)
예제 #21
0
    def test_post_with_permission_denied_error(self):
        """Testing the POST review-requests/<id>/file-attachments/ API
        with Permission Denied error
        """
        review_request = self.create_review_request()
        self.assertNotEqual(review_request.submitter, self.user)

        f = open(self._getTrophyFilename(), "r")
        self.assertTrue(f)
        rsp = self.apiPost(
            get_file_attachment_list_url(review_request),
            {
                'caption': 'Trophy',
                'path': f,
            },
            expected_status=403)
        f.close()

        self.assertEqual(rsp['stat'], 'fail')
        self.assertEqual(rsp['err']['code'], PERMISSION_DENIED.code)
예제 #22
0
    def test_post_file_attachments_with_site_no_access(self):
        """Testing the POST review-requests/<id>/file-attachments/ API with a local site and Permission Denied error"""
        user = self._login_user(local_site=True)

        review_request = self.create_review_request(with_local_site=True,
                                                    publish=True,
                                                    submitter=user)

        self._login_user()

        f = open(self._getTrophyFilename(), 'r')
        self.assertNotEqual(f, None)
        rsp = self.apiPost(
            get_file_attachment_list_url(review_request, self.local_site_name),
            {'path': f},
            expected_status=403)
        f.close()

        self.assertEqual(rsp['stat'], 'fail')
        self.assertEqual(rsp['err']['code'], PERMISSION_DENIED.code)
예제 #23
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)

        if populate_items:
            # This is the file attachment that should be returned.
            items = [
                self.create_file_attachment(review_request,
                                            orig_filename='trophy1.png'),
            ]

            # This attachment shouldn't be shown in the results. It represents
            # a file to be shown in the diff viewer.
            self.create_file_attachment(review_request,
                                        orig_filename='trophy2.png',
                                        repo_path='/trophy.png',
                                        repo_revision='123',
                                        repository=review_request.repository)

            # This attachment shouldn't be shown either, for the same
            # reasons.
            diffset = self.create_diffset(review_request)
            filediff = self.create_filediff(diffset,
                                            source_file='/trophy3.png',
                                            dest_file='/trophy3.png',
                                            source_revision='123',
                                            dest_detail='124')
            self.create_file_attachment(review_request,
                                        orig_filename='trophy3.png',
                                        added_in_filediff=filediff)
        else:
            items = []

        return (get_file_attachment_list_url(review_request, local_site_name),
                file_attachment_list_mimetype,
                items)
예제 #24
0
    def test_get_file_attachments(self):
        """Testing the GET review-requests/<id>/file-attachments/ API"""
        review_request = self.create_review_request(create_repository=True,
                                                    publish=True)

        # This is the file attachment that should be returned.
        self.create_file_attachment(review_request,
                                    orig_filename='trophy1.png')

        # This attachment shouldn't be shown in the results. It represents
        # a file to be shown in the diff viewer.
        self.create_file_attachment(review_request,
                                    orig_filename='trophy2.png',
                                    repo_path='/trophy.png',
                                    repo_revision='123',
                                    repository=review_request.repository)

        # This attachment shouldn't be shown either, for the same
        # reasons.
        diffset = self.create_diffset(review_request)
        filediff = self.create_filediff(diffset,
                                        source_file='/trophy3.png',
                                        dest_file='/trophy3.png',
                                        source_revision='123',
                                        dest_detail='124')
        self.create_file_attachment(review_request,
                                    orig_filename='trophy3.png',
                                    added_in_filediff=filediff)

        rsp = self.apiGet(
            get_file_attachment_list_url(review_request),
            expected_mimetype=file_attachment_list_mimetype)
        self.assertEqual(rsp['stat'], 'ok')

        file_attachments = rsp['file_attachments']
        self.assertEqual(len(file_attachments), 1)
        self.assertEqual(file_attachments[0]['filename'], 'trophy1.png')
예제 #25
0
 def setup_review_request_child_test(self, review_request):
     return (get_file_attachment_list_url(review_request),
             file_attachment_list_mimetype)
예제 #26
0
 def setup_review_request_child_test(self, review_request):
     return (get_file_attachment_list_url(review_request),
             file_attachment_list_mimetype)