Re-structure the project.
This commit is contained in:
121
tests/normalize/normalizers/test_date_normalizer.py
Normal file
121
tests/normalize/normalizers/test_date_normalizer.py
Normal file
@@ -0,0 +1,121 @@
|
||||
"""
|
||||
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
|
||||
Reference in New Issue
Block a user