def test_get(self): """ This tests that the view responds correctly for a user with edit permissions on this image """ # Get response = self.client.get(reverse('wagtailimages_generate_url', args=(self.image.id, 'fill-800x600'))) # Check response self.assertEqual(response.status_code, 200) self.assertEqual(response['Content-Type'], 'application/json') # Check JSON content_json = json.loads(response.content.decode()) self.assertEqual(set(content_json.keys()), set(['url', 'local_url'])) expected_url = 'http://localhost/images/%(signature)s/%(image_id)d/fill-800x600/' % { 'signature': urlquote(generate_signature(self.image.id, 'fill-800x600').decode()), 'image_id': self.image.id, } self.assertEqual(content_json['url'], expected_url) expected_local_url = '/images/%(signature)s/%(image_id)d/fill-800x600/' % { 'signature': urlquote(generate_signature(self.image.id, 'fill-800x600').decode()), 'image_id': self.image.id, } self.assertEqual(content_json['local_url'], expected_local_url)
def test_get(self): """ This tests that the view responds correctly for a user with edit permissions on this image """ # Get response = self.client.get( reverse('wagtailimages_generate_url', args=(self.image.id, 'fill-800x600'))) # Check response self.assertEqual(response.status_code, 200) self.assertEqual(response['Content-Type'], 'application/json') # Check JSON content_json = json.loads(response.content.decode()) self.assertEqual(set(content_json.keys()), set(['url', 'local_url'])) expected_url = 'http://localhost/images/%(signature)s/%(image_id)d/fill-800x600/' % { 'signature': urlquote( generate_signature(self.image.id, 'fill-800x600').decode()), 'image_id': self.image.id, } self.assertEqual(content_json['url'], expected_url) expected_local_url = '/images/%(signature)s/%(image_id)d/fill-800x600/' % { 'signature': urlquote( generate_signature(self.image.id, 'fill-800x600').decode()), 'image_id': self.image.id, } self.assertEqual(content_json['local_url'], expected_local_url)
def test_get(self): """ Test a valid GET request to the view """ # Generate signature signature = generate_signature(self.image.id, 'fill-800x600') # Get the image response = self.client.get( reverse('wagtailimages_serve', args=(signature, self.image.id, 'fill-800x600'))) # Check response self.assertEqual(response.status_code, 200) self.assertEqual(response['Content-Type'], 'image/jpeg') # Make sure the cache headers are set to expire after at least one month self.assertIn('Cache-Control', response) self.assertEqual(response['Cache-Control'].split('=')[0], 'max-age') self.assertTrue( int(response['Cache-Control'].split('=')[1]) > datetime.timedelta( days=30).seconds) self.assertIn('Expires', response) self.assertTrue( dateutil.parser.parse(response['Expires']) > timezone.now() + datetime.timedelta(days=30))
def generate_url(request, image_id, filter_spec): # Get the image Image = get_image_model() try: image = Image.objects.get(id=image_id) except Image.DoesNotExist: return json_response({ 'error': "Cannot find image." }, status=404) # Check if this user has edit permission on this image if not image.is_editable_by_user(request.user): return json_response({ 'error': "You do not have permission to generate a URL for this image." }, status=403) # Parse the filter spec to make sure its valid if not Filter(spec=filter_spec).is_valid(): return json_response({ 'error': "Invalid filter spec." }, status=400) # Generate url signature = generate_signature(image_id, filter_spec) url = reverse('wagtailimages_serve', args=(signature, image_id, filter_spec)) # Get site root url try: site_root_url = Site.objects.get(is_default_site=True).root_url except Site.DoesNotExist: site_root_url = Site.objects.first().root_url return json_response({'url': site_root_url + url, 'local_url': url}, status=200)
def test_get_invalid_signature(self): """ Test that an invalid signature returns a 403 response """ # Generate a signature for the incorrect image id signature = generate_signature(self.image.id + 1, 'fill-800x600') # Get the image response = self.client.get(reverse('wagtailimages_serve', args=(signature, self.image.id, 'fill-800x600'))) # Check response self.assertEqual(response.status_code, 403)
def test_get_invalid_filter_spec(self): """ Test that an invalid filter spec returns a 400 response This is very unlikely to happen in reality. A user would have to create signature for the invalid filter spec which can't be done with Wagtails built in URL generator. We should test it anyway though. """ # Generate a signature with the invalid filterspec signature = generate_signature(self.image.id, 'bad-filter-spec') # Get the image response = self.client.get(reverse('wagtailimages_serve', args=(signature, self.image.id, 'bad-filter-spec'))) # Check response self.assertEqual(response.status_code, 400)
def test_get(self): """ Test a valid GET request to the view """ # Generate signature signature = generate_signature(self.image.id, 'fill-800x600') # Get the image response = self.client.get(reverse('wagtailimages_serve', args=(signature, self.image.id, 'fill-800x600'))) # Check response self.assertEqual(response.status_code, 200) self.assertEqual(response['Content-Type'], 'image/jpeg') # Make sure the cache headers are set to expire after at least one month self.assertIn('Cache-Control', response) self.assertEqual(response['Cache-Control'].split('=')[0], 'max-age') self.assertTrue(int(response['Cache-Control'].split('=')[1]) > datetime.timedelta(days=30).seconds)
def test_signature_generation(self): self.assertEqual(generate_signature(100, 'fill-800x600'), b'xnZOzQyUg6pkfciqcfRJRosOrGg=')