157 lines
6.5 KiB
Python
157 lines
6.5 KiB
Python
from datetime import date, datetime, time
|
|
|
|
from streamd.localize.extract_datetime import (
|
|
extract_date_from_marker,
|
|
extract_datetime_from_file_name,
|
|
extract_datetime_from_marker,
|
|
extract_datetime_from_marker_list,
|
|
extract_time_from_marker,
|
|
)
|
|
|
|
|
|
class TestExtractDateTime:
|
|
def test_extract_date_from_file_name_valid(self):
|
|
file_name = "20230101-123456 Some Text.md"
|
|
assert datetime(2023, 1, 1, 12, 34, 56) == extract_datetime_from_file_name(
|
|
file_name
|
|
)
|
|
|
|
def test_extract_date_from_file_name_invalid(self):
|
|
file_name = "invalid-file-name.md"
|
|
assert extract_datetime_from_file_name(file_name) is None
|
|
|
|
def test_extract_date_from_file_name_without_time(self):
|
|
file_name = "20230101 Some Text.md"
|
|
assert datetime(2023, 1, 1, 0, 0, 0) == extract_datetime_from_file_name(
|
|
file_name
|
|
)
|
|
|
|
def test_extract_date_from_file_name_short_time(self):
|
|
file_name = "20230101-1234 Some Text.md"
|
|
assert datetime(2023, 1, 1, 12, 34, 0) == extract_datetime_from_file_name(
|
|
file_name
|
|
)
|
|
|
|
def test_extract_date_from_file_name_empty_string(self):
|
|
file_name = ""
|
|
assert extract_datetime_from_file_name(file_name) is None
|
|
|
|
def test_extract_date_from_file_name_with_full_path(self):
|
|
file_name = "/path/to/20230101-123456 Some Text.md"
|
|
assert datetime(2023, 1, 1, 12, 34, 56) == extract_datetime_from_file_name(
|
|
file_name
|
|
)
|
|
|
|
|
|
class TestExtractMarkerDateTime:
|
|
def test_extract_datetime_from_marker_valid(self):
|
|
marker = "20250101150000"
|
|
assert datetime(2025, 1, 1, 15, 0, 0) == extract_datetime_from_marker(marker)
|
|
|
|
def test_extract_datetime_from_marker_invalid_format(self):
|
|
assert extract_datetime_from_marker("2025010115000") is None # too short
|
|
assert extract_datetime_from_marker("202501011500000") is None # too long
|
|
assert extract_datetime_from_marker("2025-01-01T150000") is None # separators
|
|
assert extract_datetime_from_marker("2025010115000a") is None # non-digit
|
|
assert extract_datetime_from_marker("") is None
|
|
|
|
def test_extract_datetime_from_marker_invalid_values(self):
|
|
assert extract_datetime_from_marker("20250230120000") is None # Feb 30
|
|
assert extract_datetime_from_marker("20250101126000") is None # minute 60
|
|
assert extract_datetime_from_marker("20250101240000") is None # hour 24
|
|
|
|
|
|
class TestExtractMarkerDate:
|
|
def test_extract_date_from_marker_valid(self):
|
|
marker = "20250101"
|
|
assert date(2025, 1, 1) == extract_date_from_marker(marker)
|
|
|
|
def test_extract_date_from_marker_invalid_format(self):
|
|
assert extract_date_from_marker("2025010") is None # too short
|
|
assert extract_date_from_marker("202501011") is None # too long
|
|
assert extract_date_from_marker("2025-01-01") is None # separators
|
|
assert extract_date_from_marker("2025010a") is None # non-digit
|
|
assert extract_date_from_marker("") is None
|
|
|
|
def test_extract_date_from_marker_invalid_values(self):
|
|
assert extract_date_from_marker("20250230") is None # Feb 30
|
|
assert extract_date_from_marker("20251301") is None # month 13
|
|
assert extract_date_from_marker("20250132") is None # day 32
|
|
|
|
|
|
class TestExtractMarkerTime:
|
|
def test_extract_time_from_marker_valid(self):
|
|
marker = "150000"
|
|
assert time(15, 0, 0) == extract_time_from_marker(marker)
|
|
|
|
def test_extract_time_from_marker_invalid_format(self):
|
|
assert extract_time_from_marker("15000") is None # too short
|
|
assert extract_time_from_marker("1500000") is None # too long
|
|
assert extract_time_from_marker("15:00:00") is None # separators
|
|
assert extract_time_from_marker("15000a") is None # non-digit
|
|
assert extract_time_from_marker("") is None
|
|
|
|
def test_extract_time_from_marker_invalid_values(self):
|
|
assert extract_time_from_marker("240000") is None # hour 24
|
|
assert extract_time_from_marker("156000") is None # minute 60
|
|
assert extract_time_from_marker("150060") is None # second 60
|
|
|
|
|
|
class TestExtractDateTimeFromMarkerList:
|
|
def test_no_markers_inherits_datetime(self):
|
|
inherited = datetime(2025, 1, 2, 3, 4, 5)
|
|
assert inherited == extract_datetime_from_marker_list([], inherited)
|
|
|
|
def test_unrelated_markers_inherits_datetime(self):
|
|
inherited = datetime(2025, 1, 2, 3, 4, 5)
|
|
markers = ["not-a-marker", "2025-01-01", "1500", "1234567"]
|
|
assert inherited == extract_datetime_from_marker_list(markers, inherited)
|
|
|
|
def test_date_only_marker_sets_midnight(self):
|
|
inherited = datetime(2025, 6, 7, 8, 9, 10)
|
|
markers = ["20250101"]
|
|
assert datetime(2025, 1, 1, 0, 0, 0) == extract_datetime_from_marker_list(
|
|
markers, inherited
|
|
)
|
|
|
|
def test_time_only_marker_inherits_date(self):
|
|
inherited = datetime(2025, 6, 7, 8, 9, 10)
|
|
markers = ["150000"]
|
|
assert datetime(2025, 6, 7, 15, 0, 0) == extract_datetime_from_marker_list(
|
|
markers, inherited
|
|
)
|
|
|
|
def test_datetime_marker_overrides_both_date_and_time(self):
|
|
inherited = datetime(2025, 6, 7, 8, 9, 10)
|
|
markers = ["20250101150000"]
|
|
assert datetime(2025, 1, 1, 15, 0, 0) == extract_datetime_from_marker_list(
|
|
markers, inherited
|
|
)
|
|
|
|
def test_combined_date_and_time_markers(self):
|
|
inherited = datetime(2025, 6, 7, 8, 9, 10)
|
|
markers = ["20250101", "150000"]
|
|
assert datetime(2025, 1, 1, 15, 0, 0) == extract_datetime_from_marker_list(
|
|
markers, inherited
|
|
)
|
|
|
|
def test_first_marker_wins_when_multiple_dates_or_times(self):
|
|
inherited = datetime(2025, 6, 7, 8, 9, 10)
|
|
markers = ["20250101", "150000", "20250102", "160000"]
|
|
assert datetime(2025, 1, 1, 15, 0, 0) == extract_datetime_from_marker_list(
|
|
markers, inherited
|
|
)
|
|
|
|
def test_last_separated_date_and_time_win(self):
|
|
inherited = datetime(2025, 6, 7, 8, 9, 10)
|
|
markers = ["20250101", "150000", "20250102160000"]
|
|
assert datetime(2025, 1, 1, 15, 0, 0) == extract_datetime_from_marker_list(
|
|
markers, inherited
|
|
)
|
|
|
|
def test_invalid_date_or_time_markers_are_ignored(self):
|
|
inherited = datetime(2025, 6, 7, 8, 9, 10)
|
|
markers = ["20251301", "240000", "20250101", "150000"]
|
|
assert datetime(2025, 1, 1, 15, 0, 0) == extract_datetime_from_marker_list(
|
|
markers, inherited
|
|
)
|