Files
invoice-master-poc-v2/tests/normalize/normalizers/test_date_normalizer.py
2026-01-25 15:21:11 +01:00

122 lines
4.5 KiB
Python

"""
Tests for DateNormalizer
Usage:
pytest tests/normalize/normalizers/test_date_normalizer.py -v
"""
import pytest
from src.normalize.normalizers.date_normalizer import DateNormalizer
class TestDateNormalizer:
"""Test DateNormalizer functionality"""
@pytest.fixture
def normalizer(self):
"""Create normalizer instance for testing"""
return DateNormalizer()
def test_iso_format(self, normalizer):
"""ISO format date should generate multiple variants"""
result = normalizer.normalize('2025-12-13')
assert '2025-12-13' in result
assert '13/12/2025' in result
assert '13.12.2025' in result
def test_european_slash_format(self, normalizer):
"""European slash format should be parsed correctly"""
result = normalizer.normalize('13/12/2025')
assert '2025-12-13' in result
def test_european_dot_format(self, normalizer):
"""European dot format should be parsed correctly"""
result = normalizer.normalize('13.12.2025')
assert '2025-12-13' in result
def test_compact_format_yyyymmdd(self, normalizer):
"""Compact YYYYMMDD format should be parsed"""
result = normalizer.normalize('20251213')
assert '2025-12-13' in result
def test_compact_format_yymmdd(self, normalizer):
"""Compact YYMMDD format should be parsed"""
result = normalizer.normalize('251213')
assert '2025-12-13' in result
def test_short_year_dot_format(self, normalizer):
"""Short year dot format (DD.MM.YY) should be parsed"""
result = normalizer.normalize('13.12.25')
assert '2025-12-13' in result
def test_swedish_month_name(self, normalizer):
"""Swedish full month name should be parsed"""
result = normalizer.normalize('13 december 2025')
assert '2025-12-13' in result
def test_swedish_month_abbreviation(self, normalizer):
"""Swedish month abbreviation should be parsed"""
result = normalizer.normalize('13 dec 2025')
assert '2025-12-13' in result
def test_generates_swedish_month_variants(self, normalizer):
"""Should generate Swedish month name variants"""
result = normalizer.normalize('2025-12-13')
assert '13 december 2025' in result
assert '13 dec 2025' in result
def test_generates_hyphen_month_abbrev_format(self, normalizer):
"""Should generate hyphen with month abbreviation format"""
result = normalizer.normalize('2025-12-13')
assert '13-DEC-25' in result
def test_iso_with_time(self, normalizer):
"""ISO format with time should extract date part"""
result = normalizer.normalize('2025-12-13 14:30:00')
assert '2025-12-13' in result
def test_ambiguous_date_generates_both(self, normalizer):
"""Ambiguous date should generate both DD/MM and MM/DD interpretations"""
result = normalizer.normalize('01/02/2025')
# Could be Feb 1 or Jan 2
assert '2025-02-01' in result or '2025-01-02' in result
def test_middle_dot_separator(self, normalizer):
"""Middle dot separator should be generated"""
result = normalizer.normalize('2025-12-13')
assert '2025·12·13' in result
def test_spaced_format(self, normalizer):
"""Spaced format should be generated"""
result = normalizer.normalize('2025-12-13')
assert '2025 12 13' in result
def test_empty_string(self, normalizer):
"""Empty string should return empty list"""
result = normalizer('')
assert result == []
def test_none_value(self, normalizer):
"""None value should return empty list"""
result = normalizer(None)
assert result == []
def test_callable_interface(self, normalizer):
"""Normalizer should be callable via __call__"""
result = normalizer('2025-12-13')
assert '2025-12-13' in result
def test_invalid_date(self, normalizer):
"""Invalid date should return original only"""
result = normalizer.normalize('2025-13-45') # Invalid month and day
assert '2025-13-45' in result
# Should not crash, but won't generate ISO variant
def test_2digit_year_cutoff(self, normalizer):
"""2-digit year should use 2000s for < 50, 1900s for >= 50"""
result = normalizer.normalize('251213') # 25 = 2025
assert '2025-12-13' in result
result = normalizer.normalize('991213') # 99 = 1999
assert '1999-12-13' in result