feat: add school management auth and student CRUD UI

This commit is contained in:
Sina
2026-09-24 23:34:21 +03:30
parent 12e9efcb5c
commit 8a196f8c4f
20 changed files with 326 additions and 9 deletions

View File

@@ -1,3 +1,42 @@
from django.contrib.auth import get_user_model
from django.test import TestCase
from django.urls import reverse
# Create your tests here.
from .models import Student
class StudentManagementTests(TestCase):
def setUp(self):
self.user = get_user_model().objects.create_user(username='manager', password='Strong-pass-123')
self.student = Student.objects.create(first_name='سارا', last_name='احمدی', age=10, grade='چهارم')
def test_dashboard_requires_login(self):
response = self.client.get(reverse('dashboard'))
self.assertRedirects(response, f'{reverse("login")}?next={reverse("dashboard")}')
def test_manager_can_create_update_and_delete_student(self):
self.client.force_login(self.user)
create_response = self.client.post(reverse('student_add'), {
'first_name': 'علی', 'last_name': 'رضایی', 'age': 11, 'grade': 'پنجم',
})
self.assertRedirects(create_response, reverse('dashboard'))
new_student = Student.objects.get(first_name='علی')
update_response = self.client.post(reverse('student_edit', args=[new_student.pk]), {
'first_name': 'علی', 'last_name': 'کریمی', 'age': 12, 'grade': 'ششم',
})
self.assertRedirects(update_response, reverse('dashboard'))
new_student.refresh_from_db()
self.assertEqual(new_student.last_name, 'کریمی')
delete_response = self.client.post(reverse('student_delete', args=[new_student.pk]))
self.assertRedirects(delete_response, reverse('dashboard'))
self.assertFalse(Student.objects.filter(pk=new_student.pk).exists())
def test_invalid_age_is_rejected(self):
self.client.force_login(self.user)
response = self.client.post(reverse('student_add'), {
'first_name': 'نوید', 'last_name': 'محمدی', 'age': 3, 'grade': 'اول',
})
self.assertEqual(response.status_code, 200)
self.assertContains(response, 'سن باید بین ۵ تا ۲۵ سال باشد')