Skip to content

Commit

Permalink
Fix duplication issue and fix tests as well
Browse files Browse the repository at this point in the history
  • Loading branch information
Patrick Gan committed Oct 16, 2024
1 parent 1a074a3 commit 7c1513f
Show file tree
Hide file tree
Showing 3 changed files with 107 additions and 2 deletions.
2 changes: 1 addition & 1 deletion rca/programmes/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -898,7 +898,7 @@ def __str__(self):
if self.degree_level:
bits.append(str(self.degree_level))
return " ".join(bits)

@property
def full_title(self):
return f"{self.title} {self.degree_level.title}"
Expand Down
105 changes: 105 additions & 0 deletions rca/programmes/tests/test_api.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
from django.test import TestCase

from rca.home.models import HomePage
from rca.programmes.factories import DegreeLevelFactory, ProgrammePageFactory
from rca.programmes.models import ProgrammeStudyMode, ProgrammeStudyModeProgrammePage


class ProgrammesAPIResponseTest(TestCase):
def setUp(self):
self.home_page = HomePage.objects.first()

self.full_time_study_mode = ProgrammeStudyMode.objects.get(
title="Full-time study"
)
self.part_time_study_mode = ProgrammeStudyMode.objects.get(
title="Part-time study"
)

self.programme_page_title = "Print"
self.degree_level_title = "MA"

degree_level = DegreeLevelFactory(title=self.degree_level_title)
self.programme_page = ProgrammePageFactory(
parent=self.home_page,
title=self.programme_page_title,
degree_level=degree_level,
)

self.base_url = (
"/api/v3/pages/?type=programmes.ProgrammePage"
"&limit=50&fields=summary%2Chero_image_square"
)

def test_should_return_if_querying_title_and_degree_level(self):
ProgrammeStudyModeProgrammePage.objects.create(
page=self.programme_page, programme_study_mode=self.full_time_study_mode
)

# Check by just using the title of the page.
response = self.client.get(
f"{self.base_url}&full-time=true"
f"&part-time=true&search={self.programme_page_title}"
)
data = response.json()

self.assertEqual(data["meta"]["total_count"], 1)
self.assertEqual(data["items"][0]["id"], self.programme_page.id)

# Check by using the page and degree name.
response = self.client.get(
f"{self.base_url}&full-time=true"
f"&part-time=true&search={self.programme_page_title}+{self.degree_level_title}"
)
data = response.json()

self.assertEqual(data["meta"]["total_count"], 1)
self.assertEqual(data["items"][0]["id"], self.programme_page.id)

def test_should_not_return_full_time_programmes_if_full_time_is_false(self):
ProgrammeStudyModeProgrammePage.objects.create(
page=self.programme_page, programme_study_mode=self.full_time_study_mode
)

# Set full-time to true first.
response = self.client.get(
f"{self.base_url}&full-time=true"
f"&part-time=true&search={self.programme_page_title}"
)
data = response.json()

self.assertEqual(data["meta"]["total_count"], 1)
self.assertEqual(data["items"][0]["id"], self.programme_page.id)

# Then set it to false - there should be no results now.
response = self.client.get(
f"{self.base_url}&full-time=false"
f"&part-time=true&search={self.programme_page_title}"
)
data = response.json()

self.assertEqual(data["meta"]["total_count"], 0)

def test_should_not_return_part_time_programmes_if_part_time_is_false(self):
ProgrammeStudyModeProgrammePage.objects.create(
page=self.programme_page, programme_study_mode=self.part_time_study_mode
)

# Set part-time to true first.
response = self.client.get(
f"{self.base_url}&full-time=true"
f"&part-time=true&search={self.programme_page_title}"
)
data = response.json()

self.assertEqual(data["meta"]["total_count"], 1)
self.assertEqual(data["items"][0]["id"], self.programme_page.id)

# Then set it to false - there should be no results now.
response = self.client.get(
f"{self.base_url}&full-time=true"
f"&part-time=false&search={self.programme_page_title}+{self.degree_level_title}"
)
data = response.json()

self.assertEqual(data["meta"]["total_count"], 0)
2 changes: 1 addition & 1 deletion rca/wagtailapi/filters.py
Original file line number Diff line number Diff line change
Expand Up @@ -166,4 +166,4 @@ def filter_queryset(self, request, queryset, view):

class DistinctFilter(filters.BaseFilterBackend):
def filter_queryset(self, request, queryset, view):
return queryset.distinct()
return queryset.distinct()

0 comments on commit 7c1513f

Please sign in to comment.