from django.contrib.auth import get_user_model from django.test import TestCase from django.urls import reverse 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, 'سن باید بین ۵ تا ۲۵ سال باشد')