1
- # pylint: disable=unused-variable
1
+ # pylint: disable=unused-variable,unused-argument
2
2
3
3
import os
4
4
import shutil
@@ -25,35 +25,49 @@ class MyClass:
25
25
nested : Optional [Nested ] = None
26
26
27
27
28
+ @dataclass
29
+ class MyClassDefaults :
30
+ foo : int
31
+ bar : int = 2
32
+
33
+
28
34
def describe_manager ():
29
35
@pytest .fixture
30
- def manager ():
31
- shutil .rmtree (Path (__file__ ).parent / "files" , ignore_errors = True )
36
+ def files ():
37
+ return Path (__file__ ).parent / "files"
38
+
39
+ @pytest .fixture
40
+ def manager (files : Path ):
41
+ shutil .rmtree (files , ignore_errors = True )
32
42
model = create_model (MyClass , pattern = "files/{self.foo}.yml" )
33
43
return Manager (model )
34
44
35
45
@pytest .fixture
36
- def manager_home ():
46
+ def manager_at_home ():
37
47
model = create_model (Nested , pattern = "~/.{self.name}.json" )
38
48
return Manager (model )
39
49
40
- @pytest .fixture ()
41
- def manager_with_files ():
42
- files_dir = Path (__file__ ).parent / "files"
43
- shutil .rmtree (files_dir , ignore_errors = True )
44
- files_dir .mkdir (exist_ok = True )
50
+ @pytest .fixture
51
+ def manager_with_files (files : Path ):
52
+ files .mkdir (exist_ok = True )
45
53
model = create_model (MyClass , pattern = "files/{self.foo}.yml" )
46
54
model (foo = 1 , bar = 2 ).datafile .save ()
47
55
return Manager (model )
48
56
57
+ @pytest .fixture
58
+ def manager_with_defaults (files : Path ):
59
+ shutil .rmtree (files , ignore_errors = True )
60
+ model = create_model (MyClassDefaults , pattern = "files/{self.foo}/{self.bar}.yml" )
61
+ return Manager (model )
62
+
49
63
def describe_get ():
50
64
@patch ("datafiles.mapper.Mapper.load" )
51
65
@patch ("datafiles.mapper.Mapper.exists" , True )
52
66
@patch ("datafiles.mapper.Mapper.modified" , False )
53
- def when_partial_args_passed_init_args_missing (mock_load , expect , manager ):
54
- got = manager .get (1 )
55
- expect (got .foo ) == 1
56
- expect (got .bar ) is Missing
67
+ def when_absent_pattern_arg (mock_load , expect , manager ):
68
+ instance = manager .get (1 )
69
+ expect (instance .foo ) == 1
70
+ expect (instance .bar ) is Missing
57
71
expect (mock_load .called ).is_ (True )
58
72
59
73
with expect .raises (
@@ -62,35 +76,39 @@ def when_partial_args_passed_init_args_missing(mock_load, expect, manager):
62
76
):
63
77
manager .get (bar = 2 )
64
78
79
+ @patch ("datafiles.mapper.Mapper.load" )
65
80
@patch ("datafiles.mapper.Mapper.exists" , True )
66
81
@patch ("datafiles.mapper.Mapper.modified" , False )
67
- def when_partial_args_passed_init_arg_missing_file_exists (
68
- expect , manager_with_files
82
+ def when_absent_pattern_arg_has_default_value (
83
+ mock_load , expect , manager_with_defaults : Manager
69
84
):
70
- # demonstrates that `Manager.get` loads the value for bar, when it is not passed
85
+ expect (manager_with_defaults .get (0 , 1 )) == MyClassDefaults (foo = 0 , bar = 1 )
86
+ expect (manager_with_defaults .get (1 )) == MyClassDefaults (foo = 1 , bar = 2 )
87
+ expect (mock_load .called ).is_ (True )
88
+
89
+ @patch ("datafiles.mapper.Mapper.exists" , True )
90
+ @patch ("datafiles.mapper.Mapper.modified" , False )
91
+ def when_partial_args_match_file (expect , manager_with_files : Manager ):
71
92
expect (manager_with_files .get (1 )) == MyClass (foo = 1 , bar = 2 )
72
93
73
94
@patch ("datafiles.mapper.Mapper.exists" , True )
74
95
@patch ("datafiles.mapper.Mapper.modified" , False )
75
- def when_partial_kwargs_passed_init_arg_missing_file_exists (
76
- expect , manager_with_files
77
- ):
78
- # demonstrates that `Manager.get` loads the value for bar, when it is not passed
96
+ def when_partial_kwargs_match_file (expect , manager_with_files : Manager ):
79
97
expect (manager_with_files .get (foo = 1 )) == MyClass (foo = 1 , bar = 2 )
80
98
81
99
def describe_get_or_none ():
82
100
@patch ("datafiles.mapper.Mapper.load" )
83
101
@patch ("datafiles.mapper.Mapper.exists" , True )
84
102
@patch ("datafiles.mapper.Mapper.modified" , False )
85
- def when_file_exists (mock_load , expect , manager ):
103
+ def when_file_exists (mock_load , expect , manager : Manager ):
86
104
expect (manager .get_or_none (foo = 1 , bar = 2 )) == MyClass (foo = 1 , bar = 2 )
87
105
expect (mock_load .called ).is_ (True )
88
106
89
107
@patch ("datafiles.mapper.Mapper.exists" , False )
90
- def when_file_missing (expect , manager ):
108
+ def when_file_missing (expect , manager : Manager ):
91
109
expect (manager .get_or_none (foo = 3 , bar = 4 )).is_ (None )
92
110
93
- def when_file_corrupt (expect , manager ):
111
+ def when_file_corrupt (expect , manager : Manager ):
94
112
instance = manager .get_or_create (foo = 2 , bar = 1 )
95
113
instance .datafile .path .write_text ("{" )
96
114
instance2 = manager .get_or_none (foo = 2 , bar = 2 )
@@ -102,48 +120,48 @@ def describe_get_or_create():
102
120
@patch ("datafiles.mapper.Mapper.load" )
103
121
@patch ("datafiles.mapper.Mapper.exists" , True )
104
122
@patch ("datafiles.mapper.Mapper.modified" , False )
105
- def when_file_exists (mock_save , mock_load , expect , manager ):
123
+ def when_file_exists (mock_save , mock_load , expect , manager : Manager ):
106
124
expect (manager .get_or_create (foo = 1 , bar = 2 )) == MyClass (foo = 1 , bar = 2 )
107
125
expect (mock_save .called ).is_ (True )
108
126
expect (mock_load .called ).is_ (False )
109
127
110
128
@patch ("datafiles.mapper.Mapper.save" )
111
129
@patch ("datafiles.mapper.Mapper.load" )
112
130
@patch ("datafiles.mapper.Mapper.exists" , False )
113
- def when_file_missing (mock_save , mock_load , expect , manager ):
131
+ def when_file_missing (mock_save , mock_load , expect , manager : Manager ):
114
132
expect (manager .get_or_create (foo = 1 , bar = 2 )) == MyClass (foo = 1 , bar = 2 )
115
133
expect (mock_save .called ).is_ (True )
116
134
expect (mock_load .called ).is_ (True )
117
135
118
- def when_file_corrupt (expect , manager ):
136
+ def when_file_corrupt (expect , manager : Manager ):
119
137
instance = manager .get_or_create (foo = 2 , bar = 1 )
120
138
instance .datafile .path .write_text ("{" )
121
139
instance2 = manager .get_or_create (foo = 2 , bar = 2 )
122
- expect (instance2 .bar ) == 2
140
+ expect (instance2 .bar ) == 2 # type: ignore[attr-defined]
123
141
124
142
def describe_all ():
125
143
@patch ("datafiles.mapper.Mapper.exists" , False )
126
- def when_no_files_exist (expect , manager ):
144
+ def when_no_files_exist (expect , manager : Manager ):
127
145
items = list (manager .all ())
128
146
expect (items ) == []
129
147
130
- def with_home_directory (expect , manager_home ):
131
- items = list (manager_home .all ())
148
+ def with_home_directory (expect , manager_at_home : Manager ):
149
+ items = list (manager_at_home .all ())
132
150
if "CI" not in os .environ :
133
151
expect (len (items )) > 0
134
152
135
153
def describe_filter ():
136
154
@patch ("datafiles.mapper.Mapper.exists" , False )
137
- def when_no_files_exist (expect , manager ):
155
+ def when_no_files_exist (expect , manager : Manager ):
138
156
items = list (manager .filter ())
139
157
expect (items ) == []
140
158
141
159
@patch ("datafiles.mapper.Mapper.exists" , False )
142
- def with_partial_positional_arguments (expect , manager ):
160
+ def with_partial_positional_arguments (expect , manager : Manager ):
143
161
items = list (manager .filter (foo = 1 ))
144
162
expect (items ) == []
145
163
146
164
@patch ("datafiles.mapper.Mapper.exists" , False )
147
- def with_nested_key_query (expect , manager ):
165
+ def with_nested_key_query (expect , manager : Manager ):
148
166
items = list (manager .filter (nested__name = "John Doe" ))
149
167
expect (items ) == []
0 commit comments