Skip to content
Open
Show file tree
Hide file tree
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
186 changes: 186 additions & 0 deletions realworld/accounts/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -133,3 +133,189 @@ 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 TestProfileView(TestCase):
password = "testpass"

@classmethod
def setUpTestData(cls):
from realworld.articles.models import Article

cls.user = User(
email="author@test.com",
name="Author",
)
cls.user.set_password(cls.password)
cls.user.save()

cls.other_user = User(
email="other@test.com",
name="Other",
)
cls.other_user.set_password(cls.password)
cls.other_user.save()

cls.article = Article.objects.create(
title="Test Article",
summary="Summary",
content="Body",
author=cls.user,
)

cls.url = reverse("profile", args=[cls.user.id])

def test_profile_view_displays_user_articles(self):
response = self.client.get(self.url)

self.assertEqual(response.status_code, http.HTTPStatus.OK)
self.assertContains(response, "Test Article")
self.assertIn("articles", response.context)

def test_profile_view_with_favorites_filter(self):
from realworld.articles.models import Article

article_with_fav = Article.objects.create(
title="Popular",
summary="Sum",
content="Body",
author=self.user,
)
Article.objects.create(
title="Unpopular",
summary="Sum",
content="Body",
author=self.user,
)

article_with_fav.favorites.add(self.other_user)

response = self.client.get(self.url + "?favorites")

self.assertEqual(response.status_code, http.HTTPStatus.OK)
self.assertTrue(response.context["favorites"])
self.assertContains(response, "Popular")

def test_profile_view_shows_following_status(self):
self.client.force_login(self.user)

response = self.client.get(reverse("profile", args=[self.other_user.id]))
self.assertFalse(response.context["is_following"])

self.other_user.followers.add(self.user)

response = self.client.get(reverse("profile", args=[self.other_user.id]))
self.assertTrue(response.context["is_following"])


class TestSettingsView(TestCase):
password = "testpass"
url = reverse_lazy("settings")

@classmethod
def setUpTestData(cls):
cls.user = User(
email="user@test.com",
name="User",
)
cls.user.set_password(cls.password)
cls.user.save()

def test_settings_view_get_displays_form(self):
from .forms import SettingsForm

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)
self.assertIsInstance(response.context["form"], SettingsForm)

def test_settings_view_post_with_valid_data(self):
self.client.force_login(self.user)

response = self.client.post(
self.url,
{
"email": "updated@test.com",
"name": "Updated Name",
"bio": "My new bio",
"image": "",
"password": "",
},
)

self.assertEqual(response.status_code, http.HTTPStatus.OK)

self.user.refresh_from_db()
self.assertEqual(self.user.email, "updated@test.com")
self.assertEqual(self.user.name, "Updated Name")
self.assertEqual(self.user.bio, "My new bio")

def test_settings_view_post_with_invalid_data(self):
self.client.force_login(self.user)

response = self.client.post(
self.url,
{
"email": "not-an-email",
"name": "",
"bio": "",
"image": "",
"password": "",
},
)

self.assertEqual(response.status_code, http.HTTPStatus.OK)
self.assertIn("form", response.context)
self.assertTrue(response.context["form"].errors)


class TestSettingsForm(TestCase):
def test_settings_form_updates_password_when_provided(self):
from .forms import SettingsForm

user = User.objects.create_user(
"user@test.com", name="User", password="oldpass"
)

form = SettingsForm(
data={
"email": "user@test.com",
"name": "User",
"bio": "",
"image": "",
"password": "newpass123",
},
instance=user,
)

self.assertTrue(form.is_valid())
updated_user = form.save()

self.assertTrue(updated_user.check_password("newpass123"))
self.assertFalse(updated_user.check_password("oldpass"))

def test_settings_form_does_not_update_password_when_empty(self):
from .forms import SettingsForm

user = User.objects.create_user(
"user@test.com", name="User", password="oldpass"
)

form = SettingsForm(
data={
"email": "newemail@test.com",
"name": "New Name",
"bio": "New bio",
"image": "",
"password": "",
},
instance=user,
)

self.assertTrue(form.is_valid())
updated_user = form.save()

self.assertTrue(updated_user.check_password("oldpass"))
Loading