Coverage for accounts/tests/test_views.py: 98.44%
64 statements
« prev ^ index » next coverage.py v7.17.0, created at 2026-10-23 15:55 -0700
« prev ^ index » next coverage.py v7.17.0, created at 2026-10-23 15:55 -0700
1"""Test Views for bookstore user accounts."""
3import pytest 1a
4from django.contrib.auth import get_user_model 1a
5from django.contrib.messages.middleware import MessageMiddleware 1a
6from django.contrib.sessions.middleware import SessionMiddleware 1a
7from django.http import HttpRequest 1a
8from django.test import RequestFactory, TestCase 1a
9from django.urls import reverse 1a
11from ..forms import CustomUserChangeForm 1a
12from ..models import CustomUser 1a
13from ..views import UserRedirectView, UserUpdateView 1a
15pytestmark = pytest.mark.django_db 1a
18class TestUserSignup(TestCase): 1a
19 username = "newuser" 1a
20 email = "newuser@example.com" 1a
22 def setUp(self): 1a
23 url = reverse("account_signup") 1a
24 self.response = self.client.get(url) 1a
26 def test_signup_template(self): 1a
27 self.assertEqual(self.response.status_code, 200) 1a
28 self.assertTemplateUsed(self.response, "account/signup.html") 1a
29 self.assertContains(self.response, "Sign Up") 1a
30 self.assertNotContains(self.response, "This does not belong here.") 1a
32 def test_signup_form(self): 1a
33 new_user = get_user_model().objects.create_user( # noqa: F841 1a
34 self.username, self.email
35 )
36 self.assertEqual(get_user_model().objects.all().count(), 1) 1a
37 self.assertEqual(get_user_model().objects.all()[0].username, self.username) 1a
38 self.assertEqual(get_user_model().objects.all()[0].email, self.email) 1a
41class TestUserUpdateView: 1a
42 """TODO:
44 extracting view initialization code as class-scoped fixture
45 would be great if only pytest-django supported non-function-scoped
46 fixture db access -- this is a work-in-progress for now:
47 https://github.com/pytest-dev/pytest-django/pull/258
48 """
50 def dummy_get_response(self, request: HttpRequest): 1a
51 return None
53 def test_get_success_url(self, user: CustomUser, request_factory: RequestFactory): 1a
54 view = UserUpdateView() 1a
55 request = request_factory.get("/fake-url/") 1a
56 request.user = user 1a
58 view.request = request 1a
60 assert view.get_success_url() == f"/accounts/{user.username}/" 1a
62 def test_get_object(self, user: CustomUser, request_factory: RequestFactory): 1a
63 view = UserUpdateView() 1a
64 request = request_factory.get("/fake-url/") 1a
65 request.user = user 1a
67 view.request = request 1a
69 assert view.get_object() == user 1a
71 def test_form_valid(self, user: CustomUser, request_factory: RequestFactory): 1a
72 view = UserUpdateView() 1a
73 form_data = {"name": "John Doe"} 1a
74 request = request_factory.post(reverse("user_update"), form_data) 1a
76 # Add the session/message middleware to the request
77 SessionMiddleware(self.dummy_get_response).process_request(request) 1a
78 MessageMiddleware(self.dummy_get_response).process_request(request) 1a
79 request.user = user 1a
81 view.request = request 1a
83 # Initialize the form
84 form = CustomUserChangeForm() 1a
85 form.cleaned_data = {} 1a
86 view.form_valid(form) 1a
88 response = UserUpdateView.as_view()(request) 1a
89 user.refresh_from_db() 1a
91 assert response.status_code == 302 1a
92 assert user.name == form_data["name"] 1a
95class TestUserRedirectView: 1a
96 def test_get_redirect_url(self, user: CustomUser, request_factory: RequestFactory): 1a
97 view = UserRedirectView() 1a
98 request = request_factory.get("/fake-url") 1a
99 request.user = user 1a
101 view.request = request 1a
103 assert view.get_redirect_url() == f"/accounts/{user.username}/" 1a