示例#1
0
def create_site_daily_metrics_data(site, start_date, end_date):
    '''
    NOTE: We can generalize this and the `create_course_daily_metrics_data`
    function with considering that the course mertrics creation method can
    assign a course id. When we become site-aware, then the site metrics will
    also need to be able to assign a site identifier
    '''
    def incr_func(key):
        return dict(
            cumulative_active_user_count=2,
            todays_active_user_count=2,
            total_user_count=5,
            course_count=1,
            total_enrollment_count=3,
        ).get(key, 0)

    # Initial values
    data = dict(
        cumulative_active_user_count=50,
        todays_active_user_count=10,
        total_user_count=5,
        course_count=5,
        total_enrollment_count=100,
    )
    metrics = []
    for dt in rrule(DAILY, dtstart=start_date, until=end_date):
        metrics.append(SiteDailyMetricsFactory(date_for=dt, site=site, **data))
        data.update(
            {key: val + incr_func(key)
             for key, val in six.iteritems(data)})
    return metrics
    def setup(self, db):
        self.date_for = datetime.date(2018, 10, 1)
        self.site = Site.objects.first()
        self.users = [
            UserFactory(date_joined=as_datetime(self.date_for -
                                                datetime.timedelta(days=60)))
            for i in range(0, 3)
        ]
        self.course_overviews = [
            CourseOverviewFactory(
                created=as_datetime(self.date_for -
                                    datetime.timedelta(days=60)))
            for i in range(0, 3)
        ]
        self.cdm_recs = [
            CourseDailyMetricsFactory(site=self.site,
                                      date_for=self.date_for,
                                      **cdm) for cdm in CDM_INPUT_TEST_DATA
        ]
        self.prev_day_sdm = SiteDailyMetricsFactory(site=self.site,
                                                    date_for=prev_day(
                                                        self.date_for),
                                                    **SDM_DATA[1])

        if is_multisite():
            self.organization = OrganizationFactory(sites=[self.site])
            for co in self.course_overviews:
                OrganizationCourseFactory(organization=self.organization,
                                          course_id=str(co.id))
            if organizations_support_sites():
                for user in self.users:
                    UserOrganizationMappingFactory(
                        user=user, organization=self.organization)
 def test_get_previous_cumulative_active_user_count(self, prev_day_data, expected):
     if prev_day_data:
         SiteDailyMetricsFactory(
             date_for=prev_day(self.date_for),
             **prev_day_data)
     actual = pipeline_sdm.get_previous_cumulative_active_user_count(
         date_for=self.date_for)
     assert actual == expected
 def test_get_previous_cumulative_active_user_count_not_yesterday(self):
     prior_date = days_from(self.date_for, -5)
     prior_sdm = SiteDailyMetricsFactory(site=self.site,
                                         date_for=prior_date,
                                         **SDM_DATA[1])
     actual = pipeline_sdm.get_previous_cumulative_active_user_count(
         site=self.site, date_for=self.date_for)
     assert prior_sdm.cumulative_active_user_count > 0
     assert actual == prior_sdm.cumulative_active_user_count
def test_get_site_mau_history_metrics_basic(db, monkeypatch):
    """Simple data, skipping doing a fixture for now

    Expected data:
        {'current_month': 12,
         'history': [{'period': '2019/12', 'value': 6},
                     {'period': '2020/01', 'value': 7},
                     {'period': '2020/02', 'value': 8},
                     {'period': '2020/03', 'value': 9},
                     {'period': '2020/04', 'value': 10},
                     {'period': '2020/05', 'value': 11},
                     {'period': '2020/06', 'value': 12}]}

    TODO: We want to revisit both this test and the function under test
    """
    all_months_back = 12
    months_back = 6
    mock_today = date(year=2020, month=6, day=1)
    last_month = mock_today - relativedelta(months=1)
    freezer = freeze_time(mock_today)
    freezer.start()

    start_month = mock_today - relativedelta(months=all_months_back)
    smm = []
    our_site = SiteFactory()
    other_site = SiteFactory()

    for site in [our_site, other_site]:
        for counter, dt in enumerate(
                rrule(freq=MONTHLY, dtstart=start_month, until=last_month)):
            month_for = date(year=dt.year, month=dt.month, day=1)
            smm.append(
                SiteMonthlyMetricsFactory(site=site,
                                          month_for=month_for,
                                          active_user_count=counter))

    current_month_active = 42
    SiteDailyMetricsFactory(site=our_site,
                            date_for=mock_today - relativedelta(day=2),
                            mau=current_month_active)

    data = get_site_mau_history_metrics(site=our_site, months_back=months_back)

    freezer.stop()

    assert data['current_month'] == current_month_active
    for rec in data['history'][:-1]:
        year, month = [int(val) for val in rec['period'].split('/')]
        month_for = date(year=year, month=month, day=1)
        obj = SiteMonthlyMetrics.objects.get(site=our_site,
                                             month_for=month_for)
        assert obj.active_user_count == rec['value']
        assert obj.site == our_site
