У меня есть функция, которая проверяет разрешения, в этой функции есть вызов БД для получения списка значений, которые я сопоставлю с параметрами моей функции, с этим я могу проверить, находятся ли параметры внутри вызов БД, и если они у пользователя есть права доступа, и функция вернет True:
def check_if_user_has_permissions(user= None, resource = None, action = None):
tmp = {}
tmp["user"] = user
tmp["resource"] = resource
tmp["action"] = action
data = []
has_permission = db.session.query(RoleMember.user_uid, Permission.resource, Permission.action). \
filter_by(user_uid=user). \
join(Permission, Permission.role == RoleMember.role).all()
if resource and action is not None:
if has_permission == "":
return False
else:
for info in has_permission:
for item in info:
data.append(item)
has_all_actions = "*"
has_all_resources = "machines/*"
if tmp["user"] in data and has_all_resources in data and has_all_actions in data:
return True
else:
if tmp["user"] in data and tmp["resource"] in data and tmp["action"] in data:
return True
else:
return False
else:
return False
Теперь я проверяю эту функцию с помощью magi c -mock, она должна вернуть true, если параметры находятся внутри список вызовов БД.
Я сделал такой тест, но он провалился:
@patch("dev_maintenance.roles.db")
def test_check_if_user_has_permissions(db):
db.return_value.session.return_value.query.return_value.filter_by.\
return_value.join.return_value.all.return_value = [
"bender", "machines/1", "delete"]
assert check_if_user_has_permissions("bender","machines/1", "delete" ) == True
По логам c с этим издевательством я высмеиваю вызов БД функции для верните мне значения, из-за которых функция возвращает true или я ошибаюсь?
Вызов функции check_if_user_has_permissions("bender","machines/1", "delete")
возвращает false