Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
185 changes: 184 additions & 1 deletion realworld/accounts/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -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()

Expand Down Expand Up @@ -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"

Expand Down