add program files
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
from pathlib import Path
|
||||
|
||||
from audiobooksorter.ingest import AudiobookRecord
|
||||
from audiobooksorter.sorter import sort_by_series
|
||||
|
||||
|
||||
def _load_sample(path: Path) -> list[AudiobookRecord]:
|
||||
data = json.loads(path.read_text(encoding="utf-8"))
|
||||
return [
|
||||
AudiobookRecord(
|
||||
title=item["title"],
|
||||
series=item.get("series"),
|
||||
series_index=item.get("seriesIndex"),
|
||||
author=item["author"],
|
||||
)
|
||||
for item in data
|
||||
]
|
||||
|
||||
|
||||
def test_sorting_orders_by_author_then_series(samples_dir: Path) -> None:
|
||||
records = _load_sample(samples_dir / "library.json")
|
||||
|
||||
sorted_records = sort_by_series(records)
|
||||
|
||||
titles = [record.title for record in sorted_records]
|
||||
assert titles == [
|
||||
"Wayfarers", # Becky Chambers
|
||||
"The Final Empire",
|
||||
"The Well of Ascension",
|
||||
"The Way of Kings",
|
||||
"Words of Radiance",
|
||||
]
|
||||
|
||||
|
||||
def test_author_parsing_handles_last_first_pairs() -> None:
|
||||
records = [
|
||||
AudiobookRecord(
|
||||
title="A Solo Standard",
|
||||
series=None,
|
||||
series_index=None,
|
||||
author="Ichiro Kishimi",
|
||||
),
|
||||
AudiobookRecord(
|
||||
title="B Solo LastFirst",
|
||||
series=None,
|
||||
series_index=None,
|
||||
author="Kishimi, Ichiro",
|
||||
),
|
||||
AudiobookRecord(
|
||||
title="C Ampersand",
|
||||
series=None,
|
||||
series_index=None,
|
||||
author="Ichiro Kishimi & Fumitake Koga",
|
||||
),
|
||||
AudiobookRecord(
|
||||
title="D Comma List",
|
||||
series=None,
|
||||
series_index=None,
|
||||
author="Kishimi, Ichiro, Koga, Fumitake",
|
||||
),
|
||||
]
|
||||
|
||||
sorted_records = sort_by_series(records)
|
||||
|
||||
titles = [record.title for record in sorted_records]
|
||||
assert titles == [
|
||||
"A Solo Standard",
|
||||
"B Solo LastFirst",
|
||||
"C Ampersand",
|
||||
"D Comma List",
|
||||
]
|
||||
Reference in New Issue
Block a user