Skip to content

Commit 97851de

Browse files
committed
tests added
1 parent 03dfabf commit 97851de

File tree

4 files changed

+94
-2
lines changed

4 files changed

+94
-2
lines changed

accounts/tests/__init__.py

Whitespace-only changes.

accounts/tests/test_users_crud.py

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
from django.test import TestCase
2+
from django.urls import reverse
3+
from django.contrib.auth.models import User
4+
5+
6+
class UsersCrudBasicTests(TestCase):
7+
def setUp(self):
8+
self.password = "P@ssw0rd12345"
9+
self.user1 = User.objects.create_user(
10+
username="alice", password=self.password,
11+
first_name="Alice", last_name="A"
12+
)
13+
self.user2 = User.objects.create_user(
14+
username="bob", password=self.password,
15+
first_name="Bob", last_name="B"
16+
)
17+
18+
# ---- LIST (public) ----
19+
def test_users_list_is_public(self):
20+
resp = self.client.get(reverse("users:list"))
21+
self.assertEqual(resp.status_code, 200)
22+
self.assertContains(resp, "alice")
23+
self.assertContains(resp, "bob")
24+
25+
# ---- CREATE (registration) ----
26+
def test_registration_get(self):
27+
resp = self.client.get(reverse("users:create"))
28+
self.assertEqual(resp.status_code, 200)
29+
self.assertContains(resp, 'name="username"')
30+
self.assertContains(resp, 'name="password1"')
31+
self.assertContains(resp, 'name="password2"')
32+
33+
def test_registration_post_creates_user(self):
34+
payload = {
35+
"username": "charlie",
36+
"first_name": "Charlie",
37+
"last_name": "C",
38+
"password1": "XyZ12345!xyZ",
39+
"password2": "XyZ12345!xyZ",
40+
}
41+
resp = self.client.post(reverse("users:create"), data=payload)
42+
self.assertEqual(resp.status_code, 302)
43+
self.assertTrue(User.objects.filter(username="charlie").exists())
44+
45+
# ---- UPDATE (only self) ----
46+
def test_update_requires_auth_redirects(self):
47+
url = reverse("users:update", args=[self.user1.pk])
48+
resp = self.client.get(url)
49+
self.assertEqual(resp.status_code, 302)
50+
51+
def test_user_can_update_self(self):
52+
self.client.login(username="alice", password=self.password)
53+
url = reverse("users:update", args=[self.user1.pk])
54+
resp_get = self.client.get(url)
55+
self.assertEqual(resp_get.status_code, 200)
56+
57+
payload = {"username": "alice_new", "first_name": "Al", "last_name": "A"}
58+
resp_post = self.client.post(url, data=payload)
59+
self.assertEqual(resp_post.status_code, 302)
60+
61+
self.user1.refresh_from_db()
62+
self.assertEqual(self.user1.username, "alice_new")
63+
self.assertEqual(self.user1.first_name, "Al")
64+
65+
def test_user_cannot_update_other(self):
66+
self.client.login(username="alice", password=self.password)
67+
url = reverse("users:update", args=[self.user2.pk])
68+
resp = self.client.post(url, data={"username": "bob_hacked"})
69+
self.assertIn(resp.status_code, (302, 403, 404))
70+
self.user2.refresh_from_db()
71+
self.assertEqual(self.user2.username, "bob")
72+
73+
# ---- DELETE (only self) ----
74+
def test_delete_requires_auth_redirects(self):
75+
url = reverse("users:delete", args=[self.user1.pk])
76+
resp = self.client.get(url)
77+
self.assertEqual(resp.status_code, 302)
78+
79+
def test_user_can_delete_self(self):
80+
self.client.login(username="bob", password=self.password)
81+
url = reverse("users:delete", args=[self.user2.pk])
82+
resp_get = self.client.get(url)
83+
self.assertEqual(resp_get.status_code, 200)
84+
resp_post = self.client.post(url)
85+
self.assertEqual(resp_post.status_code, 302)
86+
self.assertFalse(User.objects.filter(pk=self.user2.pk).exists())
87+
88+
def test_user_cannot_delete_other(self):
89+
self.client.login(username="alice", password=self.password)
90+
url = reverse("users:delete", args=[self.user2.pk])
91+
resp = self.client.post(url)
92+
self.assertIn(resp.status_code, (302, 403, 404))
93+
self.assertTrue(User.objects.filter(pk=self.user2.pk).exists())

accounts/urls.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
# accounts/urls.py
22
from django.urls import path
3-
from django.contrib.auth.views import LoginView
43
from .views import UserListView, UserUpdateView, UserDeleteView, UserCreateView, UserLogoutView, UserLoginView
54

65
app_name = "users"

accounts/views.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ def handle_no_permission(self):
3030
class UserCreateView(CreateView):
3131
form_class = CustomUserCreationForm
3232
template_name = "users/create.html"
33-
success_url = reverse_lazy("users:list")
33+
success_url = reverse_lazy("users:login")
3434

3535
def form_valid(self, form):
3636
response = super().form_valid(form)

0 commit comments

Comments
 (0)