From 8b4203a2a661d945468cb22796b4031de6077799 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Tue, 4 Nov 2025 15:54:52 +0000 Subject: [PATCH] Add comprehensive test coverage for settings view - Test unauthenticated access (redirects to login) - Test authenticated GET request (displays form with user data) - Test POST with valid data (updates settings and redirects) - Test POST with invalid data (returns form with errors) - Test POST with password update (changes password) Follows existing test patterns from TestRegisterView and TestFollowView. All tests pass successfully. Co-Authored-By: Jude Partovi --- realworld/accounts/tests.py | 88 +++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) diff --git a/realworld/accounts/tests.py b/realworld/accounts/tests.py index 073e947..f6415f6 100644 --- a/realworld/accounts/tests.py +++ b/realworld/accounts/tests.py @@ -133,3 +133,91 @@ def test_exists(self): response = self.client.get(self.url, {"email": "tester@gmail.com"}) self.assertEqual(response.status_code, http.HTTPStatus.OK) self.assertContains(response, "This email is in use") + + +class TestSettingsView(TestCase): + url = reverse_lazy("settings") + password = "testpass" + + @classmethod + def setUpTestData(cls): + cls.user = User( + email="tester@gmail.com", + name="Test User", + bio="Original bio", + image="https://example.com/image.jpg", + ) + cls.user.set_password(cls.password) + cls.user.save() + + def test_get_unauthenticated(self): + response = self.client.get(self.url) + self.assertEqual(response.status_code, http.HTTPStatus.FOUND) + self.assertTrue(response.url.startswith("/login/")) + + def test_get_authenticated(self): + self.client.force_login(self.user) + response = self.client.get(self.url) + + self.assertEqual(response.status_code, http.HTTPStatus.OK) + self.assertIn("form", response.context) + form = response.context["form"] + self.assertEqual(form.instance, self.user) + + def test_post_valid(self): + self.client.force_login(self.user) + response = self.client.post( + self.url, + { + "name": "Updated Name", + "email": "updated@gmail.com", + "bio": "Updated bio", + "image": "https://example.com/new-image.jpg", + }, + ) + + self.assertEqual( + response.headers["HX-Redirect"], + self.user.get_absolute_url() + ) + + self.user.refresh_from_db() + self.assertEqual(self.user.name, "Updated Name") + self.assertEqual(self.user.email, "updated@gmail.com") + self.assertEqual(self.user.bio, "Updated bio") + self.assertEqual(self.user.image, "https://example.com/new-image.jpg") + + def test_post_invalid(self): + self.client.force_login(self.user) + response = self.client.post( + self.url, + { + "email": "invalid-email", + }, + ) + + self.assertEqual(response.status_code, http.HTTPStatus.OK) + self.assertIn("form", response.context) + form = response.context["form"] + self.assertFalse(form.is_valid()) + + def test_post_with_password(self): + self.client.force_login(self.user) + response = self.client.post( + self.url, + { + "name": self.user.name, + "email": self.user.email, + "bio": self.user.bio, + "image": self.user.image, + "password": "newpassword123", + }, + ) + + self.assertEqual( + response.headers["HX-Redirect"], + self.user.get_absolute_url() + ) + + self.user.refresh_from_db() + self.assertTrue(self.user.check_password("newpassword123"))