Commit 428843ba by Renzo Lucioni Committed by GitHub

Delete reduced program data switch (#379)

This switch is no longer necessary.

ECOM-5791
parent 450c9313
from django.db import migrations
def delete_switch(apps, schema_editor):
"""Delete the reduced_program_data switch."""
Switch = apps.get_model('waffle', 'Switch')
Switch.objects.filter(name='reduced_program_data').delete()
class Migration(migrations.Migration):
dependencies = [
('waffle', '0001_initial'),
('api', '0001_create_reduced_program_data_switch'),
]
operations = [
migrations.RunPython(delete_switch, reverse_code=migrations.RunPython.noop),
]
......@@ -8,7 +8,8 @@ from rest_framework.test import APIRequestFactory
from course_discovery.apps.api.serializers import (
CatalogSerializer, CourseWithProgramsSerializer, CourseSerializerExcludingClosedRuns,
CourseRunWithProgramsSerializer, ProgramSerializer, FlattenedCourseRunWithCourseSerializer
CourseRunWithProgramsSerializer, MinimalProgramSerializer, ProgramSerializer,
FlattenedCourseRunWithCourseSerializer,
)
......@@ -41,7 +42,13 @@ class SerializationMixin(object):
return self._serialize_object(CourseRunWithProgramsSerializer, run, many, format, extra_context)
def serialize_program(self, program, many=False, format=None, extra_context=None):
return self._serialize_object(ProgramSerializer, program, many, format, extra_context)
return self._serialize_object(
MinimalProgramSerializer if many else ProgramSerializer,
program,
many,
format,
extra_context
)
def serialize_catalog_course(self, course, many=False, format=None, extra_context=None):
return self._serialize_object(CourseSerializerExcludingClosedRuns, course, many, format, extra_context)
......
......@@ -2,14 +2,13 @@ import ddt
from django.core.urlresolvers import reverse
from rest_framework.test import APITestCase, APIRequestFactory
from course_discovery.apps.api.serializers import MinimalProgramSerializer, ProgramSerializer
from course_discovery.apps.api.serializers import MinimalProgramSerializer
from course_discovery.apps.api.v1.views import ProgramViewSet
from course_discovery.apps.api.v1.tests.test_views.mixins import SerializationMixin
from course_discovery.apps.core.tests.factories import USER_PASSWORD, UserFactory
from course_discovery.apps.core.tests.helpers import make_image_file
from course_discovery.apps.course_metadata.choices import ProgramStatus
from course_discovery.apps.course_metadata.models import Program
from course_discovery.apps.course_metadata.tests import toggle_switch
from course_discovery.apps.course_metadata.tests.factories import (
CourseFactory, CourseRunFactory, VideoFactory, OrganizationFactory, PersonFactory, ProgramFactory,
CorporateEndorsementFactory, EndorsementFactory, JobOutlookItemFactory, ExpectedLearningItemFactory
......@@ -114,14 +113,14 @@ class ProgramViewSetTests(SerializationMixin, APITestCase):
""" Verify the endpoint returns a list of all programs. """
expected = [self.create_program() for __ in range(3)]
expected.reverse()
self.assert_list_results(self.list_path, expected, 36)
self.assert_list_results(self.list_path, expected, 11)
def test_filter_by_type(self):
""" Verify that the endpoint filters programs to those of a given type. """
program_type_name = 'foo'
program = ProgramFactory(type__name=program_type_name)
url = self.list_path + '?type=' + program_type_name
self.assert_list_results(url, [program], 14)
self.assert_list_results(url, [program], 8)
url = self.list_path + '?type=bar'
self.assert_list_results(url, [], 4)
......@@ -136,11 +135,11 @@ class ProgramViewSetTests(SerializationMixin, APITestCase):
# Create a third program, which should be filtered out.
ProgramFactory()
self.assert_list_results(url, expected, 14)
self.assert_list_results(url, expected, 8)
@ddt.data(
(ProgramStatus.Unpublished, False, 4),
(ProgramStatus.Active, True, 14),
(ProgramStatus.Active, True, 8),
)
@ddt.unpack
def test_filter_by_marketable(self, status, is_marketable, expected_query_count):
......@@ -158,17 +157,8 @@ class ProgramViewSetTests(SerializationMixin, APITestCase):
""" Verify the endpoint returns marketing URLs without UTM parameters. """
url = self.list_path + '?exclude_utm=1'
program = self.create_program()
self.assert_list_results(url, [program], 32, extra_context={'exclude_utm': 1})
self.assert_list_results(url, [program], 11, extra_context={'exclude_utm': 1})
@ddt.data(True, False)
def test_minimal_serializer_use(self, is_minimal):
def test_minimal_serializer_use(self):
""" Verify that the list view uses the minimal serializer. """
toggle_switch('reduced_program_data', active=is_minimal)
action_serializer_mapping = {
'list': MinimalProgramSerializer if is_minimal else ProgramSerializer,
'detail': ProgramSerializer,
}
for action, serializer in action_serializer_mapping.items():
self.assertEqual(ProgramViewSet(action=action).get_serializer_class(), serializer)
self.assertEqual(ProgramViewSet(action='list').get_serializer_class(), MinimalProgramSerializer)
......@@ -22,7 +22,6 @@ from rest_framework.exceptions import PermissionDenied, ParseError
from rest_framework.filters import DjangoFilterBackend
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
import waffle
from course_discovery.apps.api import filters
from course_discovery.apps.api import serializers
......@@ -420,7 +419,7 @@ class ProgramViewSet(viewsets.ReadOnlyModelViewSet):
filter_class = filters.ProgramFilter
def get_serializer_class(self):
if self.action == 'list' and waffle.switch_is_active('reduced_program_data'):
if self.action == 'list':
return serializers.MinimalProgramSerializer
return serializers.ProgramSerializer
......
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