Commit 07b036f3 by cahrens

Return the filename as returned from default storage's save.

It might be different from the requested filename.
parent e4729378
...@@ -70,7 +70,8 @@ def store_uploaded_file( ...@@ -70,7 +70,8 @@ def store_uploaded_file(
stored_file_name = base_storage_filename + file_extension stored_file_name = base_storage_filename + file_extension
file_storage = DefaultStorage() file_storage = DefaultStorage()
file_storage.save(stored_file_name, uploaded_file) # If a file already exists with the supplied name, file_storage will make the filename unique.
stored_file_name = file_storage.save(stored_file_name, uploaded_file)
if validator: if validator:
try: try:
......
...@@ -151,7 +151,7 @@ class StoreUploadedFileTestCase(TestCase): ...@@ -151,7 +151,7 @@ class StoreUploadedFileTestCase(TestCase):
def success_validator(storage, filename): def success_validator(storage, filename):
""" Validation test function that is a no-op """ """ Validation test function that is a no-op """
self.assertEqual("success_file.csv", os.path.basename(filename)) self.assertTrue("success_file" in os.path.basename(filename))
store_file_data(storage, filename) store_file_data(storage, filename)
with self.assertRaises(FileValidationException) as error: with self.assertRaises(FileValidationException) as error:
...@@ -173,26 +173,46 @@ class StoreUploadedFileTestCase(TestCase): ...@@ -173,26 +173,46 @@ class StoreUploadedFileTestCase(TestCase):
""" """
Tests uploading a file with lower case extension. Verifies that the stored file contents are correct. Tests uploading a file with lower case extension. Verifies that the stored file contents are correct.
""" """
self.file_storage, self.stored_file_name = store_uploaded_file( file_storage, stored_file_name = store_uploaded_file(
self.request, "uploaded_file", [".csv"], "stored_file", self.default_max_size self.request, "uploaded_file", [".csv"], "stored_file", self.default_max_size
) )
self._verify_successful_upload() self._verify_successful_upload(file_storage, stored_file_name, self.file_content)
def test_file_upload_upper_case_extension(self): def test_file_upload_upper_case_extension(self):
""" """
Tests uploading a file with upper case extension. Verifies that the stored file contents are correct. Tests uploading a file with upper case extension. Verifies that the stored file contents are correct.
""" """
self.request.FILES = {"uploaded_file": SimpleUploadedFile("tempfile.CSV", self.file_content)} file_content = "uppercase"
self.file_storage, self.stored_file_name = store_uploaded_file( self.request.FILES = {"uploaded_file": SimpleUploadedFile("tempfile.CSV", file_content)}
file_storage, stored_file_name = store_uploaded_file(
self.request, "uploaded_file", [".gif", ".csv"], "second_stored_file", self.default_max_size self.request, "uploaded_file", [".gif", ".csv"], "second_stored_file", self.default_max_size
) )
self._verify_successful_upload() self._verify_successful_upload(file_storage, stored_file_name, file_content)
def _verify_successful_upload(self): def test_unique_filenames(self):
"""
Test that the file storage method will create a unique filename if the file already exists.
"""
requested_file_name = "nonunique_store"
file_content = "copy"
self.request.FILES = {"nonunique_file": SimpleUploadedFile("nonunique.txt", file_content)}
_, first_stored_file_name = store_uploaded_file(
self.request, "nonunique_file", [".txt"], requested_file_name, self.default_max_size
)
file_storage, second_stored_file_name = store_uploaded_file(
self.request, "nonunique_file", [".txt"], requested_file_name, self.default_max_size
)
self.assertNotEqual(first_stored_file_name, second_stored_file_name)
self.assertTrue(requested_file_name in second_stored_file_name)
self._verify_successful_upload(file_storage, second_stored_file_name, file_content)
def _verify_successful_upload(self, storage, file_name, expected_content):
""" Helper method that checks that the stored version of the uploaded file has the correct content """ """ Helper method that checks that the stored version of the uploaded file has the correct content """
self.assertTrue(self.file_storage.exists(self.stored_file_name)) self.assertTrue(storage.exists(file_name))
with self.file_storage.open(self.stored_file_name, 'r') as f: with storage.open(file_name, 'r') as f:
self.assertEqual(self.file_content, f.read()) self.assertEqual(expected_content, f.read())
@ddt.ddt @ddt.ddt
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment