From 3d5ed9592bc5ca59929b1a6b8e67502d9a9ea408 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Wed, 10 Dec 2025 17:07:34 +0000 Subject: [PATCH] Add unit tests for SettingsForm Co-Authored-By: Jude Partovi --- realworld/accounts/tests.py | 78 ++++++++++++++++++++++++++++++++++++- 1 file changed, 77 insertions(+), 1 deletion(-) diff --git a/realworld/accounts/tests.py b/realworld/accounts/tests.py index 073e947..5d0c7aa 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() @@ -133,3 +133,79 @@ 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 TestSettingsForm(TestCase): + form_data = { + "email": "updated@gmail.com", + "name": "Updated Name", + "bio": "This is my bio", + "image": "https://example.com/image.jpg", + } + + @classmethod + def setUpTestData(cls): + cls.user = User.objects.create_user( + "tester@gmail.com", name="Test User", password="testpass1" + ) + + def test_valid_form_submission(self): + form = SettingsForm(self.form_data, instance=self.user) + self.assertTrue(form.is_valid()) + + def test_password_field_is_optional(self): + form = SettingsForm(self.form_data, instance=self.user) + self.assertTrue(form.is_valid()) + self.assertEqual(form.cleaned_data.get("password"), "") + + def test_password_update_hashes_password(self): + form_data_with_password = {**self.form_data, "password": "newpassword123"} + form = SettingsForm(form_data_with_password, instance=self.user) + self.assertTrue(form.is_valid()) + + user = form.save() + self.assertTrue(user.check_password("newpassword123")) + self.assertFalse(user.check_password("testpass1")) + + def test_password_not_updated_when_empty(self): + form = SettingsForm(self.form_data, instance=self.user) + self.assertTrue(form.is_valid()) + + user = form.save() + self.assertTrue(user.check_password("testpass1")) + + def test_email_validation_invalid_format(self): + invalid_data = {**self.form_data, "email": "invalid-email"} + form = SettingsForm(invalid_data, instance=self.user) + self.assertFalse(form.is_valid()) + self.assertIn("email", form.errors) + + def test_save_updates_user_fields(self): + form = SettingsForm(self.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, "This is my bio") + self.assertEqual(user.image, "https://example.com/image.jpg") + + def test_save_with_commit_false(self): + form = SettingsForm(self.form_data, instance=self.user) + self.assertTrue(form.is_valid()) + + user = form.save(commit=False) + self.assertEqual(user.email, "updated@gmail.com") + + self.user.refresh_from_db() + self.assertEqual(self.user.email, "tester@gmail.com") + + def test_empty_bio_and_image_allowed(self): + minimal_data = { + "email": "test@gmail.com", + "name": "Test User", + "bio": "", + "image": "", + } + form = SettingsForm(minimal_data, instance=self.user) + self.assertTrue(form.is_valid())