Exemplo n.º 1
0
def get_detailed_services(start_date,
                          end_date,
                          only_active=False,
                          include_from_test_key=True):
    if start_date == datetime.utcnow().date():
        stats = dao_fetch_todays_stats_for_all_services(
            include_from_test_key=include_from_test_key,
            only_active=only_active)
    else:

        stats = fetch_stats_for_all_services_by_date_range(
            start_date=start_date,
            end_date=end_date,
            include_from_test_key=include_from_test_key,
        )
    results = []
    for service_id, rows in itertools.groupby(stats, lambda x: x.service_id):
        rows = list(rows)
        s = statistics.format_statistics(rows)
        results.append({
            'id': str(rows[0].service_id),
            'name': rows[0].name,
            'notification_type': rows[0].notification_type,
            'research_mode': rows[0].research_mode,
            'restricted': rows[0].restricted,
            'active': rows[0].active,
            'created_at': rows[0].created_at,
            'statistics': s
        })
    return results
Exemplo n.º 2
0
def test_dao_fetch_todays_stats_for_all_services_groups_correctly(
        notify_db, notify_db_session):
    service1 = create_service(service_name='service 1', email_from='service.1')
    service2 = create_service(service_name='service 2', email_from='service.2')
    template_sms = create_template(service=service1)
    template_email = create_template(service=service1, template_type='email')
    template_two = create_template(service=service2)
    # service1: 2 sms with status "created" and one "failed", and one email
    create_notification(template=template_sms)
    create_notification(template=template_sms)
    create_notification(template=template_sms, status='failed')
    create_notification(template=template_email)
    # service2: 1 sms "created"
    create_notification(template=template_two)

    stats = dao_fetch_todays_stats_for_all_services()
    assert len(stats) == 4
    assert (service1.id, service1.name, service1.restricted,
            service1.research_mode, service1.active, service1.created_at,
            'sms', 'created', 2) in stats
    assert (service1.id, service1.name, service1.restricted,
            service1.research_mode, service1.active, service1.created_at,
            'sms', 'failed', 1) in stats
    assert (service1.id, service1.name, service1.restricted,
            service1.research_mode, service1.active, service1.created_at,
            'email', 'created', 1) in stats
    assert (service2.id, service2.name, service2.restricted,
            service2.research_mode, service2.active, service2.created_at,
            'sms', 'created', 1) in stats
def test_dao_fetch_todays_stats_for_all_services_can_exclude_from_test_key(notify_db, notify_db_session):
    create_notification(notify_db, notify_db_session, key_type=KEY_TYPE_NORMAL)
    create_notification(notify_db, notify_db_session, key_type=KEY_TYPE_TEAM)
    create_notification(notify_db, notify_db_session, key_type=KEY_TYPE_TEST)

    stats = dao_fetch_todays_stats_for_all_services(include_from_test_key=False).all()

    assert len(stats) == 1
    assert stats[0].count == 2
def test_dao_fetch_todays_stats_for_all_services_includes_all_keys_by_default(notify_db, notify_db_session):
    create_notification(notify_db, notify_db_session, key_type=KEY_TYPE_NORMAL)
    create_notification(notify_db, notify_db_session, key_type=KEY_TYPE_TEAM)
    create_notification(notify_db, notify_db_session, key_type=KEY_TYPE_TEST)

    stats = dao_fetch_todays_stats_for_all_services().all()

    assert len(stats) == 1
    assert stats[0].count == 3
Exemplo n.º 5
0
def test_dao_fetch_todays_stats_for_all_services_can_exclude_from_test_key(notify_db_session):
    template = create_template(service=create_service())
    create_notification(template=template, key_type=KEY_TYPE_NORMAL)
    create_notification(template=template, key_type=KEY_TYPE_TEAM)
    create_notification(template=template, key_type=KEY_TYPE_TEST)

    stats = dao_fetch_todays_stats_for_all_services(include_from_test_key=False)

    assert len(stats) == 1
    assert stats[0].count == 2
Exemplo n.º 6
0
def test_dao_fetch_todays_stats_for_all_services_includes_all_keys_by_default(notify_db_session):
    template = create_template(service=create_service())
    create_notification(template=template, key_type=KEY_TYPE_NORMAL)
    create_notification(template=template, key_type=KEY_TYPE_TEAM)
    create_notification(template=template, key_type=KEY_TYPE_TEST)

    stats = dao_fetch_todays_stats_for_all_services()

    assert len(stats) == 1
    assert stats[0].count == 3
