92 lines
2.8 KiB
Python
92 lines
2.8 KiB
Python
|
|
"""Unit tests for time parser utility."""
|
||
|
|
|
||
|
|
from datetime import UTC, datetime, timedelta
|
||
|
|
|
||
|
|
from libs.time_parser import get_time_threshold, parse_time_duration
|
||
|
|
|
||
|
|
|
||
|
|
class TestParseTimeDuration:
|
||
|
|
"""Test parse_time_duration function."""
|
||
|
|
|
||
|
|
def test_parse_days(self):
|
||
|
|
"""Test parsing days."""
|
||
|
|
result = parse_time_duration("7d")
|
||
|
|
assert result == timedelta(days=7)
|
||
|
|
|
||
|
|
def test_parse_hours(self):
|
||
|
|
"""Test parsing hours."""
|
||
|
|
result = parse_time_duration("4h")
|
||
|
|
assert result == timedelta(hours=4)
|
||
|
|
|
||
|
|
def test_parse_minutes(self):
|
||
|
|
"""Test parsing minutes."""
|
||
|
|
result = parse_time_duration("30m")
|
||
|
|
assert result == timedelta(minutes=30)
|
||
|
|
|
||
|
|
def test_parse_seconds(self):
|
||
|
|
"""Test parsing seconds."""
|
||
|
|
result = parse_time_duration("30s")
|
||
|
|
assert result == timedelta(seconds=30)
|
||
|
|
|
||
|
|
def test_parse_uppercase(self):
|
||
|
|
"""Test parsing uppercase units."""
|
||
|
|
result = parse_time_duration("7D")
|
||
|
|
assert result == timedelta(days=7)
|
||
|
|
|
||
|
|
def test_parse_invalid_format(self):
|
||
|
|
"""Test parsing invalid format."""
|
||
|
|
result = parse_time_duration("7days")
|
||
|
|
assert result is None
|
||
|
|
|
||
|
|
result = parse_time_duration("abc")
|
||
|
|
assert result is None
|
||
|
|
|
||
|
|
result = parse_time_duration("7")
|
||
|
|
assert result is None
|
||
|
|
|
||
|
|
def test_parse_empty_string(self):
|
||
|
|
"""Test parsing empty string."""
|
||
|
|
result = parse_time_duration("")
|
||
|
|
assert result is None
|
||
|
|
|
||
|
|
def test_parse_none(self):
|
||
|
|
"""Test parsing None."""
|
||
|
|
result = parse_time_duration(None)
|
||
|
|
assert result is None
|
||
|
|
|
||
|
|
|
||
|
|
class TestGetTimeThreshold:
|
||
|
|
"""Test get_time_threshold function."""
|
||
|
|
|
||
|
|
def test_get_threshold_days(self):
|
||
|
|
"""Test getting threshold for days."""
|
||
|
|
before = datetime.now(UTC)
|
||
|
|
result = get_time_threshold("7d")
|
||
|
|
after = datetime.now(UTC)
|
||
|
|
|
||
|
|
assert result is not None
|
||
|
|
# Result should be approximately 7 days ago
|
||
|
|
expected = before - timedelta(days=7)
|
||
|
|
# Allow 1 second tolerance for test execution time
|
||
|
|
assert abs((result - expected).total_seconds()) < 1
|
||
|
|
|
||
|
|
def test_get_threshold_hours(self):
|
||
|
|
"""Test getting threshold for hours."""
|
||
|
|
before = datetime.now(UTC)
|
||
|
|
result = get_time_threshold("4h")
|
||
|
|
after = datetime.now(UTC)
|
||
|
|
|
||
|
|
assert result is not None
|
||
|
|
expected = before - timedelta(hours=4)
|
||
|
|
assert abs((result - expected).total_seconds()) < 1
|
||
|
|
|
||
|
|
def test_get_threshold_invalid(self):
|
||
|
|
"""Test getting threshold with invalid duration."""
|
||
|
|
result = get_time_threshold("invalid")
|
||
|
|
assert result is None
|
||
|
|
|
||
|
|
def test_get_threshold_none(self):
|
||
|
|
"""Test getting threshold with None."""
|
||
|
|
result = get_time_threshold(None)
|
||
|
|
assert result is None
|