Skip to content
This repository was archived by the owner on May 1, 2024. It is now read-only.

Commit 9361f22

Browse files
authored
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
1 parent 605c8bb commit 9361f22

3 files changed

Lines changed: 28 additions & 7 deletions

File tree

analytics_data_api/management/commands/generate_fake_course_data.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ def generate_daily_data(self, course_id, start_date, end_date):
167167
course_id=course_id, catalog_course_title='Demo Course', catalog_course='Demo_Course',
168168
start_time=timezone.now() - datetime.timedelta(weeks=6),
169169
end_time=timezone.now() + datetime.timedelta(weeks=10),
170-
pacing_type='self_paced', availability='Current', enrollment_mode=mode, count=count,
170+
pacing_type='self_paced', availability='Starting Soon', enrollment_mode=mode, count=count,
171171
cumulative_count=cumulative_count, count_change_7_days=random.randint(-50, 50))
172172

173173
progress.update(1)

analytics_data_api/v0/tests/views/test_course_summaries.py

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ class CourseSummariesViewTests(VerifyCourseIdMixin, TestCaseWithAuthentication):
2222
def setUp(self):
2323
super(CourseSummariesViewTests, self).setUp()
2424
self.now = datetime.datetime.utcnow()
25+
self.maxDiff = None
2526

2627
def tearDown(self):
2728
self.model.objects.all().delete()
@@ -34,7 +35,7 @@ def path(self, course_ids=None, fields=None):
3435
query_string = '?{}'.format(urlencode(query_params))
3536
return '/api/v0/course_summaries/{}'.format(query_string)
3637

37-
def generate_data(self, course_ids=None, modes=None):
38+
def generate_data(self, course_ids=None, modes=None, availability='Current'):
3839
"""Generate course summary data for """
3940
if course_ids is None:
4041
course_ids = CourseSamples.course_ids
@@ -47,10 +48,10 @@ def generate_data(self, course_ids=None, modes=None):
4748
G(self.model, course_id=course_id, catalog_course_title='Title', catalog_course='Catalog',
4849
start_time=datetime.datetime(2016, 10, 11, tzinfo=pytz.utc),
4950
end_time=datetime.datetime(2016, 12, 18, tzinfo=pytz.utc),
50-
pacing_type='instructor', availability='current', enrollment_mode=mode,
51+
pacing_type='instructor', availability=availability, enrollment_mode=mode,
5152
count=5, cumulative_count=10, count_change_7_days=1, create=self.now,)
5253

53-
def expected_summary(self, course_id, modes=None):
54+
def expected_summary(self, course_id, modes=None, availability='Current'):
5455
"""Expected summary information for a course and modes to populate with data."""
5556
if modes is None:
5657
modes = enrollment_modes.ALL
@@ -66,7 +67,7 @@ def expected_summary(self, course_id, modes=None):
6667
'start_date': datetime.datetime(2016, 10, 11, tzinfo=pytz.utc).strftime(settings.DATETIME_FORMAT),
6768
'end_date': datetime.datetime(2016, 12, 18, tzinfo=pytz.utc).strftime(settings.DATETIME_FORMAT),
6869
'pacing_type': 'instructor',
69-
'availability': 'current',
70+
'availability': availability,
7071
'enrollment_modes': {},
7172
'count': count_factor * num_modes,
7273
'cumulative_count': cumulative_count_factor * num_modes,
@@ -96,10 +97,14 @@ def expected_summary(self, course_id, modes=None):
9697
})
9798
return summary
9899

99-
def all_expected_summaries(self, modes=None):
100+
def all_expected_summaries(self, modes=None, course_ids=None, availability='Current'):
101+
if course_ids is None:
102+
course_ids = CourseSamples.course_ids
103+
100104
if modes is None:
101105
modes = enrollment_modes.ALL
102-
return [self.expected_summary(course_id, modes) for course_id in CourseSamples.course_ids]
106+
107+
return [self.expected_summary(course_id, modes, availability) for course_id in course_ids]
103108

104109
@ddt.data(
105110
None,
@@ -162,3 +167,15 @@ def test_no_matching_courses(self):
162167
def test_bad_course_id(self, course_ids):
163168
response = self.authenticated_get(self.path(course_ids=course_ids))
164169
self.verify_bad_course_id(response)
170+
171+
def test_collapse_upcoming(self):
172+
self.generate_data(availability='Starting Soon')
173+
self.generate_data(course_ids=['foo/bar/baz'], availability='Upcoming')
174+
response = self.authenticated_get(self.path())
175+
self.assertEquals(response.status_code, 200)
176+
177+
expected_summaries = self.all_expected_summaries(availability='Upcoming')
178+
expected_summaries.extend(self.all_expected_summaries(course_ids=['foo/bar/baz'],
179+
availability='Upcoming'))
180+
181+
self.assertItemsEqual(response.data, expected_summaries)

analytics_data_api/v0/views/course_summaries.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,10 @@ def group_by_mode(self, queryset):
117117
for count_key in count_fields:
118118
prof_mode[count_key] = prof_mode.get(count_key, 0) + prof_no_id_mode.pop(count_key, 0)
119119

120+
# AN-8236 replace "Starting Soon" to "Upcoming" availability to collapse the two into one value
121+
if item['availability'] == 'Starting Soon':
122+
item['availability'] = 'Upcoming'
123+
120124
formatted_data.append(item)
121125

122126
return formatted_data

0 commit comments

Comments
 (0)