File tree Expand file tree Collapse file tree 2 files changed +57
-0
lines changed Expand file tree Collapse file tree 2 files changed +57
-0
lines changed Original file line number Diff line number Diff line change 8
8
from django .core .files .storage import FileSystemStorage , default_storage
9
9
from django .utils ._os import safe_join
10
10
11
+ from s3file .storages_optimized import S3OptimizedUploadStorage
12
+
11
13
12
14
class S3MockStorage (FileSystemStorage ):
13
15
@property
@@ -52,6 +54,24 @@ class bucket:
52
54
name = "test-bucket"
53
55
54
56
57
+ class S3OptimizedMockStorage (S3OptimizedUploadStorage ):
58
+ created_objects = {}
59
+
60
+ class bucket :
61
+ name = "test-bucket"
62
+
63
+ class Object :
64
+ def __init__ (self , key ):
65
+ self .key = key
66
+ self .copy_from_bucket = None
67
+ self .copy_from_key = None
68
+ S3OptimizedMockStorage .created_objects [self .key ] = self
69
+
70
+ def copy (self , s3_object , ExtraArgs ):
71
+ self .copy_from_bucket = s3_object ["Bucket" ]
72
+ self .copy_from_key = s3_object ["Key" ]
73
+
74
+
55
75
local_dev = isinstance (default_storage , FileSystemStorage )
56
76
57
77
storage = default_storage if not local_dev else S3MockStorage ()
Original file line number Diff line number Diff line change
1
+ import pytest
2
+
3
+ from django .core .files .base import ContentFile
4
+
5
+ from s3file import storages
6
+
7
+
8
+ class TestStorages :
9
+ url = "/__s3_mock__/"
10
+
11
+ def test_post__save_optimized (self ):
12
+ storage = storages .S3OptimizedMockStorage ()
13
+ obj = storage .bucket .Object ("tmp/s3file/s3_file.txt" )
14
+
15
+ class Content :
16
+ def __init__ (self , obj ):
17
+ self .obj = obj
18
+
19
+ content = Content (obj )
20
+ key = storage ._save ("tmp/s3file/s3_file_copied.txt" , content )
21
+ stored_object = storage .created_objects [
22
+ "custom/location/tmp/s3file/s3_file_copied.txt"
23
+ ]
24
+
25
+ assert key == "tmp/s3file/s3_file_copied.txt"
26
+ assert stored_object .copy_from_bucket == storage .bucket .name
27
+ assert stored_object .copy_from_key == "tmp/s3file/s3_file.txt"
28
+
29
+ def test_post__save_optimized_fail (self ):
30
+ storage = storages .S3OptimizedMockStorage ()
31
+
32
+ with pytest .raises (RuntimeError ) as excinfo :
33
+ storage ._save ("tmp/s3file/s3_file_copied.txt" , ContentFile (b"s3file" ))
34
+
35
+ assert "The content object must be a S3 object and contain a valid key." in str (
36
+ excinfo .value
37
+ )
You can’t perform that action at this time.
0 commit comments