Как сделать модульные тесты на LoginView и LogoutView в Django?
Я пытаюсь написать правильные тесты для моих представлений, которые являются просто подклассами LoginView и LogoutView из django.contrib.auth.views.
from django.contrib.auth.views import LoginView, LogoutView
class UserLoginView(LoginView):
template_name = 'finder/login.html'
next_page = reverse_lazy('book-list')
class UserLogoutView(LogoutView):
template_name = 'finder/logout.html'
next_page = reverse_lazy('book-list')
urls.py:
path('login/', views.UserLoginView.as_view(), name='login'),
path('logout/', views.UserLogoutView.as_view(), name='logout'),
path('book/list/', views.BookListView.as_view(), name='book-list'),
Что мне следует учитывать и как правильно писать тестовые случаи в моем test.views.py? На данный момент у меня есть что-то вроде этого:
class UserLoginViewTest(TestCase):
def setUp(self) -> None:
self.factory = RequestFactory()
self.user = User.objects.create_user(username='dummy', password='123secret')
def test_positive_login_view(self):
# request = self.factory.post(path='/login/', data={'username': 'dummy', 'password': '123secret'})
# request.user = self.user
# response = views.UserLoginView.as_view()(request)
response = self.client.post(path='/login/', data={'username': 'dummy', 'password': '123secret'})
self.assertRedirects(response, '/book/list/')
def test_negative_login_view(self):
response = self.client.post(path='/login/', data={'username': 'any', 'password': 'any'})
self.assertEqual(response.status_code, 200)
Но, честно говоря, эти тесты подходят только для ответов, которые я получил обратно, так что, например, я не знаю, почему мой status_code в ответе с неправильными учетными данными равен 200, а не что-то другое, например 4xx. И что я должен тестировать в таких auth представлениях? Что мой пользователь получает аутентифицированный статус? Но как?
И второй вопрос: как использовать requestfactory в этом случае? Я пробовал с кодом, который закомментирован, но получил status_code=403 при передаче правильных учетных данных...