def test_dao_fetch_todays_stats_for_all_services_only_includes_today(notify_db):
    with freeze_time("2001-01-01T23:59:00"):
        just_before_midnight_yesterday = create_notification(notify_db, None, to_field="1", status="delivered")

    with freeze_time("2001-01-02T00:01:00"):
        just_after_midnight_today = create_notification(notify_db, None, to_field="2", status="failed")

    with freeze_time("2001-01-02T12:00:00"):
        stats = dao_fetch_todays_stats_for_all_services().all()

    stats = {row.status: row.count for row in stats}
    assert "delivered" not in stats
    assert stats["failed"] == 1
Exemplo n.º 8
0
def get_detailed_services(start_date,
                          end_date,
                          only_active=False,
                          include_from_test_key=True):
    if start_date == datetime.utcnow().date():
        stats = dao_fetch_todays_stats_for_all_services(
            include_from_test_key=include_from_test_key,
            only_active=only_active)
    else:

        stats = fetch_stats_by_date_range_for_all_services(
            start_date=start_date,
            end_date=end_date,
            include_from_test_key=include_from_test_key,
            only_active=only_active)
    results = []
    for service_id, rows in itertools.groupby(stats, lambda x: x.service_id):
        rows = list(rows)
        if rows[0].count is None:
            s = statistics.create_zeroed_stats_dicts()
        else:
            s = statistics.format_statistics(rows)
        sid = str(rows[0].service_id)

        s[EMAIL_TYPE]['templates'] = len(
            dao_get_all_templates_for_service(sid, EMAIL_TYPE))
        s[SMS_TYPE]['templates'] = len(
            dao_get_all_templates_for_service(sid, SMS_TYPE))
        s[LETTER_TYPE]['templates'] = len(
            dao_get_all_templates_for_service(sid, LETTER_TYPE))

        domains = set()
        for user in dao_fetch_active_users_for_service(sid):
            parts = user.email_address.split('@')
            if len(parts) != 2:
                continue
            domains.add(parts[1].lower())

        results.append({
            'id': sid,
            'name': rows[0].name,
            'notification_type': rows[0].notification_type,
            'research_mode': rows[0].research_mode,
            'restricted': rows[0].restricted,
            'active': rows[0].active,
            'created_at': rows[0].created_at,
            'statistics': s,
            'domains': sorted(list(domains)),
            'organisation_type': rows[0].organisation_type
        })
    return results
Exemplo n.º 9
0
def test_dao_fetch_todays_stats_for_all_services_only_includes_today(notify_db_session):
    template = create_template(service=create_service())
    with freeze_time('2001-01-01T23:59:00'):
        # just_before_midnight_yesterday
        create_notification(template=template, to_field='1', status='delivered')

    with freeze_time('2001-01-02T00:01:00'):
        # just_after_midnight_today
        create_notification(template=template, to_field='2', status='failed')

    with freeze_time('2001-01-02T12:00:00'):
        stats = dao_fetch_todays_stats_for_all_services()

    stats = {row.status: row.count for row in stats}
    assert 'delivered' not in stats
    assert stats['failed'] == 1
Exemplo n.º 10
0
def test_dao_fetch_todays_stats_for_all_services_includes_all_services(notify_db_session):
    # two services, each with an email and sms notification
    service1 = create_service(service_name='service 1', email_from='service.1')
    service2 = create_service(service_name='service 2', email_from='service.2')
    template_email_one = create_template(service=service1, template_type='email')
    template_sms_one = create_template(service=service1, template_type='sms')
    template_email_two = create_template(service=service2, template_type='email')
    template_sms_two = create_template(service=service2, template_type='sms')
    create_notification(template=template_email_one)
    create_notification(template=template_sms_one)
    create_notification(template=template_email_two)
    create_notification(template=template_sms_two)

    stats = dao_fetch_todays_stats_for_all_services()

    assert len(stats) == 4
    # services are ordered by service id; not explicit on email/sms or status
    assert stats == sorted(stats, key=lambda x: x.service_id)
