summaryrefslogtreecommitdiff
path: root/tests/file_storage
diff options
context:
space:
mode:
authorJon Prindiville <jprindiville@gadventures.com>2017-04-26 11:43:56 -0400
committerTim Graham <timograham@gmail.com>2018-06-29 15:51:59 -0400
commitb4cba4ed625ce7c88675616b3bbb237c28a926d1 (patch)
tree3c06ee211e4794e54a19e02581f3e9a2debe91d5 /tests/file_storage
parenta5f139236f930df06ae0642507530ca98081e2a9 (diff)
downloaddjango-b4cba4ed625ce7c88675616b3bbb237c28a926d1.tar.gz
Fixed #28144 -- Added FileSystemStorage.OS_OPEN_FLAGS to allow customization.
Diffstat (limited to 'tests/file_storage')
-rw-r--r--tests/file_storage/tests.py39
1 files changed, 39 insertions, 0 deletions
diff --git a/tests/file_storage/tests.py b/tests/file_storage/tests.py
index 33dc699ab4..3a21ca9046 100644
--- a/tests/file_storage/tests.py
+++ b/tests/file_storage/tests.py
@@ -566,6 +566,45 @@ class CustomStorageTests(FileStorageTests):
self.storage.delete(second)
+class OverwritingStorage(FileSystemStorage):
+ """
+ Overwrite existing files instead of appending a suffix to generate an
+ unused name.
+ """
+ # Mask out O_EXCL so os.open() doesn't raise OSError if the file exists.
+ OS_OPEN_FLAGS = FileSystemStorage.OS_OPEN_FLAGS & ~os.O_EXCL
+
+ def get_available_name(self, name, max_length=None):
+ """Override the effort to find an used name."""
+ return name
+
+
+class OverwritingStorageTests(FileStorageTests):
+ storage_class = OverwritingStorage
+
+ def test_save_overwrite_behavior(self):
+ """Saving to same file name twice overwrites the first file."""
+ name = 'test.file'
+ self.assertFalse(self.storage.exists(name))
+ content_1 = b'content one'
+ content_2 = b'second content'
+ f_1 = ContentFile(content_1)
+ f_2 = ContentFile(content_2)
+ stored_name_1 = self.storage.save(name, f_1)
+ try:
+ self.assertEqual(stored_name_1, name)
+ self.assertTrue(self.storage.exists(name))
+ self.assertTrue(os.path.exists(os.path.join(self.temp_dir, name)))
+ self.assertEqual(self.storage.open(name).read(), content_1)
+ stored_name_2 = self.storage.save(name, f_2)
+ self.assertEqual(stored_name_2, name)
+ self.assertTrue(self.storage.exists(name))
+ self.assertTrue(os.path.exists(os.path.join(self.temp_dir, name)))
+ self.assertEqual(self.storage.open(name).read(), content_2)
+ finally:
+ self.storage.delete(name)
+
+
class DiscardingFalseContentStorage(FileSystemStorage):
def _save(self, name, content):
if content: