From ec59db9e7a4489cc63b0926d146e959814ad28ad Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Wed, 21 Jan 2026 02:21:23 +0000 Subject: [PATCH] Add comprehensive test coverage for SettingsForm class Co-Authored-By: shayan@cognition.ai --- realworld/accounts/tests.py | 185 +++++++++++++++++++++++++++++++++++- 1 file changed, 184 insertions(+), 1 deletion(-) diff --git a/realworld/accounts/tests.py b/realworld/accounts/tests.py index 073e947..fc362d5 100644 --- a/realworld/accounts/tests.py +++ b/realworld/accounts/tests.py @@ -4,7 +4,7 @@ from django.test import TestCase from django.urls import reverse, reverse_lazy -from .forms import UserCreationForm +from .forms import SettingsForm, UserCreationForm User = get_user_model() @@ -47,6 +47,189 @@ def test_save(self): self.assertTrue(user.check_password("testpass1")) +class TestSettingsForm(TestCase): + @classmethod + def setUpTestData(cls): + cls.user = User.objects.create_user( + "tester@gmail.com", + name="Test User", + password="testpass1", + ) + + def test_valid_form_without_password(self): + form_data = { + "email": "tester@gmail.com", + "name": "Test User", + "bio": "", + "image": "", + "password": "", + } + form = SettingsForm(form_data, instance=self.user) + self.assertTrue(form.is_valid()) + + def test_valid_form_with_all_fields(self): + form_data = { + "email": "newemail@gmail.com", + "name": "New Name", + "bio": "This is my bio", + "image": "https://example.com/image.jpg", + "password": "", + } + form = SettingsForm(form_data, instance=self.user) + self.assertTrue(form.is_valid()) + + def test_save_without_password_change(self): + form_data = { + "email": "updated@gmail.com", + "name": "Updated Name", + "bio": "Updated bio", + "image": "https://example.com/new-image.jpg", + "password": "", + } + form = SettingsForm(form_data, instance=self.user) + self.assertTrue(form.is_valid()) + + user = form.save() + self.assertEqual(user.email, "updated@gmail.com") + self.assertEqual(user.name, "Updated Name") + self.assertEqual(user.bio, "Updated bio") + self.assertEqual(user.image, "https://example.com/new-image.jpg") + self.assertTrue(user.check_password("testpass1")) + + def test_save_with_password_change(self): + form_data = { + "email": "tester@gmail.com", + "name": "Test User", + "bio": "", + "image": "", + "password": "newpassword123", + } + form = SettingsForm(form_data, instance=self.user) + self.assertTrue(form.is_valid()) + + user = form.save() + self.assertFalse(user.check_password("testpass1")) + self.assertTrue(user.check_password("newpassword123")) + + def test_save_updates_all_fields_with_password(self): + form_data = { + "email": "completely_new@gmail.com", + "name": "Completely New Name", + "bio": "A brand new bio", + "image": "https://example.com/brand-new.jpg", + "password": "brandnewpass123", + } + form = SettingsForm(form_data, instance=self.user) + self.assertTrue(form.is_valid()) + + user = form.save() + self.assertEqual(user.email, "completely_new@gmail.com") + self.assertEqual(user.name, "Completely New Name") + self.assertEqual(user.bio, "A brand new bio") + self.assertEqual(user.image, "https://example.com/brand-new.jpg") + self.assertTrue(user.check_password("brandnewpass123")) + + def test_invalid_email(self): + form_data = { + "email": "invalid-email", + "name": "Test User", + "bio": "", + "image": "", + "password": "", + } + form = SettingsForm(form_data, instance=self.user) + self.assertFalse(form.is_valid()) + self.assertIn("email", form.errors) + + def test_invalid_image_url(self): + form_data = { + "email": "tester@gmail.com", + "name": "Test User", + "bio": "", + "image": "not-a-valid-url", + "password": "", + } + form = SettingsForm(form_data, instance=self.user) + self.assertFalse(form.is_valid()) + self.assertIn("image", form.errors) + + def test_empty_name_invalid(self): + form_data = { + "email": "tester@gmail.com", + "name": "", + "bio": "", + "image": "", + "password": "", + } + form = SettingsForm(form_data, instance=self.user) + self.assertFalse(form.is_valid()) + self.assertIn("name", form.errors) + + def test_empty_email_invalid(self): + form_data = { + "email": "", + "name": "Test User", + "bio": "", + "image": "", + "password": "", + } + form = SettingsForm(form_data, instance=self.user) + self.assertFalse(form.is_valid()) + self.assertIn("email", form.errors) + + def test_save_with_commit_false(self): + form_data = { + "email": "nocommit@gmail.com", + "name": "No Commit User", + "bio": "Bio without commit", + "image": "", + "password": "newpass123", + } + form = SettingsForm(form_data, instance=self.user) + self.assertTrue(form.is_valid()) + + user = form.save(commit=False) + self.assertEqual(user.email, "nocommit@gmail.com") + self.assertTrue(user.check_password("newpass123")) + + self.user.refresh_from_db() + self.assertEqual(self.user.email, "tester@gmail.com") + + def test_bio_can_be_blank(self): + form_data = { + "email": "tester@gmail.com", + "name": "Test User", + "bio": "", + "image": "", + "password": "", + } + form = SettingsForm(form_data, instance=self.user) + self.assertTrue(form.is_valid()) + + def test_image_can_be_blank(self): + form_data = { + "email": "tester@gmail.com", + "name": "Test User", + "bio": "Some bio", + "image": "", + "password": "", + } + form = SettingsForm(form_data, instance=self.user) + self.assertTrue(form.is_valid()) + + def test_form_fields(self): + form = SettingsForm(instance=self.user) + self.assertIn("email", form.fields) + self.assertIn("name", form.fields) + self.assertIn("bio", form.fields) + self.assertIn("image", form.fields) + self.assertIn("password", form.fields) + + def test_password_field_not_required(self): + form = SettingsForm(instance=self.user) + self.assertFalse(form.fields["password"].required) + + class TestFollowView(TestCase): password = "testpass"