Я нашел более простое решение этой проблемы через некоторое время.
Я сделал mark.parametrize
так:
data =
[
["bender", "machine_4", "action1", False],
["leela", "machine_2", "action1", False],
["leela", "file/2", "action4", True],
["leela", "file/2", "action2", False],
["leela", "application/1", "action1", True],
["leela", "application/2", "action1", False],
["fry", "application/1", "action1", True],
["zoidberg", "application/1", "action1", False],
]
@pytest.mark.parametrize("user,resource,action, expected", data)
@patch("dev_maintenance.roles.db")
def test_check_if_user_has_permissions(db,user,resource,action,expected):
db.session.query.return_value.filter_by.return_value.join.return_value.all.return_value = \
[
("bender", "machine_1", "action1"),
("bender", "machine_2", "action1"),
("bender", "machine_3", "action1"),
("bender", "machine_3", "action2"),
("leela", "file/*", "action4"),
("leela", "application/1", "*"),
("fry", "*", "*"),
]
assert check_if_user_has_permissions(user, resource, action) == expected
То, что я здесь делал, проходило user
, resource
и action
параметров функции и утверждают, что отклик функции с этими параметрами равен параметру expected
. Так что он будет работать как True == True, в зависимости от параметров.