def test_uploadform_post_multiple_images_fails(self):
        testuser = create_user('testuser')
        testimage1 = create_image(200, 100)
        testimage2 = create_image(100, 100)
        collection = TemporaryFileCollection.objects.create(user=testuser)
        temporaryfile = TemporaryFile(collection=collection,
                                      filename='testfile1.png')
        temporaryfile.file.save('testfile1.png', ContentFile(testimage1))
        temporaryfile = TemporaryFile(collection=collection,
                                      filename='testfile2.png')
        temporaryfile.file.save('testfile2.png', ContentFile(testimage2))

        testrole = baker.make('cradmin_legacy_testapp.TstRole')
        cradmin_app = mock.MagicMock()
        cradmin_app.reverse_appurl.return_value = '/success'

        self.assertEqual(ArchiveImage.objects.count(), 0)
        mockresponse = self.mock_http200_postrequest_htmls(
            requestuser=testuser,
            cradmin_role=testrole,
            cradmin_app=cradmin_app,
            requestkwargs={'data': {
                'filecollectionid': collection.id
            }})
        self.assertEqual(ArchiveImage.objects.count(), 0)
        self.assertTrue(
            mockresponse.selector.exists('#div_id_filecollectionid.has-error'))
        self.assertIn(
            'You must upload exactly one image.',
            mockresponse.selector.one(
                '#div_id_filecollectionid').alltext_normalized)
Esempio n. 2
0
 def clean_validates_accept(self):
     collection = TemporaryFileCollection.objects.create(
         user=create_user('testuser'), accept='image/png,image/jpeg')
     TemporaryFile(filename='test.png', collection=collection).clean()
     TemporaryFile(filename='test.jpg', collection=collection).clean()
     with self.assertRaises(ValidationError):
         TemporaryFile(filename='test.txt', collection=collection).clean()
    def test_uploadform_post_multiple_images(self):
        testuser = create_user('testuser')
        testimage1 = create_image(200, 100)
        testimage2 = create_image(100, 100)
        collection = TemporaryFileCollection.objects.create(user=testuser)
        temporaryfile = TemporaryFile(collection=collection,
                                      filename='testfile1.png')
        temporaryfile.file.save('testfile1.png', ContentFile(testimage1))
        temporaryfile = TemporaryFile(collection=collection,
                                      filename='testfile2.png')
        temporaryfile.file.save('testfile2.png', ContentFile(testimage2))

        testrole = baker.make('cradmin_legacy_testapp.TstRole')
        cradmin_app = mock.MagicMock()
        cradmin_app.reverse_appurl.return_value = '/success'

        self.assertEqual(ArchiveImage.objects.count(), 0)
        mockresponse = self.mock_http302_postrequest(
            requestuser=testuser,
            cradmin_role=testrole,
            cradmin_app=cradmin_app,
            requestkwargs={'data': {
                'filecollectionid': collection.id
            }})
        self.assertEqual(mockresponse.response['Location'], '/success')
        self.assertEqual(ArchiveImage.objects.count(), 2)
        created_images = ArchiveImage.objects.order_by('name')

        self.assertEqual(created_images[0].image.read(), testimage1)
        self.assertEqual(created_images[0].name, 'testfile1.png')
        self.assertEqual(created_images[0].description, '')

        self.assertEqual(created_images[1].image.read(), testimage2)
        self.assertEqual(created_images[1].name, 'testfile2.png')
        self.assertEqual(created_images[1].description, '')
Esempio n. 4
0
 def test_no_max_filesize_bytes(self):
     collection = baker.make(
         'cradmin_temporaryfileuploadstore.TemporaryFileCollection')
     temporaryfile = TemporaryFile(filename='test.txt',
                                   collection=collection)
     temporaryfile.file.save('test.txt', ContentFile('Testdata'))
     temporaryfile.clean()  # No ValidationError
Esempio n. 5
0
 def test_max_filesize_bytes_size_above_fails(self):
     collection = baker.make(
         'cradmin_temporaryfileuploadstore.TemporaryFileCollection',
         max_filesize_bytes=1)
     temporaryfile = TemporaryFile(filename='test.txt',
                                   collection=collection)
     temporaryfile.file.save('test.txt', ContentFile('Testdata'))
     with self.assertRaisesMessage(ValidationError,
                                   'Can not upload files larger than 1B.'):
         temporaryfile.clean()
Esempio n. 6
0
 def test_delete_removes_physical_file(self):
     collection = TemporaryFileCollection.objects.create(
         user=create_user('testuser'))
     temporaryfile = TemporaryFile(filename='test.txt',
                                   collection=collection)
     temporaryfile.file.save('test.txt', ContentFile('Testdata'))
     physical_file_path = temporaryfile.file.path
     self.assertTrue(os.path.exists(physical_file_path))
     temporaryfile.file.delete()
     temporaryfile.delete()
     self.assertFalse(os.path.exists(physical_file_path))
