Commit e60aaeaa by Clinton Blackburn Committed by Clinton Blackburn

Replaced usage of the Program category field with type

ECOM-5173
parent 82d9dcd5
......@@ -10,7 +10,7 @@ from rest_framework.fields import DictField
from course_discovery.apps.catalogs.models import Catalog
from course_discovery.apps.course_metadata.models import (
Course, CourseRun, Image, Organization, Person, Prerequisite, Seat, Subject, Video, Program
Course, CourseRun, Image, Organization, Person, Prerequisite, Seat, Subject, Video, Program, ProgramType,
)
from course_discovery.apps.course_metadata.search_indexes import CourseIndex, CourseRunIndex, ProgramIndex
......@@ -50,7 +50,7 @@ PROGRAM_FACET_FIELD_OPTIONS = {
}
PROGRAM_SEARCH_FIELDS = (
'text', 'uuid', 'title', 'subtitle', 'category', 'marketing_url', 'organizations', 'content_type', 'status',
'text', 'uuid', 'title', 'subtitle', 'type', 'marketing_url', 'organizations', 'content_type', 'status',
'card_image_url',
)
......@@ -264,10 +264,11 @@ class ContainedCoursesSerializer(serializers.Serializer):
class ProgramSerializer(serializers.ModelSerializer):
courses = CourseSerializer(many=True)
authoring_organizations = OrganizationSerializer(many=True)
type = serializers.SlugRelatedField(slug_field='name', queryset=ProgramType.objects.all())
class Meta:
model = Program
fields = ('uuid', 'title', 'subtitle', 'category', 'marketing_slug', 'marketing_url', 'card_image_url',
fields = ('uuid', 'title', 'subtitle', 'type', 'marketing_slug', 'marketing_url', 'card_image_url',
'banner_image_url', 'authoring_organizations', 'courses',)
read_only_fields = ('uuid', 'marketing_url',)
......
......@@ -181,7 +181,7 @@ class ProgramSerializerTests(TestCase):
'uuid': str(program.uuid),
'title': program.title,
'subtitle': program.subtitle,
'category': program.category,
'type': program.type.name,
'marketing_slug': program.marketing_slug,
'marketing_url': program.marketing_url,
'card_image_url': program.card_image_url,
......@@ -409,7 +409,7 @@ class ProgramSearchSerializerTests(TestCase):
'uuid': str(program.uuid),
'title': program.title,
'subtitle': program.subtitle,
'category': program.category,
'type': program.type.name,
'marketing_url': program.marketing_url,
'organizations': expected_organizations,
'content_type': 'program',
......
......@@ -7,7 +7,7 @@ from course_discovery.apps.core.models import Currency
from course_discovery.apps.course_metadata.data_loaders import AbstractDataLoader
from course_discovery.apps.course_metadata.models import (
Image, Video, Organization, Seat, CourseRun, Program, Course, CourseOrganization,
)
ProgramType)
logger = logging.getLogger(__name__)
......@@ -240,6 +240,11 @@ class ProgramsApiDataLoader(AbstractDataLoader):
""" Loads programs from the Programs API. """
image_width = 1440
image_height = 480
XSERIES = None
def __init__(self, partner, api_url, access_token=None, token_type=None):
super(ProgramsApiDataLoader, self).__init__(partner, api_url, access_token, token_type)
self.XSERIES = ProgramType.objects.get(name='XSeries')
def ingest(self):
api_url = self.partner.programs_api_url
......@@ -272,7 +277,7 @@ class ProgramsApiDataLoader(AbstractDataLoader):
defaults = {
'title': body['name'],
'subtitle': body['subtitle'],
'category': body['category'],
'type': self.XSERIES,
'status': body['status'],
'marketing_slug': body['marketing_slug'],
'banner_image_url': self._get_banner_image_url(body),
......
......@@ -274,7 +274,6 @@ class XSeriesMarketingSiteDataLoader(AbstractMarketingSiteDataLoader):
data = {
'subtitle': data.get('field_xseries_subtitle_short'),
'category': 'XSeries',
'card_image_url': card_image_url,
'overview': overview,
'video': self.get_or_create_video(video_url)
......
......@@ -14,12 +14,12 @@ from course_discovery.apps.course_metadata.data_loaders.api import (
from course_discovery.apps.course_metadata.data_loaders.tests import JSON
from course_discovery.apps.course_metadata.data_loaders.tests.mixins import ApiClientTestMixin, DataLoaderTestMixin
from course_discovery.apps.course_metadata.models import (
Course, CourseRun, Image, Organization, Seat, Program
Course, CourseRun, Image, Organization, Seat, Program, ProgramType,
)
from course_discovery.apps.course_metadata.tests import mock_data
from course_discovery.apps.course_metadata.tests.factories import (
CourseRunFactory, SeatFactory, ImageFactory, PersonFactory, VideoFactory,
OrganizationFactory, CourseFactory)
CourseRunFactory, SeatFactory, ImageFactory, PersonFactory, VideoFactory, OrganizationFactory, CourseFactory,
)
LOGGER_PATH = 'course_discovery.apps.course_metadata.data_loaders.api.logger'
......@@ -392,9 +392,11 @@ class ProgramsApiDataLoaderTests(ApiClientTestMixin, DataLoaderTestMixin, TestCa
program = Program.objects.get(uuid=AbstractDataLoader.clean_string(body['uuid']), partner=self.partner)
self.assertEqual(program.title, body['name'])
for attr in ('subtitle', 'category', 'status', 'marketing_slug',):
for attr in ('subtitle', 'status', 'marketing_slug',):
self.assertEqual(getattr(program, attr), AbstractDataLoader.clean_string(body[attr]))
self.assertEqual(program.type, ProgramType.objects.get(name='XSeries'))
keys = [org['key'] for org in body['organizations']]
expected_organizations = list(Organization.objects.filter(key__in=keys))
self.assertEqual(keys, [org.key for org in expected_organizations])
......
......@@ -328,7 +328,6 @@ class XSeriesMarketingSiteDataLoaderTests(AbstractMarketingSiteDataLoaderTestMix
self.assertEqual(program.overview, overview)
self.assertEqual(program.subtitle, data.get('field_xseries_subtitle_short'))
self.assertEqual(program.category, 'XSeries')
card_image_url = data.get('field_card_image', {}).get('url')
self.assertEqual(program.card_image_url, card_image_url)
......
......@@ -561,7 +561,7 @@ class Program(TimeStampedModel):
@property
def marketing_url(self):
if self.marketing_slug:
path = '{category}/{slug}'.format(category=self.category, slug=self.marketing_slug)
path = '{type}/{slug}'.format(type=self.type.name.lower(), slug=self.marketing_slug)
return urljoin(self.partner.marketing_site_url_root, path)
return None
......
......@@ -112,7 +112,7 @@ class ProgramIndex(BaseIndex, indexes.Indexable, OrganizationsMixin):
uuid = indexes.CharField(model_attr='uuid')
title = indexes.CharField(model_attr='title')
subtitle = indexes.CharField(model_attr='subtitle')
category = indexes.CharField(model_attr='category', faceted=True)
type = indexes.CharField(model_attr='type__name', faceted=True)
marketing_url = indexes.CharField(null=True)
organizations = indexes.MultiValueField(faceted=True)
authoring_organizations = indexes.MultiValueField(faceted=True)
......
......@@ -173,8 +173,8 @@ class ProgramFactory(factory.django.DjangoModelFactory):
title = factory.Sequence(lambda n: 'test-program-{}'.format(n)) # pylint: disable=unnecessary-lambda
uuid = factory.LazyFunction(uuid4)
subtitle = 'test-subtitle'
category = 'xseries'
status = 'unpublished'
type = factory.SubFactory(ProgramTypeFactory)
status = Program.ProgramStatus.Unpublished
marketing_slug = factory.Sequence(lambda n: 'test-slug-{}'.format(n)) # pylint: disable=unnecessary-lambda
banner_image_url = FuzzyText(prefix='https://example.com/program/banner')
card_image_url = FuzzyText(prefix='https://example.com/program/card')
......
......@@ -269,8 +269,8 @@ class ProgramTests(TestCase):
def test_marketing_url(self):
""" Verify the property creates a complete marketing URL. """
expected = '{root}/{category}/{slug}'.format(root=self.program.partner.marketing_site_url_root.strip('/'),
category=self.program.category, slug=self.program.marketing_slug)
expected = '{root}/{type}/{slug}'.format(root=self.program.partner.marketing_site_url_root.strip('/'),
type=self.program.type.name.lower(), slug=self.program.marketing_slug)
self.assertEqual(self.program.marketing_url, expected)
def test_marketing_url_without_slug(self):
......
{{ object.uuid }}
{{ object.name }}
{{ object.category }}
{{ object.type.name }}
{{ object.status }}
{{ object.marketing_slug|default:'' }}
......
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