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)
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