Я пишу подробные функциональные тесты для моих представлений в дополнение к модульным тестам на моих моделях. Это проект Django, и я использую встроенную тестовую среду Django с unittest. Очевидно, что одна из важных вещей, которую необходимо проверить в этих функциональных тестах, заключается в том, что разрешения настроены правильно. Имея это в виду, я пытаюсь что-то вроде этого:
anonclient = Client()
userclient = Client()
userclient.login(username='test_user', password='test')
adminclient = Client()
adminclient.login(username='test_admin', password='test')
path = "/path/to/my/page"
anonresponse = anonclient.get(path)
userresponse = userclient.get(path)
adminresponse = adminclient.get(path)
Мне нужно иметь возможность подтвердить, что анконклиенту и пользовательскому клиенту было отказано в разрешении, в то время как админклиент работал правильно. Однако я не могу найти способ проверить, что это произошло надежно !
Сначала я решил проверить, что ответ был перенаправлением 302 (потому что побочный эффект от неудачной проверки разрешений перенаправляется), но это означает, что невозможно определить разницу между функциональностью, которая автоматически перенаправляет пользователя и неудачным проверка разрешений. (Я не могу просто использовать self.assertRedirects (response, url), потому что целевой URL может быть переопределен через параметр login_url декоратораree_required в представлении!)
Возможно, мне следует изучить расширение декоратора user_passes_test, чтобы оно добавляло свойство к объекту ответа в случае сбоя теста? Это может быть проверено в тестах. В противном случае мне нужно будет определить, был ли запрос успешным, проверив, имели ли место побочные эффекты запроса. Делать это таким образом будет работать, но это будет чрезвычайно затянуто, особенно с учетом того, что многие проверки выполняются.
Не могу себе представить, что я первый, кто столкнулся с этой проблемой, как правильно решить эту проблему или что я пропустил?
Большое спасибо!