Commit 1c067950 by Simon Chen

ECOM-5031 initial attempt at creating the programs api endpoint

parent 9e60a62b
...@@ -262,9 +262,13 @@ class ContainedCoursesSerializer(serializers.Serializer): ...@@ -262,9 +262,13 @@ class ContainedCoursesSerializer(serializers.Serializer):
class ProgramSerializer(serializers.ModelSerializer): class ProgramSerializer(serializers.ModelSerializer):
courses = CourseSerializer(many=True)
authoring_organizations = OrganizationSerializer(many=True)
class Meta: class Meta:
model = Program model = Program
fields = ('uuid', 'title', 'subtitle', 'category', 'marketing_slug', 'marketing_url', 'card_image_url',) fields = ('uuid', 'title', 'subtitle', 'category', 'marketing_slug', 'marketing_url', 'card_image_url',
'banner_image_url', 'authoring_organizations', 'courses',)
read_only_fields = ('uuid', 'marketing_url',) read_only_fields = ('uuid', 'marketing_url',)
......
...@@ -171,8 +171,11 @@ class CourseRunSerializerTests(TestCase): ...@@ -171,8 +171,11 @@ class CourseRunSerializerTests(TestCase):
class ProgramSerializerTests(TestCase): class ProgramSerializerTests(TestCase):
def test_data(self): def test_data(self):
program = ProgramFactory() request = make_request()
serializer = ProgramSerializer(program) org_list = OrganizationFactory.create_batch(1)
course_list = CourseFactory.create_batch(3)
program = ProgramFactory(authoring_organizations=org_list, courses=course_list)
serializer = ProgramSerializer(program, context={'request': request})
expected = { expected = {
'uuid': str(program.uuid), 'uuid': str(program.uuid),
...@@ -182,7 +185,11 @@ class ProgramSerializerTests(TestCase): ...@@ -182,7 +185,11 @@ class ProgramSerializerTests(TestCase):
'marketing_slug': program.marketing_slug, 'marketing_slug': program.marketing_slug,
'marketing_url': program.marketing_url, 'marketing_url': program.marketing_url,
'card_image_url': program.card_image_url, 'card_image_url': program.card_image_url,
'banner_image_url': program.banner_image_url,
'authoring_organizations': OrganizationSerializer(program.authoring_organizations, many=True).data,
'courses': CourseSerializer(program.courses, many=True, context={'request': request}).data,
} }
self.assertDictEqual(serializer.data, expected) self.assertDictEqual(serializer.data, expected)
......
...@@ -201,6 +201,16 @@ class ProgramFactory(factory.django.DjangoModelFactory): ...@@ -201,6 +201,16 @@ class ProgramFactory(factory.django.DjangoModelFactory):
for course_run in extracted: for course_run in extracted:
self.excluded_course_runs.add(course_run) self.excluded_course_runs.add(course_run)
@factory.post_generation
def authoring_organizations(self, create, extracted, **kwargs):
if not create: # pragma: no cover
# Simple build, do nothing.
return
if extracted:
for organization in extracted:
self.authoring_organizations.add(organization)
class AbstractSocialNetworkModelFactory(factory.DjangoModelFactory): class AbstractSocialNetworkModelFactory(factory.DjangoModelFactory):
type = FuzzyChoice([name for name, __ in AbstractSocialNetworkModel.SOCIAL_NETWORK_CHOICES]) type = FuzzyChoice([name for name, __ in AbstractSocialNetworkModel.SOCIAL_NETWORK_CHOICES])
......
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