Esempio n. 7
0
 def test_get_filename_set(self):
     collection = TemporaryFileCollection.objects.create(
         user=create_user('testuser'))
     temporaryfile1 = TemporaryFile(filename='test.txt',
                                    collection=collection)
     temporaryfile1.file.save('x', ContentFile('Testdata'))
     temporaryfile2 = TemporaryFile(filename='test2.txt',
                                    collection=collection)
     temporaryfile2.file.save('y', ContentFile('Testdata'))
     temporaryfile3 = TemporaryFile(filename='test.txt',
                                    collection=collection)
     temporaryfile3.file.save('z', ContentFile('Testdata'))
     self.assertEqual(collection.get_filename_set(),
                      {'test.txt', 'test2.txt'})
    def test_uploadform_post_single_image(self):
        testuser = create_user('testuser')
        testimage = create_image(200, 100)
        collection = TemporaryFileCollection.objects.create(user=testuser)
        temporaryfile = TemporaryFile(collection=collection,
                                      filename='testfile.png')
        temporaryfile.file.save('testfile.png', ContentFile(testimage))

        testrole = baker.make('cradmin_legacy_testapp.TstRole')
        cradmin_app = mock.MagicMock()
        self.assertEqual(ArchiveImage.objects.count(), 0)
        mockresponse = self.mock_http302_postrequest(
            requestuser=testuser,
            cradmin_role=testrole,
            cradmin_app=cradmin_app,
            requestkwargs={'data': {
                'filecollectionid': collection.id
            }})

        self.assertEqual(ArchiveImage.objects.count(), 1)
        created_image = ArchiveImage.objects.first()
        self.assertTrue(mockresponse.response['Location'].endswith(
            '?foreignkey_selected_value={}'.format(created_image.pk)))
        self.assertEqual(created_image.image.read(), testimage)
        self.assertEqual(created_image.name, 'testfile.png')
        self.assertEqual(created_image.description, '')
Esempio n. 9
0
 def test_clear_collection(self):
     collection = TemporaryFileCollection.objects.create(
         user=create_user('testuser'))
     temporaryfile = TemporaryFile(filename='test.txt',
                                   collection=collection)
     temporaryfile.file.save('test.txt', ContentFile('Testdata'))
     physical_file_path = temporaryfile.file.path
     self.assertTrue(os.path.exists(physical_file_path))
     collection.clear_files()
     self.assertFalse(os.path.exists(physical_file_path))
     self.assertEqual(collection.files.count(), 0)
def _create_single_file_temporaryfilecollection(user,
                                                filename='testfile.png',
                                                image=None):
    if image:
        testimage = image
    else:
        testimage = create_image(200, 100)
    collection = TemporaryFileCollection.objects.create(user=user)
    temporaryfile = TemporaryFile(collection=collection, filename=filename)
    temporaryfile.file.save(filename, ContentFile(testimage))
    return collection
Esempio n. 11
0
    def test_singlemode_keeps_only_last_file_delete_physical_file(self):
        collection = TemporaryFileCollection.objects.create(
            user=create_user('testuser'), singlemode=True)

        first_added_temporary_file = TemporaryFile(filename='test1.txt',
                                                   collection=collection)
        first_added_temporary_file.file.save('test1.txt',
                                             ContentFile('Testdata'),
                                             save=False)
        first_added_temporary_file.clean()
        first_added_temporary_file.save()
        first_added_physical_file_path = first_added_temporary_file.file.path
        self.assertTrue(os.path.exists(first_added_physical_file_path))

        last_added_temporary_file = TemporaryFile(filename='test2.txt',
                                                  collection=collection)
        last_added_temporary_file.file.save('test1.txt',
                                            ContentFile('Testdata'),
                                            save=False)
        last_added_temporary_file.clean()
        self.assertFalse(os.path.exists(first_added_physical_file_path))
Esempio n. 12
0
    def test_singlemode_keeps_only_last_file_do_not_delete_last(self):
        collection = TemporaryFileCollection.objects.create(
            user=create_user('testuser'), singlemode=True)

        last_added_temporary_file = TemporaryFile(filename='test2.txt',
                                                  collection=collection)
        last_added_temporary_file.file.save('test1.txt',
                                            ContentFile('Testdata'),
                                            save=False)
        last_added_temporary_file.clean()
        last_added_temporary_file.save()
        last_added_temporary_file.clean()
        self.assertEqual(collection.files.count(), 1)
        self.assertEqual(collection.files.first(), last_added_temporary_file)
