Skip to content

Commit 3f9cc1a

Browse files
committed
tests: add tests for the conditional disable generators
1 parent 796d414 commit 3f9cc1a

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
@@ -22,6 +22,8 @@
2222
AuthenticatedUser,
2323
ConditionalGenerator,
2424
Disable,
25+
DisableIf,
26+
DisableIfReadOnly,
2527
Generator,
2628
IfConfig,
2729
RecordOwners,
@@ -266,3 +268,67 @@ def test_ifconfig(app, create_record):
266268
UserNeed(2),
267269
UserNeed(3),
268270
}
271+
272+
273+
def test_disable_if_scalar_value(app):
274+
generator = DisableIf(False)
275+
assert generator.needs() == []
276+
assert generator.excludes() == []
277+
assert generator.query_filter() == []
278+
279+
generator = DisableIf(True)
280+
assert generator.needs() == []
281+
assert generator.excludes() == [any_user]
282+
assert generator.query_filter().to_dict() == {"match_none": {}}
283+
284+
285+
def test_disable_if_function(app):
286+
def _if_two_kwargs(**kwargs):
287+
return len(kwargs) == 2
288+
289+
# The generator should only disable if 2 keyword arguments are supplied
290+
generator = DisableIf(_if_two_kwargs)
291+
assert generator.excludes(record=None) == []
292+
assert generator.query_filter(record=None) == []
293+
294+
assert generator.excludes(record=None, second_arg=None) == [any_user]
295+
assert generator.query_filter(record=None, second_arg=None).to_dict() == {
296+
"match_none": {}
297+
}
298+
299+
assert generator.excludes(record=None, second_arg=None, third_arg=None) == []
300+
assert generator.query_filter(record=None, second_arg=None, third_arg=None) == []
301+
302+
303+
def test_disable_if_read_only(app):
304+
generator = DisableIfReadOnly()
305+
306+
# Normal operation
307+
app.config["RECORDS_PERMISSIONS_READ_ONLY"] = False
308+
assert generator.excludes(record=None) == []
309+
assert generator.query_filter(record=None) == []
310+
311+
# System is in read-only mode
312+
app.config["RECORDS_PERMISSIONS_READ_ONLY"] = True
313+
assert generator.excludes(record=None) == [any_user]
314+
assert generator.query_filter(record=None).to_dict() == {"match_none": {}}
315+
316+
317+
def test_disable_if_read_only_function(app):
318+
def _some_function(record, **kwargs):
319+
return record is None and not kwargs.get("exception", False)
320+
321+
app.config["RECORDS_PERMISSIONS_READ_ONLY"] = _some_function
322+
generator = DisableIfReadOnly()
323+
324+
# Don't deny on non-None records
325+
assert generator.excludes(record={}) == []
326+
assert generator.query_filter(record={}) == []
327+
328+
# Deny if the record is None
329+
assert generator.excludes(record=None) == [any_user]
330+
assert generator.query_filter(record=None).to_dict() == {"match_none": {}}
331+
332+
# Make an exception if requested
333+
assert generator.excludes(record=None, exception=True) == []
334+
assert generator.query_filter(record=None, exception=True) == []

0 commit comments

Comments
 (0)