Exemplo n.º 11
0
def test_dao_fetch_todays_stats_for_all_services_only_includes_today(
        notify_db_session):
    template = create_template(service=create_service())
    with freeze_time("2001-01-02T03:59:00"):
        # just_before_midnight_yesterday
        create_notification(template=template,
                            to_field="1",
                            status="delivered")

    with freeze_time("2001-01-02T05:01:00"):
        # just_after_midnight_today
        create_notification(template=template, to_field="2", status="failed")

    with freeze_time("2001-01-02T05:00:00"):
        stats = dao_fetch_todays_stats_for_all_services()

    stats = {row.status: row.count for row in stats}
    assert "delivered" not in stats
    assert stats["failed"] == 1
Exemplo n.º 12
0
def test_dao_fetch_todays_stats_for_all_services_groups_correctly(notify_db, notify_db_session, service_factory):
    service1 = service_factory.get("service 1", email_from="service.1")
    service2 = service_factory.get("service 2", email_from="service.2")
    # service1: 2 sms with status "created" and one "failed", and one email
    create_notification(notify_db, notify_db_session, service=service1)
    create_notification(notify_db, notify_db_session, service=service1)
    create_notification(notify_db, notify_db_session, service=service1, status="failed")
    create_notification(
        notify_db,
        notify_db_session,
        service=service1,
        template=create_email_template(notify_db, notify_db_session, service=service1),
    )
    # service2: 1 sms "created"
    create_notification(notify_db, notify_db_session, service=service2)

    stats = dao_fetch_todays_stats_for_all_services().all()

    assert len(stats) == 4
    assert ("sms", "created", service1.id, 2) in stats
    assert ("sms", "failed", service1.id, 1) in stats
    assert ("email", "created", service1.id, 1) in stats
    assert ("sms", "created", service2.id, 1) in stats
Exemplo n.º 13
0
def test_dao_fetch_todays_stats_for_all_services_includes_all_services(notify_db, notify_db_session, service_factory):
    # two services, each with an email and sms notification
    service1 = service_factory.get("service 1", email_from="service.1")
    service2 = service_factory.get("service 2", email_from="service.2")
    create_notification(notify_db, notify_db_session, service=service1)
    create_notification(notify_db, notify_db_session, service=service2)
    create_notification(
        notify_db,
        notify_db_session,
        service=service1,
        template=create_email_template(notify_db, notify_db_session, service=service1),
    )
    create_notification(
        notify_db,
        notify_db_session,
        service=service2,
        template=create_email_template(notify_db, notify_db_session, service=service2),
    )

    stats = dao_fetch_todays_stats_for_all_services().all()

    assert len(stats) == 4
    # services are ordered by service id; not explicit on email/sms or status
    assert stats == sorted(stats, key=lambda x: x.service_id)
Exemplo n.º 14
0
def test_dao_fetch_todays_stats_for_all_services_groups_correctly(
        notify_db, notify_db_session):
    service1 = create_service(service_name="service 1", email_from="service.1")
    service2 = create_service(service_name="service 2", email_from="service.2")
    template_sms = create_template(service=service1)
    template_email = create_template(service=service1, template_type="email")
    template_two = create_template(service=service2)
    # service1: 2 sms with status "created" and one "failed", and one email
    create_notification(template=template_sms)
    create_notification(template=template_sms)
    create_notification(template=template_sms, status="failed")
    create_notification(template=template_email)
    # service2: 1 sms "created"
    create_notification(template=template_two)

    stats = dao_fetch_todays_stats_for_all_services()
    assert len(stats) == 4
    assert (
        service1.id,
        service1.name,
        service1.restricted,
        service1.research_mode,
        service1.active,
        service1.created_at,
        "sms",
        "created",
        2,
    ) in stats
    assert (
        service1.id,
        service1.name,
        service1.restricted,
        service1.research_mode,
        service1.active,
        service1.created_at,
        "sms",
        "failed",
        1,
    ) in stats
    assert (
        service1.id,
        service1.name,
        service1.restricted,
        service1.research_mode,
        service1.active,
        service1.created_at,
        "email",
        "created",
        1,
    ) in stats
    assert (
        service2.id,
        service2.name,
        service2.restricted,
        service2.research_mode,
        service2.active,
        service2.created_at,
        "sms",
        "created",
        1,
    ) in stats