def test_put_screenshot(self):
        """Testing the PUT review-requests/<id>/draft/screenshots/<id>/ API"""
        draft_caption = 'The new caption'

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

        f = open(self._getTrophyFilename(), "r")
        rsp = self.apiPost(get_screenshot_draft_list_url(review_request), {
            'caption': 'Trophy',
            'path': f,
        },
                           expected_mimetype=screenshot_draft_item_mimetype)
        f.close()
        review_request.publish(self.user)

        screenshot = Screenshot.objects.get(pk=rsp['draft_screenshot']['id'])

        # Now modify the caption.
        rsp = self.apiPut(get_screenshot_draft_item_url(
            review_request, screenshot.id), {'caption': draft_caption},
                          expected_mimetype=screenshot_draft_item_mimetype)

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

        draft = review_request.get_draft(self.user)
        self.assertNotEqual(draft, None)

        screenshot = Screenshot.objects.get(pk=screenshot.id)
        self.assertEqual(screenshot.draft_caption, draft_caption)
    def setup_basic_get_test(self, user, with_local_site, local_site_name):
        review_request = self.create_review_request(
            with_local_site=with_local_site, submitter=user, publish=True)
        screenshot = self.create_screenshot(review_request, draft=True)

        return (get_screenshot_draft_item_url(review_request, screenshot.pk,
                                              local_site_name),
                screenshot_draft_item_mimetype, screenshot)
    def test_put_screenshot_with_site_no_access(self):
        """Testing the PUT review-requests/<id>/draft/screenshots/<id>/ API with a local site and Permission Denied error"""
        review_request, screenshot_id = self.test_post_screenshots_with_site()
        review_request.publish(User.objects.get(username='******'))

        self._login_user()

        rsp = self.apiPut(get_screenshot_draft_item_url(
            review_request, screenshot_id, self.local_site_name),
                          {'caption': 'test'},
                          expected_status=403)
        self.assertEqual(rsp['stat'], 'fail')
        self.assertEqual(rsp['err']['code'], PERMISSION_DENIED.code)
    def setup_basic_put_test(self, user, with_local_site, local_site_name,
                             put_valid_data):
        review_request = self.create_review_request(
            with_local_site=with_local_site, submitter=user, publish=True)
        screenshot = self.create_screenshot(review_request, draft=True)

        if put_valid_data:
            put_data = {
                'caption': 'The new caption',
            }
        else:
            put_data = {}

        return (get_screenshot_draft_item_url(review_request, screenshot.pk,
                                              local_site_name),
                screenshot_draft_item_mimetype, put_data, screenshot,
                [review_request])
    def test_put_screenshot_with_site(self):
        """Testing the PUT review-requests/<id>/draft/screenshots/<id>/ API with a local site"""
        draft_caption = 'The new caption'
        user = User.objects.get(username='******')

        review_request, screenshot_id = self.test_post_screenshots_with_site()
        review_request.publish(user)

        rsp = self.apiPut(get_screenshot_draft_item_url(
            review_request, screenshot_id, self.local_site_name),
                          {'caption': draft_caption},
                          expected_mimetype=screenshot_draft_item_mimetype)
        self.assertEqual(rsp['stat'], 'ok')

        draft = review_request.get_draft(user)
        self.assertNotEqual(draft, None)

        screenshot = Screenshot.objects.get(pk=screenshot_id)
        self.assertEqual(screenshot.draft_caption, draft_caption)