def test_load_existing(self):
     course_id = self.course_enrollments[0].course_id
     assert CourseDailyMetrics.objects.count() == 0
     cdm, created = pipeline_cdm.CourseDailyMetricsLoader(course_id).load()
     assert cdm and created
     assert CourseDailyMetrics.objects.count() == 1
     cdm2, created2 = pipeline_cdm.CourseDailyMetricsLoader(course_id).load()
     assert cdm2 and not created2
     assert cdm2.id == cdm.id
     assert CourseDailyMetrics.objects.count() == 1
예제 #2
0
 def test_load_existing(self, monkeypatch):
     with mock.patch.dict('figures.helpers.settings.FEATURES',
                          {'FIGURES_IS_MULTISITE': False}):
         course_id = self.course_enrollments[0].course_id
         assert CourseDailyMetrics.objects.count() == 0
         cdm, created = pipeline_cdm.CourseDailyMetricsLoader(
             course_id).load()
         assert cdm and created
         assert CourseDailyMetrics.objects.count() == 1
         cdm2, created2 = pipeline_cdm.CourseDailyMetricsLoader(
             course_id).load()
         assert cdm2 and not created2
         assert cdm2.id == cdm.id
         assert CourseDailyMetrics.objects.count() == 1
예제 #3
0
    def test_load(self, monkeypatch):
        course_id = "course-v1:certs-appsembler+001+2019"

        def get_data(self, date_for):
            return {
                'average_progress':
                1.0,
                'num_learners_completed':
                2,
                'enrollment_count':
                3,
                'average_days_to_complete':
                0.0,
                'course_id':
                CourseLocator(u'certs-appsembler', u'001', u'2019', None,
                              None),
                'date_for':
                date_for,
                'active_learners_today':
                0
            }

        with mock.patch.dict('figures.helpers.settings.FEATURES',
                             {'FIGURES_IS_MULTISITE': False}):
            monkeypatch.setattr(
                figures.pipeline.course_daily_metrics.CourseDailyMetricsLoader,
                'get_data', get_data)
            cdm, created = pipeline_cdm.CourseDailyMetricsLoader(
                course_id).load()
            assert cdm and created
예제 #4
0
def seed_course_daily_metrics_for_course(course_id):
    end_date = LAST_DAY
    start_date = days_from(end_date, -DAYS_BACK)

    for dt in rrule(DAILY, dtstart=start_date, until=end_date):
        if VERBOSE:
            print('populating day {} for course {}'.format(dt, course_id))
        cdm, created = pipeline_cdm.CourseDailyMetricsLoader(course_id).load(
            date_for=dt, force_update=True)
예제 #5
0
 def test_average_progress_yesterday_or_prior(self, monkeypatch, days_back,
                                              expected_val):
     monkeypatch.setattr(figures.pipeline.course_daily_metrics,
                         'bulk_calculate_course_progress_data',
                         lambda **_kwargs: dict(average_progress=1))
     course_id = self.course_enrollments[0].course_id
     date_for = datetime.datetime.today().date() - relativedelta(
         days=days_back)
     cdm, created = pipeline_cdm.CourseDailyMetricsLoader(course_id).load(
         date_for=date_for)
     assert cdm.average_progress == expected_val
    def test_load_invalid_data(self, monkeypatch, average_progress):

        course_id = self.course_enrollments[0].course_id
        monkeypatch.setattr(figures.pipeline.course_daily_metrics,
                            'bulk_calculate_course_progress_data',
                            lambda **_kwargs: dict(average_progress=average_progress))

        with pytest.raises(ValidationError) as execinfo:
            assert CourseDailyMetrics.objects.count() == 0
            cdm, created = pipeline_cdm.CourseDailyMetricsLoader(course_id).load()
            assert CourseDailyMetrics.objects.count() == 0
            assert 'average_progress' in execinfo.value.message_dict
    def test_load_invalid_data(self, monkeypatch, average_progress):

        def mock_get_average_progress(course_id, date_for, course_enrollments):
            return average_progress

        course_id = self.course_enrollments[0].course_id
        monkeypatch.setattr(
            figures.pipeline.course_daily_metrics,
            'get_average_progress',
            mock_get_average_progress)
        with pytest.raises(ValidationError) as execinfo:
            assert CourseDailyMetrics.objects.count() == 0
            cdm, created = pipeline_cdm.CourseDailyMetricsLoader(course_id).load()
            assert CourseDailyMetrics.objects.count() == 0
            assert 'average_progress' in execinfo.value.message_dict
    def test_load(self, monkeypatch):
        # pick a course, any course (we'll just pick the first, but doesn't matter which)
        if OPENEDX_RELEASE == GINKGO:
            course_id = self.course_enrollments[0].course_id
        else:
            course_id = self.course_enrollments[0].course.id

        def get_data(self, date_for):
            return {
                'average_progress': 1.0,
                'num_learners_completed': 2,
                'enrollment_count': 3,
                'average_days_to_complete': 0.0,
                'course_id': course_id,
                'date_for': date_for,
                'active_learners_today': 0}

        monkeypatch.setattr(
            figures.pipeline.course_daily_metrics.CourseDailyMetricsLoader,
            'get_data', get_data)
        cdm, created = pipeline_cdm.CourseDailyMetricsLoader(course_id).load()
        assert cdm and created
예제 #9
0
 def test_load(self):
     course_id = self.course_enrollments[0].course_id
     results = pipeline_cdm.CourseDailyMetricsLoader(course_id).load()
     assert results