From 425cdcba648fda80fbeca240584822cefa184e6f Mon Sep 17 00:00:00 2001 From: WajahatKanju Date: Sun, 3 Mar 2024 16:39:48 +0500 Subject: [PATCH] added test accounts_filters --- accounts/filters.py | 2 +- accounts/tests/test_decorators.py | 18 ---------- accounts/tests/test_filters.py | 55 +++++++++++++++++++++++++++++++ 3 files changed, 56 insertions(+), 19 deletions(-) create mode 100644 accounts/tests/test_filters.py diff --git a/accounts/filters.py b/accounts/filters.py index d24fd85..710820e 100644 --- a/accounts/filters.py +++ b/accounts/filters.py @@ -7,7 +7,7 @@ class LecturerFilter(django_filters.FilterSet): username = django_filters.CharFilter(lookup_expr="exact", label="") name = django_filters.CharFilter(method="filter_by_name", label="") email = django_filters.CharFilter(lookup_expr="icontains", label="") - + class Meta: model = User fields = ["username", "email"] diff --git a/accounts/tests/test_decorators.py b/accounts/tests/test_decorators.py index 06e7b10..9326626 100644 --- a/accounts/tests/test_decorators.py +++ b/accounts/tests/test_decorators.py @@ -126,62 +126,44 @@ class StudentRequiredDecoratorTests(TestCase): return HttpResponse("Student View Content") def test_student_required_decorator_redirects(self): - # Apply the student_required decorator to the view function decorated_view = student_required(self.student_view) - # Create a mock request object with a non-student user request = self.factory.get("/restricted-view") request.user = self.user - # Call the decorated view response = decorated_view(request) - # Assert that the response is a redirect (status code 302) self.assertEqual(response.status_code, 302) - # Assert that the response redirects to the default URL ("/") self.assertEqual(response.url, "/") 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/") - # Create a mock request object with a non-student user request = self.factory.get("/restricted-view") request.user = self.user - # Call the decorated view response = decorated_view(request) - # Assert redirection to login page self.assertEqual(response.status_code, 302) self.assertEqual(response.url, '/login/') 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) - # Create a mock request object with a student user request = self.factory.get("/restricted-view") request.user = self.student - # Call the decorated view response = decorated_view(request) - # Assert that the response is not a redirect (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") 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) - # Create a mock request object with a student user request = self.factory.get("/restricted-view") request.user = self.student - # Call the decorated view response = decorated_view(request) - # Assert that the response is an instance of HttpResponse self.assertIsInstance(response, HttpResponse) \ No newline at end of file diff --git a/accounts/tests/test_filters.py b/accounts/tests/test_filters.py new file mode 100644 index 0000000..fa16cf8 --- /dev/null +++ b/accounts/tests/test_filters.py @@ -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)