43 lines
1.8 KiB
Python
43 lines
1.8 KiB
Python
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, 'سن باید بین ۵ تا ۲۵ سال باشد')
|