Coverage for accounts/tests/test_views.py: 97.67%

43 statements  

« prev     ^ index     » next       coverage.py v7.16.2, created at 2026-10-04 19:48 -0700

1import pytest 1a

2from django.contrib.messages.middleware import MessageMiddleware 1a

3from django.contrib.sessions.middleware import SessionMiddleware 1a

4from django.http import HttpRequest 1a

5from django.test import RequestFactory 1a

6from django.urls import reverse 1a

7 

8from ..forms import CustomUserChangeForm # noqa:F401 1a

9from ..models import CustomUser 1a

10from ..views import UserRedirectView, UserUpdateView 1a

11 

12pytestmark = pytest.mark.django_db 1a

13 

14 

15class TestUserUpdateView: 1a

16 """TODO: 

17 

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 """ 

23 

24 def dummy_get_response(self, request: HttpRequest): 1a

25 return None 

26 

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

31 

32 view.request = request 1a

33 

34 assert view.get_success_url() == f"/accounts/{user.username}/" 1a

35 

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

40 

41 view.request = request 1a

42 

43 assert view.get_object() == user 1a

44 

45 def test_form_valid(self, user: CustomUser, request_factory: RequestFactory): 1a

46 # view = UserUpdateView() 

47 form_data = {"name": "John Doe"} 1a

48 request = request_factory.post(reverse("user_update"), form_data) 1a

49 

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

54 

55 """ 1a

56 view.request = request 

57 

58 # Initialize the form 

59 form = CustomUserChangeForm() 

60 form.cleaned_data = {} 

61 view.form_valid(form) 

62 """ 

63 

64 response = UserUpdateView.as_view()(request) 1a

65 user.refresh_from_db() 1a

66 

67 assert response.status_code == 302 1a

68 assert user.name == form_data["name"] 1a

69 

70 

71class TestUserRedirectView: 1a

72 def test_get_redirect_url(self, user: CustomUser, request_factory: RequestFactory): 1a

73 view = UserRedirectView() 1a

74 request = request_factory.get("/fake-url") 1a

75 request.user = user 1a

76 

77 view.request = request 1a

78 

79 assert view.get_redirect_url() == f"/accounts/{user.username}/" 1a