added test accounts_filters

This commit is contained in:
WajahatKanju 2024-03-03 16:39:48 +05:00
parent 1babe78d9e
commit 425cdcba64
3 changed files with 56 additions and 19 deletions

View File

@ -126,62 +126,44 @@ class StudentRequiredDecoratorTests(TestCase):
return HttpResponse("Student View Content") return HttpResponse("Student View Content")
def test_student_required_decorator_redirects(self): def test_student_required_decorator_redirects(self):
# Apply the student_required decorator to the view function
decorated_view = student_required(self.student_view) decorated_view = student_required(self.student_view)
# Create a mock request object with a non-student user
request = self.factory.get("/restricted-view") request = self.factory.get("/restricted-view")
request.user = self.user request.user = self.user
# Call the decorated view
response = decorated_view(request) response = decorated_view(request)
# Assert that the response is a redirect (status code 302)
self.assertEqual(response.status_code, 302) self.assertEqual(response.status_code, 302)
# Assert that the response redirects to the default URL ("/")
self.assertEqual(response.url, "/") self.assertEqual(response.url, "/")
def test_student_required_decorator_redirects_to_correct_path(self): def test_student_required_decorator_redirects_to_correct_path(self):
# Apply the student_required decorator to the view function
decorated_view = student_required(function=self.student_view, redirect_to="/login/") decorated_view = student_required(function=self.student_view, redirect_to="/login/")
# Create a mock request object with a non-student user
request = self.factory.get("/restricted-view") request = self.factory.get("/restricted-view")
request.user = self.user request.user = self.user
# Call the decorated view
response = decorated_view(request) response = decorated_view(request)
# Assert redirection to login page
self.assertEqual(response.status_code, 302) self.assertEqual(response.status_code, 302)
self.assertEqual(response.url, '/login/') self.assertEqual(response.url, '/login/')
def test_student_required_decorator_does_not_redirect_student(self): def test_student_required_decorator_does_not_redirect_student(self):
# Apply the student_required decorator to the view function
decorated_view = student_required(self.student_view) decorated_view = student_required(self.student_view)
# Create a mock request object with a student user
request = self.factory.get("/restricted-view") request = self.factory.get("/restricted-view")
request.user = self.student request.user = self.student
# Call the decorated view
response = decorated_view(request) response = decorated_view(request)
# Assert that the response is not a redirect (status code 200)
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
# Assert that the response contains the view content
self.assertEqual(response.content, b"Student View Content") self.assertEqual(response.content, b"Student View Content")
def test_student_redirect_decorator_return_correct_response(self): def test_student_redirect_decorator_return_correct_response(self):
# Apply the student_required decorator to the view function
decorated_view = student_required(self.student_view) decorated_view = student_required(self.student_view)
# Create a mock request object with a student user
request = self.factory.get("/restricted-view") request = self.factory.get("/restricted-view")
request.user = self.student request.user = self.student
# Call the decorated view
response = decorated_view(request) response = decorated_view(request)
# Assert that the response is an instance of HttpResponse
self.assertIsInstance(response, HttpResponse) self.assertIsInstance(response, HttpResponse)

View File

@ -0,0 +1,55 @@
from django.test import TestCase
from accounts.filters import LecturerFilter, StudentFilter
from accounts.models import User, Student
from course.models import Program
class LecturerFilterTestCase(TestCase):
def setUp(self):
User.objects.create(username="user1", first_name="John", last_name="Doe", email="john@example.com")
User.objects.create(username="user2", first_name="Jane", last_name="Doe", email="jane@example.com")
User.objects.create(username="user3", first_name="Alice", last_name="Smith", email="alice@example.com")
def test_username_filter(self):
filter_set = LecturerFilter(data={"username": "user1"})
self.assertEqual(len(filter_set.qs), 1)
def test_name_filter(self):
filter_set = LecturerFilter(data={"name": "John"})
self.assertEqual(len(filter_set.qs), 1)
def test_email_filter(self):
filter_set = LecturerFilter(data={"email": "example.com"})
self.assertEqual(len(filter_set.qs), 3) # All users should be returned since all have email addresses with "example.com"
def test_combined_filters(self):
filter_set = LecturerFilter(data={"name": "Doe", "email": "example.com"})
self.assertEqual(len(filter_set.qs), 2) # Both John Doe and Jane Doe should be returned
filter_set = LecturerFilter(data={"name": "Alice", "email": "example.com"})
self.assertEqual(len(filter_set.qs), 1) # 1 user matches Alice with "example.com" in the email
def test_no_filters(self):
filter_set = LecturerFilter(data={})
self.assertEqual(len(filter_set.qs), 3) # All users should be returned since no filters are applied
class StudentFilterTestCase(TestCase):
def setUp(self):
program1 = Program.objects.create(title="Computer Science", summary="Program for computer science students")
program2 = Program.objects.create(title="Mathematics", summary="Program for mathematics students")
program3 = Program.objects.create(title="Computer Engineering", summary="Program for computer engineering students")
Student.objects.create(student=User.objects.create(username="student1", first_name="John", last_name="Doe", email="john@example.com"), program=program1)
Student.objects.create(student=User.objects.create(username="student2", first_name="Jane", last_name="Williams", email="jane@example.com"), program=program2)
Student.objects.create(student=User.objects.create(username="student3", first_name="Alice", last_name="Smith", email="alice@example.com"), program=program3)
def test_name_filter(self):
filtered_students = StudentFilter(data = {'name': 'John'}, queryset=Student.objects.all()).qs
self.assertEqual(filtered_students.count(), 1)
def test_email_filter(self):
filter_set = StudentFilter(data={"email": "example.com"})
self.assertEqual(len(filter_set.qs), 3) # All students should be returned since all have email addresses with "example.com"
def test_program_filter(self):
filter_set = StudentFilter(data={"program__title": "Computer Science"})
self.assertEqual(len(filter_set.qs), 1)