36 lines
1.2 KiB
Python
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}
|