Skip to content

Commit e112052

Browse files
authored
Don't strip out B2B courses from the API (#2710)
1 parent 7173817 commit e112052

File tree

3 files changed

+6
-33
lines changed

3 files changed

+6
-33
lines changed

courses/serializers/v2/courses.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,7 @@ def get_courseruns(self, instance):
246246
b2b_contract__organization_id=self.context["org_id"]
247247
).all()
248248
else:
249-
courseruns = instance.courseruns.filter(b2b_contract__isnull=True).all()
249+
courseruns = instance.courseruns.all()
250250

251251
return CourseRunSerializer(courseruns, many=True, read_only=True).data
252252

courses/views/v2/__init__.py

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"""
44

55
import django_filters
6-
from django.db.models import Count, Exists, F, OuterRef
6+
from django.db.models import Count, Exists, OuterRef
77
from django_filters.rest_framework import DjangoFilterBackend
88
from drf_spectacular.utils import extend_schema
99
from rest_framework import viewsets
@@ -164,10 +164,8 @@ class Meta:
164164

165165
def filter_org_id(self, queryset, _, value):
166166
"""
167-
No-op filter for org_id.
168-
169-
This gets done in the get_queryset, but the filter needs to know about
170-
the field so the API spec is generated correctly.
167+
Filter just courses that have course runs that have B2B courses in them
168+
that match the specified org_id, if we're in that org.
171169
"""
172170
user = self.request.user
173171

@@ -207,7 +205,7 @@ class CourseViewSet(viewsets.ReadOnlyModelViewSet):
207205
def get_queryset(self):
208206
"""Get the queryset for the viewset."""
209207

210-
qs = (
208+
return (
211209
Course.objects.select_related("page")
212210
.prefetch_related("departments")
213211
.annotate(count_b2b_courseruns=Count("courseruns__b2b_contract__id"))
@@ -216,11 +214,6 @@ def get_queryset(self):
216214
.distinct()
217215
)
218216

219-
if not self.request.query_params.get("org_id"):
220-
return qs.filter(count_courseruns__gt=F("count_b2b_courseruns"))
221-
222-
return qs
223-
224217
def get_serializer_context(self):
225218
added_context = {}
226219
qp = self.request.query_params

courses/views/v2/views_test.py

Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
num_queries_from_department,
3434
num_queries_from_programs,
3535
)
36-
from courses.views.v2 import CourseViewSet, Pagination, ProgramFilterSet
36+
from courses.views.v2 import Pagination, ProgramFilterSet
3737
from main.test_utils import assert_drf_json_equal, duplicate_queries_check
3838
from users.factories import UserFactory
3939

@@ -328,26 +328,6 @@ def test_filter_without_org_id_authenticated_user(user_drf_client):
328328
assert course_with_contract.title in titles
329329

330330

331-
def test_filter_anonymous_user_sees_no_contracted_runs():
332-
course_with_contract = CourseFactory(title="Hidden Course")
333-
contract = ContractPageFactory(active=True)
334-
CourseRunFactory(course=course_with_contract, b2b_contract=contract)
335-
336-
course_no_contract = CourseFactory(title="Visible Course")
337-
CourseRunFactory(course=course_no_contract)
338-
339-
rf = RequestFactory()
340-
request = rf.get(reverse("v2:courses_api-list"))
341-
request.user = AnonymousUser()
342-
343-
view = CourseViewSet()
344-
view.request = Request(request)
345-
346-
queryset = view.get_queryset()
347-
assert course_no_contract in queryset
348-
assert course_with_contract not in queryset
349-
350-
351331
@pytest.mark.django_db
352332
def test_filter_by_org_id_with_contracted_user():
353333
org = OrganizationPageFactory(name="Test Org")

0 commit comments

Comments
 (0)