Files
notifications-api/tests/app/dao/test_fact_processing_time_dao.py
Kenneth Kehl 2abb14d85a fix
2024-11-18 15:18:26 -08:00

93 lines
3.0 KiB
Python

from datetime import datetime
from freezegun import freeze_time
from sqlalchemy import select
from app import db
from app.dao import fact_processing_time_dao
from app.dao.fact_processing_time_dao import (
get_processing_time_percentage_for_date_range,
)
from app.models import FactProcessingTime
from tests.app.db import create_process_time
def test_insert_update_processing_time(notify_db_session):
data = FactProcessingTime(
local_date=datetime(2021, 2, 22).date(),
messages_total=3,
messages_within_10_secs=2,
)
fact_processing_time_dao.insert_update_processing_time(data)
result = db.session.execute(select(FactProcessingTime)).scalars().all()
assert len(result) == 1
assert result[0].local_date == datetime(2021, 2, 22).date()
assert result[0].messages_total == 3
assert result[0].messages_within_10_secs == 2
assert result[0].created_at
assert not result[0].updated_at
data = FactProcessingTime(
local_date=datetime(2021, 2, 22).date(),
messages_total=4,
messages_within_10_secs=3,
)
with freeze_time("2021-02-23 13:23:33"):
fact_processing_time_dao.insert_update_processing_time(data)
result = db.session.execute(select(FactProcessingTime)).scalars().all()
assert len(result) == 1
assert result[0].local_date == datetime(2021, 2, 22).date()
assert result[0].messages_total == 4
assert result[0].messages_within_10_secs == 3
assert result[0].created_at
assert result[0].updated_at == datetime(2021, 2, 23, 13, 23, 33)
def test_get_processing_time_percentage_for_date_range(notify_db_session):
create_process_time(
local_date="2021-02-21", messages_total=5, messages_within_10_secs=4
)
create_process_time(
local_date="2021-02-22", messages_total=3, messages_within_10_secs=2
)
create_process_time(
local_date="2021-02-23", messages_total=4, messages_within_10_secs=3
)
results = get_processing_time_percentage_for_date_range("2021-02-22", "2021-02-22")
assert len(results) == 1
assert results[0].date == "2021-02-22"
assert results[0].messages_total == 3
assert results[0].messages_within_10_secs == 2
assert round(results[0].percentage, 1) == 66.7
def test_get_processing_time_percentage_for_date_range_handles_zero_cases(
notify_db_session,
):
create_process_time(
local_date="2021-02-21", messages_total=0, messages_within_10_secs=0
)
create_process_time(
local_date="2021-02-22", messages_total=10, messages_within_10_secs=0
)
results = get_processing_time_percentage_for_date_range("2021-02-21", "2021-02-22")
assert len(results) == 2
assert results[0].date == "2021-02-21"
assert results[0].messages_total == 0
assert results[0].messages_within_10_secs == 0
assert results[0].percentage == 100.0
assert results[1].date == "2021-02-22"
assert results[1].messages_total == 10
assert results[1].messages_within_10_secs == 0
assert results[1].percentage == 0.0