Как выполнить модульное тестирование, чтобы функция была оформлена? - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть вид, который оформлен так:

@check_has_permission('is_manager')
def view():
   pass

и декоратор выглядит примерно так:

def check_has_permission(group=None):
    def can_user_access(user):
        if user.is_authenticated():
            if group == 'is_staff':
                return user.is_staff()
            elif group == 'is_admin':
                return (
                    user.is_admin() or
                    user.is_staff()
                )
            elif group == 'is_manager':
                return (
                    user.is_manager() or
                    user.is_admin() or
                    user.is_staff()
                )
        return False
    return user_passes_test(can_user_access, login_url=login_url)

Как мне написать модульный тест, чтобы убедиться, что представление украшено check_has_permission с группой 'is_manager'?

Я надеюсь, что смогу написать набор тестов для самого декоратора, тогда мне нужно только подтвердить, что я вызываю правильную группу для каждого представления, которое он украшает.

1 Ответ

0 голосов
/ 13 ноября 2018

Вам нужно добавить шов , где вы можете проверить.

Если ваш декоратор выглядит так:

def is_user_in_group(group):
    if user.is_authenticated():
        # ... snip - checks on groups and user ...

    return False


def check_has_permission(group=None):
    def can_user_access(user):
        return is_user_in_group(user, group)
    return user_passes_test(can_user_access, login_url=login_url)

Тогда ваш тест может макетировать оба is_user_in_group и user_passes_test, вызовите декорированную функцию, проверьте, что is_user_in_group вызывается с правильной группой, и проверьте, что user_passes_test вызывается с возвращаемым значением из вашего макета is_user_in_group.

...