Esempio n. 13
0
    def test_post_accept_invalid_existing_collection(self):
        collection = TemporaryFileCollection.objects.create(user=self.testuser)
        temporaryfile = TemporaryFile(
            collection=collection,
            filename='testfile.txt')
        temporaryfile.save()

        request = self.factory.post('/test', {
            'collectionid': collection.id,
            'file': SimpleUploadedFile('testfile1.txt', b'Test1'),
            'accept': 'application/pdf'
        })
        request.user = self.testuser
        self.assertEqual(TemporaryFileCollection.objects.count(), 1)
        self.assertEqual(collection.files.count(), 1)
        response = UploadTemporaryFilesView.as_view()(request)
        self.assertEqual(response.status_code, 400)
        responsedata = json.loads(response.content.decode('utf-8'))
        self.assertEqual(TemporaryFileCollection.objects.count(), 1)
        self.assertEqual(collection.files.count(), 1)
        self.assertEqual(responsedata['file'][0]['code'], 'unsupported_mimetype')
        self.assertEqual(responsedata['file'][0]['message'], u'testfile1.txt: Unsupported filetype.')
    def test_uploadform_post_sets_file_size(self):
        testuser = create_user('testuser')
        testimage = create_image(200, 100)
        collection = TemporaryFileCollection.objects.create(user=testuser)
        temporaryfile = TemporaryFile(collection=collection,
                                      filename='testfile.png')
        temporaryfile.file.save('testfile.png', ContentFile(testimage))

        testrole = baker.make('cradmin_legacy_testapp.TstRole')
        self.mock_http302_postrequest(
            requestuser=testuser,
            cradmin_role=testrole,
            requestkwargs={'data': {
                'filecollectionid': collection.id
            }})
        created_image = ArchiveImage.objects.first()
        self.assertEqual(len(testimage), created_image.file_size)
    def test_uploadform_post_deletes_collection(self):
        testuser = create_user('testuser')
        testimage = create_image(200, 100)
        collection = TemporaryFileCollection.objects.create(user=testuser)
        temporaryfile = TemporaryFile(collection=collection,
                                      filename='testfile.png')
        temporaryfile.file.save('testfile.png', ContentFile(testimage))

        testrole = baker.make('cradmin_legacy_testapp.TstRole')
        self.mock_http302_postrequest(
            requestuser=testuser,
            cradmin_role=testrole,
            requestkwargs={'data': {
                'filecollectionid': collection.id
            }})
        self.assertFalse(
            TemporaryFileCollection.objects.filter(id=collection.id).exists())
 def save_uploaded_file(self, collection, formfile, filename_set):
     filename = formfile.name
     if collection.unique_filenames:
         filename = make_unique_filename(
             filename_set=filename_set,
             wanted_filename=filename,
             max_filename_length=collection.max_filename_length)
         filename_set.add(filename)
     temporaryfile = TemporaryFile(collection=collection, filename=filename)
     temporaryfile.file.save(formfile.name, formfile, save=False)
     temporaryfile.full_clean()
     temporaryfile.save()
     return temporaryfile
Esempio n. 17
0
    def test_delete_single_file(self):
        collection = TemporaryFileCollection.objects.create(user=self.testuser)
        temporaryfile = TemporaryFile(
            collection=collection,
            filename='testfile.txt')
        temporaryfile.file.save('testfile.txt', ContentFile('testcontent'))

        request = self.factory.delete('/test', json.dumps({
            'collectionid': collection.id,
            'temporaryfileid': temporaryfile.id
        }))
        request.user = self.testuser
        response = UploadTemporaryFilesView.as_view()(request)
        self.assertEqual(response.status_code, 200)
        responsedata = json.loads(response.content.decode('utf-8'))

        self.assertEqual(responsedata['collectionid'], collection.id)
        self.assertEqual(responsedata['temporaryfileid'], temporaryfile.id)

        self.assertTrue(TemporaryFileCollection.objects.filter(id=collection.id).exists())
        self.assertFalse(TemporaryFile.objects.filter(id=temporaryfile.id).exists())
Esempio n. 18
0
 def clean_sets_mimetype(self):
     temporaryfile = TemporaryFile(filename='test.png')
     temporaryfile.clean()
     self.assertEqual(temporaryfile.mimetype, 'image/png')
Esempio n. 19
0
 def test_set_mimetype_from_filename(self):
     temporaryfile = TemporaryFile(filename='test.png')
     temporaryfile.set_mimetype_from_filename()
     self.assertEqual(temporaryfile.mimetype, 'image/png')
Esempio n. 20
0
 def test_set_mimetype_from_filename_no_extension(self):
     temporaryfile = TemporaryFile(filename='test')
     temporaryfile.set_mimetype_from_filename()
     self.assertEqual(temporaryfile.mimetype, '')
Esempio n. 21
0
 def test_set_mimetype_from_filename_unknown_extension(self):
     temporaryfile = TemporaryFile(filename='test.thisdoesnotexist')
     temporaryfile.set_mimetype_from_filename()
     self.assertEqual(temporaryfile.mimetype, '')
Esempio n. 22
0
 def clean_truncates_filename(self):
     collection = TemporaryFileCollection(max_filename_length=6)
     temporaryfile = TemporaryFile(filename='test.png',
                                   collection=collection)
     temporaryfile.clean()
     self.assertEqual(temporaryfile.filename, 'st.png')
Esempio n. 23
0
 def clean_does_not_truncate_filename_if_max_filename_length_is_none(self):
     collection = TemporaryFileCollection(max_filename_length=None)
     temporaryfile = TemporaryFile(filename='test.png',
                                   collection=collection)
     temporaryfile.clean()
     self.assertEqual(temporaryfile.filename, 'test.png')