示例#6
0
    def setup(self, db):
        '''

        '''
        self.site = Site.objects.first()
        self.date_fields = set([
            'date_for',
            'created',
            'modified',
        ])
        self.expected_results_keys = set(
            [o.name for o in SiteDailyMetrics._meta.fields])
        self.site_daily_metrics = SiteDailyMetricsFactory()
        self.serializer = SiteDailyMetricsSerializer(
            instance=self.site_daily_metrics)
 def setup(self, db):
     self.date_for = datetime.date(2018, 10, 1)
     self.users = [UserFactory(
         date_joined=as_datetime(self.date_for - datetime.timedelta(days=60))
         ) for i in range(0, 3)]
     self.course_overviews = [CourseOverviewFactory(
         created=as_datetime(self.date_for - datetime.timedelta(days=60))
         ) for i in range(0, 3)]
     self.cdm_recs = [CourseDailyMetricsFactory(
         date_for=self.date_for,
         **cdm
         ) for cdm in CDM_INPUT_TEST_DATA]
     self.prev_day_sdm = SiteDailyMetricsFactory(
         date_for=prev_day(self.date_for),
         **SDM_PREV_DAY[1])
示例#8
0
def sdm_test_data(db):
    """Quick-n-dirty test data construction

    Expected count is the highest 'total_user_count'
    """
    dates = [
        datetime(year=2020, month=3, day=15),
        datetime(year=2020, month=4, day=1),
        datetime(year=2020, month=4, day=15),
        datetime(year=2020, month=4, day=30),
        datetime(year=2020, month=5, day=1)
    ]

    our_date_range = [
        datetime(year=2020, month=4, day=1),
        datetime(year=2020, month=4, day=30),
    ]
    my_site = SiteFactory()
    other_site = SiteFactory()

    my_sdm = [
        # month before
        SiteDailyMetricsFactory(site=my_site,
                                date_for=dates[0],
                                total_user_count=10),
        # in our date range
        SiteDailyMetricsFactory(site=my_site,
                                date_for=dates[1],
                                total_user_count=20),
        SiteDailyMetricsFactory(site=my_site,
                                date_for=dates[2],
                                total_user_count=30),
        SiteDailyMetricsFactory(site=my_site,
                                date_for=dates[3],
                                total_user_count=25),
        # month after
        SiteDailyMetricsFactory(site=my_site,
                                date_for=dates[4],
                                total_user_count=500),
    ]
    # Create one SDM record for the other site in the month we query
    other_sdm = [
        SiteDailyMetricsFactory(site=other_site,
                                date_for=dates[2],
                                total_user_count=13)]
    return dict(
        our_date_range=our_date_range,
        my_site=my_site,
        other_site=other_site,
        my_sdm=my_sdm,
        other_sdm=other_sdm,
        expected_count=30,
    )
    def test_latest_previous_record(self):
        site = SiteFactory()

        # Create a set of records with non-continuous dates
        dates = [
            datetime.date(2019, 10, 1),
            datetime.date(2019, 10, 2),
            datetime.date(2019, 10, 5),
            datetime.date(2019, 10, 29),
            datetime.date(2019, 11, 3),
        ]
        for rec_date in dates:
            SiteDailyMetricsFactory(site=site, date_for=rec_date)

        rec = SiteDailyMetrics.latest_previous_record(site=site)
        assert rec.date_for == dates[-1]

        rec2 = SiteDailyMetrics.latest_previous_record(site=site,
                                                       date_for=dates[-1])
        assert rec2.date_for == dates[-2]

        rec3 = SiteDailyMetrics.latest_previous_record(site=site,
                                                       date_for=dates[0])
        assert not rec3
示例#10
0
 def mock_sdm_load(self, site, date_for, **kwargs):
     return (
         SiteDailyMetricsFactory(site=site),
         created,
     )
示例#11
0
 def setUp(self):
     self.site_daily_metrics = [
         SiteDailyMetricsFactory() for i in range(1, 10)
     ]
    def setup(self, db):
        '''Placeholder for test setup

        '''
        self.site_daily_metrics = [SiteDailyMetricsFactory()]
def generate_sdm_series(first_day, last_day):

    return [
        SiteDailyMetricsFactory(date_for=dt)
        for dt in rrule(DAILY, dtstart=first_day, until=last_day)
    ]