From ca0e52f725a0b1b854f4ef960c29b70acc7d4036 Mon Sep 17 00:00:00 2001 From: unawaz Date: Fri, 11 Nov 2016 17:48:27 +0500 Subject: [PATCH] adding upblished check for affiliate window --- .../v1/tests/test_views/test_affiliate_window.py | 14 ++++++++++++++ course_discovery/apps/course_metadata/query.py | 5 +++-- .../apps/course_metadata/tests/test_query.py | 12 ++++++++++++ 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/course_discovery/apps/api/v1/tests/test_views/test_affiliate_window.py b/course_discovery/apps/api/v1/tests/test_views/test_affiliate_window.py index e55618933c..bf40eb1767 100644 --- a/course_discovery/apps/api/v1/tests/test_views/test_affiliate_window.py +++ b/course_discovery/apps/api/v1/tests/test_views/test_affiliate_window.py @@ -14,6 +14,7 @@ from course_discovery.apps.catalogs.tests.factories import CatalogFactory from course_discovery.apps.core.tests.factories import UserFactory from course_discovery.apps.core.tests.mixins import ElasticsearchTestMixin +from course_discovery.apps.course_metadata.choices import CourseRunStatus from course_discovery.apps.course_metadata.models import Seat from course_discovery.apps.course_metadata.tests.factories import CourseRunFactory, SeatFactory @@ -142,3 +143,16 @@ def test_permissions(self): with self.assertNumQueries(8): response = self.client.get(url) self.assertEqual(response.status_code, 200) + + def test_unpublished_status(self): + """ Verify the endpoint does not return CourseRuns in a non-published state. """ + self.course_run.status = CourseRunStatus.Unpublished + self.course_run.save() + + CourseRunFactory(course=self.course, status=CourseRunStatus.Unpublished) + + response = self.client.get(self.affiliate_url) + + self.assertEqual(response.status_code, 200) + root = ET.fromstring(response.content) + self.assertEqual(0, len(root.findall('product'))) diff --git a/course_discovery/apps/course_metadata/query.py b/course_discovery/apps/course_metadata/query.py index 9bb2b21fed..d38331ca7d 100644 --- a/course_discovery/apps/course_metadata/query.py +++ b/course_discovery/apps/course_metadata/query.py @@ -4,6 +4,7 @@ from django.db import models from django.db.models.query_utils import Q +from course_discovery.apps.course_metadata.choices import CourseRunStatus from course_discovery.apps.course_metadata.choices import ProgramStatus @@ -45,13 +46,13 @@ def active(self): def marketable(self): """ Returns CourseRuns that can be marketed to learners. - A CourseRun is considered marketable if it has a defined slug. + A CourseRun is considered marketable if it has a defined slug and has been published. Returns: QuerySet """ - return self.exclude(slug__isnull=True).exclude(slug='') + return self.exclude(slug__isnull=True).exclude(slug='').filter(status=CourseRunStatus.Published) class ProgramQuerySet(models.QuerySet): diff --git a/course_discovery/apps/course_metadata/tests/test_query.py b/course_discovery/apps/course_metadata/tests/test_query.py index 28ce5dab50..d61e78c58d 100644 --- a/course_discovery/apps/course_metadata/tests/test_query.py +++ b/course_discovery/apps/course_metadata/tests/test_query.py @@ -4,6 +4,7 @@ import pytz from django.test import TestCase +from course_discovery.apps.course_metadata.choices import CourseRunStatus from course_discovery.apps.course_metadata.choices import ProgramStatus from course_discovery.apps.course_metadata.models import Course, CourseRun, Program from course_discovery.apps.course_metadata.tests.factories import CourseRunFactory, ProgramFactory @@ -78,6 +79,17 @@ def test_marketable_exclusions(self, slug): CourseRunFactory(slug=slug) self.assertEqual(CourseRun.objects.marketable().count(), 0) + @ddt.data( + (CourseRunStatus.Unpublished, 0), + (CourseRunStatus.Published, 1) + ) + @ddt.unpack + def test_marketable_unpublished_exclusions(self, status, count): + """ Verify the method excludes CourseRuns with Unpublished status. """ + CourseRunFactory(status=status) + + self.assertEqual(CourseRun.objects.marketable().count(), count) + @ddt.ddt class ProgramQuerySetTests(TestCase):