Commit 5235625d by Umar Nawaz Committed by GitHub

Merge pull request #436 from edx/unawaz/ECOM-6282-filter-out-unpublished-courses

adding unpublished check for affiliate window
parents a3198631 ca0e52f7
......@@ -14,6 +14,7 @@ from course_discovery.apps.api.v1.tests.test_views.mixins import SerializationMi
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 @@ class AffiliateWindowViewSetTests(ElasticsearchTestMixin, SerializationMixin, AP
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')))
......@@ -4,6 +4,7 @@ import pytz
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 @@ class CourseRunQuerySet(models.QuerySet):
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):
......
......@@ -4,6 +4,7 @@ import ddt
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 @@ class CourseRunQuerySetTests(TestCase):
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):
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment