def test_dao_get_template_usage_stats_by_service_for_precompiled_letters(
        sample_service):

    letter_template = create_template(service=sample_service,
                                      template_type=LETTER_TYPE)

    precompiled_letter_template = create_template(
        service=sample_service,
        template_name=PRECOMPILED_TEMPLATE_NAME,
        hidden=True,
        template_type=LETTER_TYPE)

    db.session.add(
        StatsTemplateUsageByMonth(template_id=letter_template.id,
                                  month=5,
                                  year=2017,
                                  count=10))

    db.session.add(
        StatsTemplateUsageByMonth(template_id=precompiled_letter_template.id,
                                  month=4,
                                  year=2017,
                                  count=20))

    result = dao_get_template_usage_stats_by_service(sample_service.id, 2017)

    assert len(result) == 2
    assert [(letter_template.id, 'letter Template Name', 'letter', False, 5,
             2017, 10),
            (precompiled_letter_template.id, PRECOMPILED_TEMPLATE_NAME,
             'letter', True, 4, 2017, 20)] == result
def test_dao_get_template_usage_stats_by_service_specific_year(sample_service):

    email_template = create_template(service=sample_service,
                                     template_type="email")

    db.session.add(
        StatsTemplateUsageByMonth(template_id=email_template.id,
                                  month=3,
                                  year=2017,
                                  count=10))

    db.session.add(
        StatsTemplateUsageByMonth(template_id=email_template.id,
                                  month=4,
                                  year=2017,
                                  count=10))

    db.session.add(
        StatsTemplateUsageByMonth(template_id=email_template.id,
                                  month=3,
                                  year=2018,
                                  count=10))

    db.session.add(
        StatsTemplateUsageByMonth(template_id=email_template.id,
                                  month=4,
                                  year=2018,
                                  count=10))

    result = dao_get_template_usage_stats_by_service(sample_service.id, 2017)

    assert len(result) == 2

    assert result[0].template_id == email_template.id
    assert result[0].name == email_template.name
    assert result[0].template_type == email_template.template_type
    assert result[0].month == 4
    assert result[0].year == 2017
    assert result[0].count == 10

    assert result[1].template_id == email_template.id
    assert result[1].name == email_template.name
    assert result[1].template_type == email_template.template_type
    assert result[1].month == 3
    assert result[1].year == 2018
    assert result[1].count == 10
def test_dao_get_template_usage_stats_by_service(sample_service):

    email_template = create_template(service=sample_service,
                                     template_type="email")

    new_service = create_service(service_name="service_one")

    template_new_service = create_template(service=new_service)

    db.session.add(
        StatsTemplateUsageByMonth(template_id=email_template.id,
                                  month=4,
                                  year=2017,
                                  count=10))

    db.session.add(
        StatsTemplateUsageByMonth(template_id=template_new_service.id,
                                  month=4,
                                  year=2017,
                                  count=10))

    result = dao_get_template_usage_stats_by_service(sample_service.id, 2017)

    assert len(result) == 1
Exemplo n.º 4
0
def dao_fetch_monthly_historical_usage_by_template_for_service(service_id, year):

    results = dao_get_template_usage_stats_by_service(service_id, year)

    stats = []
    for result in results:
        stat = type("", (), {})()
        stat.template_id = result.template_id
        stat.template_type = result.template_type
        stat.name = str(result.name)
        stat.month = result.month
        stat.year = result.year
        stat.count = result.count
        stat.is_precompiled_letter = result.is_precompiled_letter
        stats.append(stat)

    month = get_london_month_from_utc_column(Notification.created_at)
    year_func = func.date_trunc("year", Notification.created_at)
    start_date = datetime.combine(date.today(), time.min)

    fy_start, fy_end = get_financial_year(year)

    if fy_start < datetime.now() < fy_end:
        today_results = db.session.query(
            Notification.template_id,
            Template.is_precompiled_letter,
            Template.name,
            Template.template_type,
            extract('month', month).label('month'),
            extract('year', year_func).label('year'),
            func.count().label('count')
        ).join(
            Template, Notification.template_id == Template.id,
        ).filter(
            Notification.created_at >= start_date,
            Notification.service_id == service_id,
            # we don't want to include test keys
            Notification.key_type != KEY_TYPE_TEST
        ).group_by(
            Notification.template_id,
            Template.hidden,
            Template.name,
            Template.template_type,
            month,
            year_func
        ).order_by(
            Notification.template_id
        ).all()

        for today_result in today_results:
            add_to_stats = True
            for stat in stats:
                if today_result.template_id == stat.template_id and today_result.month == stat.month \
                        and today_result.year == stat.year:
                    stat.count = stat.count + today_result.count
                    add_to_stats = False

            if add_to_stats:
                new_stat = type("StatsTemplateUsageByMonth", (), {})()
                new_stat.template_id = today_result.template_id
                new_stat.template_type = today_result.template_type
                new_stat.name = today_result.name
                new_stat.month = int(today_result.month)
                new_stat.year = int(today_result.year)
                new_stat.count = today_result.count
                new_stat.is_precompiled_letter = today_result.is_precompiled_letter
                stats.append(new_stat)

    return stats