Skip to content

Commit b250e67

Browse files
committed
tests: add tests for the conditional disable generators
1 parent 58ec996 commit b250e67

File tree

1 file changed

+66
-0
lines changed

1 file changed

+66
-0
lines changed

tests/test_generators.py

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
AnyUserIfPublic,
2020
AuthenticatedUser,
2121
Disable,
22+
DisableIf,
23+
DisableIfReadOnly,
2224
Generator,
2325
RecordOwners,
2426
SystemProcess,
@@ -176,3 +178,67 @@ def test_allowedbyaccesslevels_query_filter(mocker):
176178
)
177179

178180
assert query_filter == []
181+
182+
183+
def test_disable_if_scalar_value(app):
184+
generator = DisableIf(False)
185+
assert generator.needs() == []
186+
assert generator.excludes() == []
187+
assert generator.query_filter() == []
188+
189+
generator = DisableIf(True)
190+
assert generator.needs() == []
191+
assert generator.excludes() == [any_user]
192+
assert generator.query_filter().to_dict() == {"match_none": {}}
193+
194+
195+
def test_disable_if_function(app):
196+
def _if_two_kwargs(**kwargs):
197+
return len(kwargs) == 2
198+
199+
# The generator should only disable if 2 keyword arguments are supplied
200+
generator = DisableIf(_if_two_kwargs)
201+
assert generator.excludes(record=None) == []
202+
assert generator.query_filter(record=None) == []
203+
204+
assert generator.excludes(record=None, second_arg=None) == [any_user]
205+
assert generator.query_filter(record=None, second_arg=None).to_dict() == {
206+
"match_none": {}
207+
}
208+
209+
assert generator.excludes(record=None, second_arg=None, third_arg=None) == []
210+
assert generator.query_filter(record=None, second_arg=None, third_arg=None) == []
211+
212+
213+
def test_disable_if_read_only(app):
214+
generator = DisableIfReadOnly()
215+
216+
# Normal operation
217+
app.config["RECORDS_PERMISSIONS_READ_ONLY"] = False
218+
assert generator.excludes(record=None) == []
219+
assert generator.query_filter(record=None) == []
220+
221+
# System is in read-only mode
222+
app.config["RECORDS_PERMISSIONS_READ_ONLY"] = True
223+
assert generator.excludes(record=None) == [any_user]
224+
assert generator.query_filter(record=None).to_dict() == {"match_none": {}}
225+
226+
227+
def test_disable_if_read_only_function(app):
228+
def _some_function(record, **kwargs):
229+
return record is None and not kwargs.get("exception", False)
230+
231+
app.config["RECORDS_PERMISSIONS_READ_ONLY"] = _some_function
232+
generator = DisableIfReadOnly()
233+
234+
# Don't deny on non-None records
235+
assert generator.excludes(record={}) == []
236+
assert generator.query_filter(record={}) == []
237+
238+
# Deny if the record is None
239+
assert generator.excludes(record=None) == [any_user]
240+
assert generator.query_filter(record=None).to_dict() == {"match_none": {}}
241+
242+
# Make an exception if requested
243+
assert generator.excludes(record=None, exception=True) == []
244+
assert generator.query_filter(record=None, exception=True) == []

0 commit comments

Comments
 (0)