class EngagementContentView(EngagementTemplateView): template_name = 'courses/engagement_content.html' page_title = _('Engagement Content') page_name = 'engagement_content' active_secondary_nav_item = 'content' # Translators: Do not translate UTC. update_message = _('Course engagement data was last updated %(update_date)s at %(update_time)s UTC.') def get_context_data(self, **kwargs): context = super(EngagementContentView, self).get_context_data(**kwargs) self.presenter = CourseEngagementActivityPresenter(self.course_id) summary = None trends = None last_updated = None try: summary, trends = self.presenter.get_summary_and_trend_data() last_updated = summary['last_updated'] except NotFoundError: logger.error("Failed to retrieve engagement content data for %s.", self.course_id) context['js_data']['course']['engagementTrends'] = trends context.update({ 'summary': summary, 'update_message': self.get_last_updated_message(last_updated) }) context['page_data'] = self.get_page_data(context) return context
class EngagementContentView(EngagementTemplateView): template_name = 'courses/engagement_content.html' page_title = _('Engagement Content') page_name = 'engagement_content' active_secondary_nav_item = 'content' # Translators: Do not translate UTC. update_message = _( 'Course engagement data was last updated %(update_date)s at %(update_time)s UTC.' ) def get_context_data(self, **kwargs): context = super(EngagementContentView, self).get_context_data(**kwargs) self.presenter = CourseEngagementActivityPresenter(self.course_id) summary = None trends = None last_updated = None try: summary, trends = self.presenter.get_summary_and_trend_data() last_updated = summary['last_updated'] except NotFoundError: logger.error("Failed to retrieve engagement content data for %s.", self.course_id) context['js_data']['course']['engagementTrends'] = trends context.update({ 'summary': summary, 'update_message': self.get_last_updated_message(last_updated) }) context['page_data'] = self.get_page_data(context) return context
def get_context_data(self, **kwargs): context = super(EngagementContentView, self).get_context_data(**kwargs) self.presenter = CourseEngagementActivityPresenter(self.course_id) summary = None trends = None last_updated = None try: summary, trends = self.presenter.get_summary_and_trend_data() last_updated = summary['last_updated'] except NotFoundError: logger.error("Failed to retrieve engagement content data for %s.", self.course_id) context['js_data']['course']['engagementTrends'] = trends context.update({ 'summary': summary, 'update_message': self.get_last_updated_message(last_updated) }) context['page_data'] = self.get_page_data(context) return context
def setUp(self): super(CourseEngagementActivityPresenterTests, self).setUp() self.course_id = 'this/course/id' self.presenter = CourseEngagementActivityPresenter(self.course_id)
class CourseEngagementActivityPresenterTests(SwitchMixin, TestCase): def setUp(self): super(CourseEngagementActivityPresenterTests, self).setUp() self.course_id = 'this/course/id' self.presenter = CourseEngagementActivityPresenter(self.course_id) def get_expected_trends(self, include_forum_data): trends = [ { 'weekEnding': '2014-08-31', AT.ANY: 1000, AT.ATTEMPTED_PROBLEM: 0, AT.PLAYED_VIDEO: 10000 }, { 'weekEnding': '2014-09-07', AT.ANY: 100, AT.ATTEMPTED_PROBLEM: 301, AT.PLAYED_VIDEO: 1000, } ] if include_forum_data: trends[0][AT.POSTED_FORUM] = 45 trends[1][AT.POSTED_FORUM] = 0 return trends def get_expected_trends_small(self, include_forum_data): trends = self.get_expected_trends(include_forum_data) trends[0].update({ AT.ANY: 0, AT.ATTEMPTED_PROBLEM: 0, AT.PLAYED_VIDEO: 0 }) if include_forum_data: trends[0][AT.POSTED_FORUM] = 0 return trends def assertSummaryAndTrendsValid(self, include_forum_activity, expected_trends): self.toggle_switch('show_engagement_forum_activity', include_forum_activity) summary, trends = self.presenter.get_summary_and_trend_data() # Validate the trends self.assertEqual(len(expected_trends), len(trends)) self.assertDictEqual(expected_trends[0], trends[0]) self.assertDictEqual(expected_trends[1], trends[1]) # Validate the summary expected_summary = utils.mock_course_activity()[1] del expected_summary['created'] del expected_summary['interval_end'] del expected_summary['course_id'] if not include_forum_activity: del expected_summary[AT.POSTED_FORUM] expected_summary['last_updated'] = utils.CREATED_DATETIME self.assertDictEqual(summary, expected_summary) @mock.patch('analyticsclient.course.Course.activity', mock.Mock(side_effect=utils.mock_course_activity)) def test_get_summary_and_trend_data(self): self.assertSummaryAndTrendsValid(False, self.get_expected_trends(False)) self.assertSummaryAndTrendsValid(True, self.get_expected_trends(True)) @mock.patch('analyticsclient.course.Course.activity') def test_get_summary_and_trend_data_small(self, mock_activity): api_trend = [utils.mock_course_activity()[-1]] mock_activity.return_value = api_trend self.assertSummaryAndTrendsValid(False, self.get_expected_trends_small(False)) self.assertSummaryAndTrendsValid(True, self.get_expected_trends_small(True))