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)
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, '')
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
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()
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))
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, '')
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
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))
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)
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
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())
def clean_sets_mimetype(self): temporaryfile = TemporaryFile(filename='test.png') temporaryfile.clean() self.assertEqual(temporaryfile.mimetype, 'image/png')
def test_set_mimetype_from_filename(self): temporaryfile = TemporaryFile(filename='test.png') temporaryfile.set_mimetype_from_filename() self.assertEqual(temporaryfile.mimetype, 'image/png')
def test_set_mimetype_from_filename_no_extension(self): temporaryfile = TemporaryFile(filename='test') temporaryfile.set_mimetype_from_filename() self.assertEqual(temporaryfile.mimetype, '')
def test_set_mimetype_from_filename_unknown_extension(self): temporaryfile = TemporaryFile(filename='test.thisdoesnotexist') temporaryfile.set_mimetype_from_filename() self.assertEqual(temporaryfile.mimetype, '')
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')
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')