diff options
author | Jon Prindiville <jprindiville@gadventures.com> | 2017-04-26 11:43:56 -0400 |
---|---|---|
committer | Tim Graham <timograham@gmail.com> | 2018-06-29 15:51:59 -0400 |
commit | b4cba4ed625ce7c88675616b3bbb237c28a926d1 (patch) | |
tree | 3c06ee211e4794e54a19e02581f3e9a2debe91d5 /tests/file_storage | |
parent | a5f139236f930df06ae0642507530ca98081e2a9 (diff) | |
download | django-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.py | 39 |
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: |