Проверка защищенной страницы входа в систему с разрешениями в django (pytest) - PullRequest
0 голосов
/ 10 марта 2020

Я пытаюсь проверить представление, которое пока показывает только шаблон. Для доступа к представлению пользователю необходимо разрешение 'projects.can_view'.

Я пытаюсь создать пользователя с этим разрешением в тестовой БД, используя прибор, затем я пытаюсь войти в систему с именем пользователя и паролем моего пользователя в БД. Я пытаюсь открыть представление, но получаю сообщение об ошибке 302 (перенаправить в представление входа в систему). Я могу проверить, правильно ли я передал разрешения:

Мой прибор:

@pytest.fixture()
def create_users_with_permissions():
    User = get_user_model()
    u = User.objects.create(
        username="test",
        password="pass",
    )

    permission = Permission.objects.get(name='Can view project')
    u.user_permissions.add(permission)
    u = User.objects.get(username='test')
    print(u.has_perm('appname.view_project'))
    return u

Я запрашиваю пользователь снова должен удалить кеш разрешений, как описано в do c (https://docs.djangoproject.com/en/3.0/topics/auth/default/). Когда я распечатываю print(u.has_perm('appname.view_project')), возвращается True. Таким образом, я предполагаю, что у меня есть пользователь с указанным разрешением c.

Теперь я передаю приспособление в свой тест и записываю клиентское приспособление pytests в:

    def test_xyz(
        self, client, create_users_with_permissions
    ):

        client.login(
            username=create_users_with_permissions.username,
            password=create_users_with_permissions.password
        )
        url = reverse('urlforview')
        response = client.get(url)
        assert response.status_code == 200

Это происходит с ошибкой с кодом: assert 302 == 200

Если я создаю суперпользователь в БД и войти в систему с соответствующим пользователем, он работает. Когда я жестко кодирую имя пользователя и пароль, он также не работает. Чего мне здесь не хватает?

Спасибо за любую помощь или предложение, очень признателен!

Мой взгляд имеет только это:

class ProjectCustomerList(PermissionRequiredMixin, TemplateView):
    template_name = 'mytemplate.html'
    permission_required = 'projects.can_view'
...