Coverage for accounts/tests/test_views.py: 97.87%
47 statements
« prev ^ index » next coverage.py v7.16.2, created at 2026-10-19 21:53 -0700
« prev ^ index » next coverage.py v7.16.2, created at 2026-10-19 21:53 -0700
1import pytest 1a
2from django.contrib.messages.middleware import MessageMiddleware # noqa:F401 1a
3from django.contrib.sessions.middleware import SessionMiddleware # noqa:F401 1a
4from django.http import HttpRequest 1a
5from django.test import RequestFactory 1a
6from django.urls import reverse # noqa:F401 1a
8from ..forms import CustomUserChangeForm 1a
9from ..models import CustomUser 1a
10from ..views import UserRedirectView, UserUpdateView 1a
12pytestmark = pytest.mark.django_db 1a
15class TestUserUpdateView: 1a
16 """TODO:
18 extracting view initialization code as class-scoped fixture
19 would be great if only pytest-django supported non-function-scoped
20 fixture db access -- this is a work-in-progress for now:
21 https://github.com/pytest-dev/pytest-django/pull/258
22 """
24 def dummy_get_response(self, request: HttpRequest): 1a
25 return None
27 def test_get_success_url(self, user: CustomUser, request_factory: RequestFactory): 1a
28 view = UserUpdateView() 1a
29 request = request_factory.get("/fake-url/") 1a
30 request.user = user 1a
32 view.request = request 1a
34 assert view.get_success_url() == f"/accounts/{user.username}/" 1a
36 def test_get_object(self, user: CustomUser, request_factory: RequestFactory): 1a
37 view = UserUpdateView() 1a
38 request = request_factory.get("/fake-url/") 1a
39 request.user = user 1a
41 view.request = request 1a
43 assert view.get_object() == user 1a
45 def test_form_valid(self, user: CustomUser, request_factory: RequestFactory): 1a
46 view = UserUpdateView() 1a
47 form_data = {"name": "John Doe"} 1a
48 request = request_factory.post(reverse("user_update"), form_data) 1a
50 # Add the session/message middleware to the request
51 SessionMiddleware(self.dummy_get_response).process_request(request) 1a
52 MessageMiddleware(self.dummy_get_response).process_request(request) 1a
53 request.user = user 1a
55 view.request = request 1a
57 # Initialize the form
58 form = CustomUserChangeForm() 1a
59 form.cleaned_data = {} 1a
60 view.form_valid(form) 1a
62 response = UserUpdateView.as_view()(request) 1a
63 user.refresh_from_db() 1a
65 assert response.status_code == 302 1a
66 assert user.name == form_data["name"] 1a
69class TestUserRedirectView: 1a
70 def test_get_redirect_url(self, user: CustomUser, request_factory: RequestFactory): 1a
71 view = UserRedirectView() 1a
72 request = request_factory.get("/fake-url") 1a
73 request.user = user 1a
75 view.request = request 1a
77 assert view.get_redirect_url() == f"/accounts/{user.username}/" 1a