73 lines
2.7 KiB
Python
73 lines
2.7 KiB
Python
from django.contrib.auth.models import User
|
|
from django.test import TestCase
|
|
from django.urls import reverse
|
|
|
|
from apps.accounts.forms import SignUpForm
|
|
from apps.accounts.models import ClientProfile
|
|
|
|
|
|
class SignUpFormTest(TestCase):
|
|
def test_signup_creates_user_and_profile(self):
|
|
form = SignUpForm(
|
|
data={
|
|
"username": "client1",
|
|
"first_name": "Ada",
|
|
"last_name": "Lovelace",
|
|
"email": "ada@example.com",
|
|
"company": "Analytical Engines",
|
|
"phone": "+1 555 0100",
|
|
"timezone": "UTC",
|
|
"password1": "Str0ngPass!word",
|
|
"password2": "Str0ngPass!word",
|
|
}
|
|
)
|
|
self.assertTrue(form.is_valid(), form.errors)
|
|
user = form.save()
|
|
self.assertEqual(user.email, "ada@example.com")
|
|
profile = ClientProfile.objects.get(user=user)
|
|
self.assertEqual(profile.company, "Analytical Engines")
|
|
self.assertEqual(profile.timezone, "UTC")
|
|
|
|
|
|
class AccountViewsTest(TestCase):
|
|
def test_signup_page_renders(self):
|
|
response = self.client.get(reverse("accounts:signup"))
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
def test_signup_creates_account_and_logs_in(self):
|
|
response = self.client.post(
|
|
reverse("accounts:signup"),
|
|
data={
|
|
"username": "newclient",
|
|
"first_name": "Grace",
|
|
"last_name": "Hopper",
|
|
"email": "grace@example.com",
|
|
"company": "",
|
|
"phone": "",
|
|
"timezone": "UTC",
|
|
"password1": "Str0ngPass!word",
|
|
"password2": "Str0ngPass!word",
|
|
},
|
|
)
|
|
self.assertEqual(response.status_code, 302)
|
|
self.assertEqual(response.url, reverse("projects:dashboard"))
|
|
self.assertTrue(User.objects.filter(username="newclient").exists())
|
|
|
|
def test_login_required_for_profile(self):
|
|
response = self.client.get(reverse("accounts:profile"))
|
|
self.assertEqual(response.status_code, 302)
|
|
self.assertIn(reverse("accounts:login"), response.url)
|
|
|
|
def test_logout_requires_post_and_clears_session(self):
|
|
self.client.login(username="newclient", password="Str0ngPass!word")
|
|
response = self.client.get(reverse("accounts:logout"))
|
|
self.assertEqual(response.status_code, 405)
|
|
|
|
response = self.client.post(reverse("accounts:logout"))
|
|
self.assertEqual(response.status_code, 302)
|
|
self.assertEqual(response.url, reverse("pages:home"))
|
|
|
|
response = self.client.get(reverse("projects:dashboard"))
|
|
self.assertEqual(response.status_code, 302)
|
|
self.assertIn(reverse("accounts:login"), response.url)
|