Как я могу издеваться над вызовом функции flask SqlAlchemy - PullRequest
0 голосов
/ 20 февраля 2020

У меня есть функция, которая проверяет разрешения, в этой функции есть вызов БД для получения списка значений, которые я сопоставлю с параметрами моей функции, с этим я могу проверить, находятся ли параметры внутри вызов БД, и если они у пользователя есть права доступа, и функция вернет 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

...