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 ...@@ -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.catalogs.tests.factories import CatalogFactory
from course_discovery.apps.core.tests.factories import UserFactory from course_discovery.apps.core.tests.factories import UserFactory
from course_discovery.apps.core.tests.mixins import ElasticsearchTestMixin 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.models import Seat
from course_discovery.apps.course_metadata.tests.factories import CourseRunFactory, SeatFactory from course_discovery.apps.course_metadata.tests.factories import CourseRunFactory, SeatFactory
...@@ -142,3 +143,16 @@ class AffiliateWindowViewSetTests(ElasticsearchTestMixin, SerializationMixin, AP ...@@ -142,3 +143,16 @@ class AffiliateWindowViewSetTests(ElasticsearchTestMixin, SerializationMixin, AP
with self.assertNumQueries(8): with self.assertNumQueries(8):
response = self.client.get(url) response = self.client.get(url)
self.assertEqual(response.status_code, 200) 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 ...@@ -4,6 +4,7 @@ import pytz
from django.db import models from django.db import models
from django.db.models.query_utils import Q 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 from course_discovery.apps.course_metadata.choices import ProgramStatus
...@@ -45,13 +46,13 @@ class CourseRunQuerySet(models.QuerySet): ...@@ -45,13 +46,13 @@ class CourseRunQuerySet(models.QuerySet):
def marketable(self): def marketable(self):
""" Returns CourseRuns that can be marketed to learners. """ 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: Returns:
QuerySet 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): class ProgramQuerySet(models.QuerySet):
......
...@@ -4,6 +4,7 @@ import ddt ...@@ -4,6 +4,7 @@ import ddt
import pytz import pytz
from django.test import TestCase 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.choices import ProgramStatus
from course_discovery.apps.course_metadata.models import Course, CourseRun, Program from course_discovery.apps.course_metadata.models import Course, CourseRun, Program
from course_discovery.apps.course_metadata.tests.factories import CourseRunFactory, ProgramFactory from course_discovery.apps.course_metadata.tests.factories import CourseRunFactory, ProgramFactory
...@@ -78,6 +79,17 @@ class CourseRunQuerySetTests(TestCase): ...@@ -78,6 +79,17 @@ class CourseRunQuerySetTests(TestCase):
CourseRunFactory(slug=slug) CourseRunFactory(slug=slug)
self.assertEqual(CourseRun.objects.marketable().count(), 0) 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 @ddt.ddt
class ProgramQuerySetTests(TestCase): 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