Exemplo n.º 1
0
 def test_json_base64_upload_no_type(self):
     """
     Test that we can upload a project media using json with pure base64 string as data (no data mime provided)
     also test that the serializer infer the file type
     """
     client = self.data_engineer_1_client
     url = reverse('api:project-media-list')
     project = self.project_1
     # first delete all project media
     ProjectMedia.objects.filter(project=project).delete()
     b64s = factories.get_chubby_bat_img_base64()
     payload = {'project': project.id, 'file': b64s}
     resp = client.post(url, data=payload, format='json')
     self.assertEqual(resp.status_code, status.HTTP_201_CREATED)
     # test that the file type (extension) has been rightly inferred
     data = resp.json()
     self.assertIn('file', data)
     file = data['file']
     # should be an url
     self.assertTrue(file.startswith('http://'))
     # expect png extension
     self.assertTrue(file.endswith('.png'))
     # compare image
     project_media = ProjectMedia.objects.filter(id=data['id']).first()
     self.assertIsNotNone(project_media)
     self.assertEqual(
         open(factories.CHUBBY_BAT_IMAGE_PATH, 'rb').read(),
         open(project_media.path, 'rb').read())
Exemplo n.º 2
0
    def test_json_base64_upload_html_format(self):
        """
        Test that we can upload a project media using json with string like
        data:image/png;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7
        """
        client = self.data_engineer_1_client
        url = reverse('api:project-media-list')
        project = self.project_1
        # first delete all project media
        ProjectMedia.objects.filter(project=project).delete()
        b64s = factories.get_chubby_bat_img_base64()
        payload = {
            'project': project.id,
            'file': 'data:image/png;base64,{}'.format(b64s.decode('ascii'))
        }
        resp = client.post(url, data=payload, format='json')
        self.assertEqual(resp.status_code, status.HTTP_201_CREATED)
        # test that the file type (extension) has been rightly inferred
        data = resp.json()
        self.assertIn('file', data)
        file = data['file']
        # should be an url
        self.assertTrue(file.startswith('http://'))
        # expect png extension
        self.assertTrue(file.endswith('.png'))
        # compare image
        project_media = ProjectMedia.objects.filter(id=data['id']).first()
        self.assertIsNotNone(project_media)
        self.assertEqual(
            open(factories.CHUBBY_BAT_IMAGE_PATH, 'rb').read(),
            open(project_media.path, 'rb').read())

        # test that even if we put the wrong file type it will infer the right one
        # send with data:image/gif
        payload = {
            'project': project.id,
            'file': 'data:image/gif;base64,{}'.format(b64s.decode('ascii'))
        }
        resp = client.post(url, data=payload, format='json')
        self.assertEqual(resp.status_code, status.HTTP_201_CREATED)
        # test that the file type (extension) has been rightly inferred
        data = resp.json()
        # expect png extension
        self.assertTrue(data['file'].endswith('.png'))