Coverage for accounts/tests/test_views.py: 97.87%
47 statements
« prev ^ index » next coverage.py v7.9.1, created at 2025-06-13 15:39 -0700
« prev ^ index » next coverage.py v7.9.1, created at 2025-06-13 15:39 -0700
1import pytest
2from django.contrib.messages.middleware import MessageMiddleware
3from django.contrib.sessions.middleware import SessionMiddleware
4from django.http import HttpRequest
5from django.test import RequestFactory
6from django.urls import reverse
8from ..forms import CustomUserChangeForm
9from ..models import CustomUser
10from ..views import UserRedirectView, UserUpdateView
12pytestmark = pytest.mark.django_db
15class TestUserUpdateView:
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):
25 return None
27 def test_get_success_url(self, user: CustomUser, request_factory: RequestFactory):
28 view = UserUpdateView() 1c
29 request = request_factory.get("/fake-url/") 1c
30 request.user = user 1c
32 view.request = request 1c
34 assert view.get_success_url() == f"/accounts/{user.username}/" 1c
36 def test_get_object(self, user: CustomUser, request_factory: RequestFactory):
37 view = UserUpdateView() 1d
38 request = request_factory.get("/fake-url/") 1d
39 request.user = user 1d
41 view.request = request 1d
43 assert view.get_object() == user 1d
45 def test_form_valid(self, user: CustomUser, request_factory: RequestFactory):
46 view = UserUpdateView() 1b
47 form_data = {"name": "John Doe"} 1b
48 request = request_factory.post(reverse("user_update"), form_data) 1b
50 # Add the session/message middleware to the request
51 SessionMiddleware(self.dummy_get_response).process_request(request) 1b
52 MessageMiddleware(self.dummy_get_response).process_request(request) 1b
53 request.user = user 1b
55 view.request = request 1b
57 # Initialize the form
58 form = CustomUserChangeForm() 1b
59 form.cleaned_data = {} 1b
60 view.form_valid(form) 1b
62 response = UserUpdateView.as_view()(request) 1b
63 user.refresh_from_db() 1b
65 assert response.status_code == 302 1b
66 assert user.name == form_data["name"] 1b
69class TestUserRedirectView:
70 def test_get_redirect_url(self, user: CustomUser, request_factory: RequestFactory):
71 view = UserRedirectView() 1e
72 request = request_factory.get("/fake-url") 1e
73 request.user = user 1e
75 view.request = request 1e
77 assert view.get_redirect_url() == f"/accounts/{user.username}/" 1e