SIENTIAPDE-1579: Switched from replace logic to validation + mapping
This commit is contained in:
@@ -7,34 +7,56 @@ import pandas as pd
|
||||
from pytest import raises
|
||||
|
||||
from model_manager.sientia.models import (
|
||||
ALLOWED_FRONTEND_DATE_FORMATS,
|
||||
FRONTEND_DATE_FORMAT_TO_STRFTIME,
|
||||
DataPreprocessor,
|
||||
LinearRegressionModel,
|
||||
_frontend_date_format_to_strftime,
|
||||
validate_frontend_date_format,
|
||||
)
|
||||
|
||||
|
||||
class TestFrontendDateFormatToStrftime:
|
||||
"""Tests for _frontend_date_format_to_strftime (models module)."""
|
||||
|
||||
def test_none_or_empty_returns_none_or_empty(self):
|
||||
"""None or empty string returns None or falsy."""
|
||||
def test_none_or_empty_returns_none(self):
|
||||
"""None or empty string returns None."""
|
||||
assert _frontend_date_format_to_strftime(None) is None
|
||||
assert _frontend_date_format_to_strftime('') is None
|
||||
|
||||
def test_dd_mm_yyyy_hh_mm_ss(self):
|
||||
"""Converts dd/MM/yyyy HH:mm:ss to strftime."""
|
||||
result = _frontend_date_format_to_strftime('dd/MM/yyyy HH:mm:ss')
|
||||
assert result == '%d/%m/%Y %H:%M:%S'
|
||||
def test_all_six_allowed_formats_convert_correctly(self):
|
||||
"""All allowed frontend formats map to expected strftime."""
|
||||
for frontend_fmt, strftime_fmt in FRONTEND_DATE_FORMAT_TO_STRFTIME.items():
|
||||
assert _frontend_date_format_to_strftime(frontend_fmt) == strftime_fmt
|
||||
|
||||
def test_yyyy_mm_dd(self):
|
||||
"""Converts yyyy-MM-dd to strftime."""
|
||||
result = _frontend_date_format_to_strftime('yyyy-MM-dd')
|
||||
assert result == '%Y-%m-%d'
|
||||
def test_invalid_format_raises(self):
|
||||
"""Invalid format raises ValueError with allowed list in message."""
|
||||
with raises(ValueError, match='Invalid date_format'):
|
||||
_frontend_date_format_to_strftime('yyyy-MM-dd')
|
||||
with raises(ValueError, match='Allowed formats'):
|
||||
_frontend_date_format_to_strftime('invalid')
|
||||
|
||||
def test_iso_datetime(self):
|
||||
"""Converts yyyy-MM-dd HH:mm:ss to strftime."""
|
||||
result = _frontend_date_format_to_strftime('yyyy-MM-dd HH:mm:ss')
|
||||
assert result == '%Y-%m-%d %H:%M:%S'
|
||||
|
||||
class TestValidateFrontendDateFormat:
|
||||
"""Tests for validate_frontend_date_format."""
|
||||
|
||||
def test_none_or_empty_does_not_raise(self):
|
||||
"""None or empty string does not raise."""
|
||||
validate_frontend_date_format(None)
|
||||
validate_frontend_date_format('')
|
||||
validate_frontend_date_format(' ')
|
||||
|
||||
def test_allowed_formats_do_not_raise(self):
|
||||
"""All allowed formats pass validation."""
|
||||
for fmt in ALLOWED_FRONTEND_DATE_FORMATS:
|
||||
validate_frontend_date_format(fmt)
|
||||
|
||||
def test_invalid_format_raises(self):
|
||||
"""Invalid format raises ValueError."""
|
||||
with raises(ValueError, match='Invalid date_format'):
|
||||
validate_frontend_date_format('yyyy-MM-dd')
|
||||
with raises(ValueError, match='Invalid date_format'):
|
||||
validate_frontend_date_format('custom-bad-format')
|
||||
|
||||
|
||||
class _IterableWithContains:
|
||||
|
||||
Reference in New Issue
Block a user