crawlee-python/tests/unit/_utils/test_timedelta_ms.py

36 lines
1.2 KiB
Python

from __future__ import annotations
from datetime import timedelta
from typing import Any
import pytest
from pydantic import BaseModel
from crawlee._utils.models import timedelta_ms
class _ModelWithTimedeltaMs(BaseModel):
time_delta: timedelta_ms | None = None
@pytest.mark.parametrize(
('time_delta_input', 'expected_time_delta', 'expected_model_dump_value'),
[
(1.0, timedelta(milliseconds=1), 1),
(1, timedelta(milliseconds=1), 1),
('1', timedelta(milliseconds=1), 1),
(timedelta(milliseconds=1), timedelta(milliseconds=1), 1),
(3.01, timedelta(microseconds=3010), 3),
(3.5, timedelta(microseconds=3500), 4),
(3.99, timedelta(microseconds=3990), 4),
(None, None, None),
(float('inf'), timedelta(days=999999999, seconds=3600 * 24 - 1, microseconds=999999), float('inf')),
],
)
def test_model_with_timedelta_ms_input_types(
time_delta_input: float | timedelta | Any | None, expected_time_delta: timedelta, expected_model_dump_value: int
) -> None:
model = _ModelWithTimedeltaMs(time_delta=time_delta_input) # ty: ignore[invalid-argument-type]
assert model.time_delta == expected_time_delta
assert model.model_dump() == {'time_delta': expected_model_dump_value}