Commit cd13fc88 by Clinton Blackburn

Merge pull request #40 from edx/mode-merge

Merging Audit and Honor Enrollment Modes
parents 9b23fed0 e5cb1b99
......@@ -3,6 +3,9 @@ from rest_framework import serializers
from analytics_data_api.constants import enrollment_modes, genders
from analytics_data_api.v0 import models
# Below are the enrollment modes supported by this API. The audit and honor enrollment modes are merged into honor.
ENROLLMENT_MODES = [enrollment_modes.HONOR, enrollment_modes.PROFESSIONAL, enrollment_modes.VERIFIED]
class CourseActivityByWeekSerializer(serializers.ModelSerializer):
"""
......@@ -110,7 +113,7 @@ class CourseEnrollmentModeDailySerializer(BaseCourseEnrollmentModelSerializer):
fields = super(CourseEnrollmentModeDailySerializer, self).get_default_fields()
# Create a field for each enrollment mode
for mode in enrollment_modes.ALL:
for mode in ENROLLMENT_MODES:
fields[mode] = serializers.IntegerField(required=True, default=0)
# Create a transform method for each field
......@@ -125,7 +128,7 @@ class CourseEnrollmentModeDailySerializer(BaseCourseEnrollmentModelSerializer):
model = models.CourseEnrollmentDaily
# Declare the dynamically-created fields here as well so that they will be picked up by Swagger.
fields = ['course_id', 'date', 'count', 'created'] + enrollment_modes.ALL
fields = ['course_id', 'date', 'count', 'created'] + ENROLLMENT_MODES
class CountrySerializer(serializers.Serializer):
......
......@@ -459,6 +459,10 @@ class CourseEnrollmentModeViewTests(CourseEnrollmentViewTestCaseMixin, DefaultFi
G(self.model, course_id=course_id, date=self.date, mode=mode)
def serialize_enrollment(self, enrollment):
# Treat audit as honor
if enrollment.mode is enrollment_modes.AUDIT:
enrollment.mode = enrollment_modes.HONOR
return {
u'course_id': enrollment.course_id,
u'date': enrollment.date.strftime(settings.DATE_FORMAT),
......@@ -475,6 +479,10 @@ class CourseEnrollmentModeViewTests(CourseEnrollmentViewTestCaseMixin, DefaultFi
total += ce.count
response[ce.mode] = ce.count
# Merge the honor and audit modes
response[enrollment_modes.HONOR] += response[enrollment_modes.AUDIT]
del response[enrollment_modes.AUDIT]
response[u'count'] = total
return [response]
......@@ -489,12 +497,13 @@ class CourseEnrollmentModeViewTests(CourseEnrollmentViewTestCaseMixin, DefaultFi
modes = list(enrollment_modes.ALL)
modes.remove(enrollment_modes.AUDIT)
expected = self.serialize_enrollment(enrollment)
expected[u'count'] = 1
expected = {}
for mode in modes:
expected[mode] = 0
expected.update(self.serialize_enrollment(enrollment))
expected[u'count'] = 1
expected = [expected]
self.assertViewReturnsExpectedData(expected)
......
......@@ -9,6 +9,7 @@ from django.http import Http404
from django.utils.timezone import make_aware, utc
from rest_framework import generics
from opaque_keys.edx.keys import CourseKey
from analytics_data_api.constants import enrollment_modes
from analytics_data_api.v0 import models, serializers
......@@ -381,6 +382,9 @@ class CourseEnrollmentModeView(BaseCourseEnrollmentView):
item[u'created'] = max(enrollment.created, item[u'created']) if item[u'created'] else enrollment.created
total += enrollment.count
# Merge audit and honor
item[enrollment_modes.HONOR] = item.get(enrollment_modes.HONOR, 0) + item.pop(enrollment_modes.AUDIT, 0)
item[u'count'] = total
formatted_data.append(item)
......
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