mirror of https://github.com/Nezreka/SoulSync.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
2.6 KiB
68 lines
2.6 KiB
"""#705 release-date gate: unreleased tracks stay out of hot paths.
|
|
|
|
Watchlist scans add announced albums on purpose; the gate keeps their
|
|
future-dated tracks out of the wishlist search cycle and the Fresh Tape
|
|
radar until release day. Conservative by design: only a CONFIDENTLY
|
|
future date gates; bad/missing dates never block anything.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from datetime import date
|
|
|
|
from core.metadata.release_dates import (
|
|
is_future_release,
|
|
split_released_unreleased,
|
|
track_release_date,
|
|
)
|
|
|
|
TODAY = date(2026, 6, 7)
|
|
|
|
|
|
def test_full_dates():
|
|
assert is_future_release('2026-06-08', today=TODAY) is True
|
|
assert is_future_release('2026-06-07', today=TODAY) is False # release DAY = released
|
|
assert is_future_release('2026-06-06', today=TODAY) is False
|
|
assert is_future_release('2027-01-01', today=TODAY) is True
|
|
|
|
|
|
def test_partial_dates_are_conservative():
|
|
# Year-only: future only when the YEAR is future.
|
|
assert is_future_release('2027', today=TODAY) is True
|
|
assert is_future_release('2026', today=TODAY) is False
|
|
# Year-month: future only when the MONTH is future.
|
|
assert is_future_release('2026-07', today=TODAY) is True
|
|
assert is_future_release('2026-06', today=TODAY) is False
|
|
assert is_future_release('2026-05', today=TODAY) is False
|
|
|
|
|
|
def test_garbage_never_blocks():
|
|
for bad in ('', None, 'unknown', 'soon', '20xx-01-01', '2026-13-45', 123, {}):
|
|
assert is_future_release(bad, today=TODAY) is False
|
|
|
|
|
|
def test_invalid_day_falls_back_to_month_precision():
|
|
# 2026-06-99 is unparseable as a date but month precision says "not future".
|
|
assert is_future_release('2026-06-99', today=TODAY) is False
|
|
assert is_future_release('2026-07-99', today=TODAY) is True
|
|
|
|
|
|
def test_track_release_date_shapes():
|
|
assert track_release_date({'album': {'release_date': '2026-10-03'}}) == '2026-10-03'
|
|
assert track_release_date({'release_date': '2026'}) == '2026'
|
|
assert track_release_date({'album': 'a-string'}) == ''
|
|
assert track_release_date({}) == ''
|
|
assert track_release_date(None) == ''
|
|
|
|
|
|
def test_split_partitions_and_preserves_order():
|
|
tracks = [
|
|
{'name': 'out', 'album': {'release_date': '2026-01-01'}},
|
|
{'name': 'tomorrow', 'album': {'release_date': '2026-06-08'}},
|
|
{'name': 'no-date', 'album': {}},
|
|
{'name': 'next-year', 'release_date': '2027'},
|
|
]
|
|
released, unreleased = split_released_unreleased(tracks, today=TODAY)
|
|
assert [t['name'] for t in released] == ['out', 'no-date']
|
|
assert [t['name'] for t in unreleased] == ['tomorrow', 'next-year']
|