Commit 9361f229 by Tyler Hallada Committed by GitHub

AN-8236 Collapse "Upcoming" and "Starting soon" availability (#157)

* Replace "Starting Soon" -> "Upcoming" availability

"Starting Soon" is still stored in the database, but it is collapsed into
the "Upcoming" category in the API view response.

* Test that Starting Soon is unioned with Upcoming
parent 605c8bbc
...@@ -167,7 +167,7 @@ class Command(BaseCommand): ...@@ -167,7 +167,7 @@ class Command(BaseCommand):
course_id=course_id, catalog_course_title='Demo Course', catalog_course='Demo_Course', course_id=course_id, catalog_course_title='Demo Course', catalog_course='Demo_Course',
start_time=timezone.now() - datetime.timedelta(weeks=6), start_time=timezone.now() - datetime.timedelta(weeks=6),
end_time=timezone.now() + datetime.timedelta(weeks=10), end_time=timezone.now() + datetime.timedelta(weeks=10),
pacing_type='self_paced', availability='Current', enrollment_mode=mode, count=count, pacing_type='self_paced', availability='Starting Soon', enrollment_mode=mode, count=count,
cumulative_count=cumulative_count, count_change_7_days=random.randint(-50, 50)) cumulative_count=cumulative_count, count_change_7_days=random.randint(-50, 50))
progress.update(1) progress.update(1)
......
...@@ -22,6 +22,7 @@ class CourseSummariesViewTests(VerifyCourseIdMixin, TestCaseWithAuthentication): ...@@ -22,6 +22,7 @@ class CourseSummariesViewTests(VerifyCourseIdMixin, TestCaseWithAuthentication):
def setUp(self): def setUp(self):
super(CourseSummariesViewTests, self).setUp() super(CourseSummariesViewTests, self).setUp()
self.now = datetime.datetime.utcnow() self.now = datetime.datetime.utcnow()
self.maxDiff = None
def tearDown(self): def tearDown(self):
self.model.objects.all().delete() self.model.objects.all().delete()
...@@ -34,7 +35,7 @@ class CourseSummariesViewTests(VerifyCourseIdMixin, TestCaseWithAuthentication): ...@@ -34,7 +35,7 @@ class CourseSummariesViewTests(VerifyCourseIdMixin, TestCaseWithAuthentication):
query_string = '?{}'.format(urlencode(query_params)) query_string = '?{}'.format(urlencode(query_params))
return '/api/v0/course_summaries/{}'.format(query_string) return '/api/v0/course_summaries/{}'.format(query_string)
def generate_data(self, course_ids=None, modes=None): def generate_data(self, course_ids=None, modes=None, availability='Current'):
"""Generate course summary data for """ """Generate course summary data for """
if course_ids is None: if course_ids is None:
course_ids = CourseSamples.course_ids course_ids = CourseSamples.course_ids
...@@ -47,10 +48,10 @@ class CourseSummariesViewTests(VerifyCourseIdMixin, TestCaseWithAuthentication): ...@@ -47,10 +48,10 @@ class CourseSummariesViewTests(VerifyCourseIdMixin, TestCaseWithAuthentication):
G(self.model, course_id=course_id, catalog_course_title='Title', catalog_course='Catalog', G(self.model, course_id=course_id, catalog_course_title='Title', catalog_course='Catalog',
start_time=datetime.datetime(2016, 10, 11, tzinfo=pytz.utc), start_time=datetime.datetime(2016, 10, 11, tzinfo=pytz.utc),
end_time=datetime.datetime(2016, 12, 18, tzinfo=pytz.utc), end_time=datetime.datetime(2016, 12, 18, tzinfo=pytz.utc),
pacing_type='instructor', availability='current', enrollment_mode=mode, pacing_type='instructor', availability=availability, enrollment_mode=mode,
count=5, cumulative_count=10, count_change_7_days=1, create=self.now,) count=5, cumulative_count=10, count_change_7_days=1, create=self.now,)
def expected_summary(self, course_id, modes=None): def expected_summary(self, course_id, modes=None, availability='Current'):
"""Expected summary information for a course and modes to populate with data.""" """Expected summary information for a course and modes to populate with data."""
if modes is None: if modes is None:
modes = enrollment_modes.ALL modes = enrollment_modes.ALL
...@@ -66,7 +67,7 @@ class CourseSummariesViewTests(VerifyCourseIdMixin, TestCaseWithAuthentication): ...@@ -66,7 +67,7 @@ class CourseSummariesViewTests(VerifyCourseIdMixin, TestCaseWithAuthentication):
'start_date': datetime.datetime(2016, 10, 11, tzinfo=pytz.utc).strftime(settings.DATETIME_FORMAT), 'start_date': datetime.datetime(2016, 10, 11, tzinfo=pytz.utc).strftime(settings.DATETIME_FORMAT),
'end_date': datetime.datetime(2016, 12, 18, tzinfo=pytz.utc).strftime(settings.DATETIME_FORMAT), 'end_date': datetime.datetime(2016, 12, 18, tzinfo=pytz.utc).strftime(settings.DATETIME_FORMAT),
'pacing_type': 'instructor', 'pacing_type': 'instructor',
'availability': 'current', 'availability': availability,
'enrollment_modes': {}, 'enrollment_modes': {},
'count': count_factor * num_modes, 'count': count_factor * num_modes,
'cumulative_count': cumulative_count_factor * num_modes, 'cumulative_count': cumulative_count_factor * num_modes,
...@@ -96,10 +97,14 @@ class CourseSummariesViewTests(VerifyCourseIdMixin, TestCaseWithAuthentication): ...@@ -96,10 +97,14 @@ class CourseSummariesViewTests(VerifyCourseIdMixin, TestCaseWithAuthentication):
}) })
return summary return summary
def all_expected_summaries(self, modes=None): def all_expected_summaries(self, modes=None, course_ids=None, availability='Current'):
if course_ids is None:
course_ids = CourseSamples.course_ids
if modes is None: if modes is None:
modes = enrollment_modes.ALL modes = enrollment_modes.ALL
return [self.expected_summary(course_id, modes) for course_id in CourseSamples.course_ids]
return [self.expected_summary(course_id, modes, availability) for course_id in course_ids]
@ddt.data( @ddt.data(
None, None,
...@@ -162,3 +167,15 @@ class CourseSummariesViewTests(VerifyCourseIdMixin, TestCaseWithAuthentication): ...@@ -162,3 +167,15 @@ class CourseSummariesViewTests(VerifyCourseIdMixin, TestCaseWithAuthentication):
def test_bad_course_id(self, course_ids): def test_bad_course_id(self, course_ids):
response = self.authenticated_get(self.path(course_ids=course_ids)) response = self.authenticated_get(self.path(course_ids=course_ids))
self.verify_bad_course_id(response) self.verify_bad_course_id(response)
def test_collapse_upcoming(self):
self.generate_data(availability='Starting Soon')
self.generate_data(course_ids=['foo/bar/baz'], availability='Upcoming')
response = self.authenticated_get(self.path())
self.assertEquals(response.status_code, 200)
expected_summaries = self.all_expected_summaries(availability='Upcoming')
expected_summaries.extend(self.all_expected_summaries(course_ids=['foo/bar/baz'],
availability='Upcoming'))
self.assertItemsEqual(response.data, expected_summaries)
...@@ -117,6 +117,10 @@ class CourseSummariesView(generics.ListAPIView): ...@@ -117,6 +117,10 @@ class CourseSummariesView(generics.ListAPIView):
for count_key in count_fields: for count_key in count_fields:
prof_mode[count_key] = prof_mode.get(count_key, 0) + prof_no_id_mode.pop(count_key, 0) prof_mode[count_key] = prof_mode.get(count_key, 0) + prof_no_id_mode.pop(count_key, 0)
# AN-8236 replace "Starting Soon" to "Upcoming" availability to collapse the two into one value
if item['availability'] == 'Starting Soon':
item['availability'] = 'Upcoming'
formatted_data.append(item) formatted_data.append(item)
return formatted_data return formatted_data
......
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