feat(watchlist): buildRecord — TMDB detail → canonical record

Port pure fn mapping raw TMDB JSON + prev frontmatter → WatchlistRecord. Fixtures from python reference selftest. TDD: 14 new cases all green.
This commit is contained in:
afiqzudinhadi 2026-07-29 23:15:36 +08:00
parent 732ec8adf6
commit 51d630fcd6
4 changed files with 435 additions and 0 deletions

81
tests/fixtures/tmdb-movie-dune2.json vendored Normal file
View file

@ -0,0 +1,81 @@
{
"id": 693134,
"title": "Dune: Part Two",
"original_title": "Dune: Part Two",
"original_language": "en",
"spoken_languages": [
{
"iso_639_1": "en",
"english_name": "English"
}
],
"overview": "Paul Atreides unites with the Fremen...",
"runtime": 167,
"status": "Released",
"release_date": "2024-02-27",
"vote_average": 8.1,
"homepage": "https://www.dunemovie.com",
"poster_path": "/1pdfLvkbY9ohJlCjQH2CZjjYVvJ.jpg",
"genres": [
{
"name": "Science Fiction"
},
{
"name": "Adventure"
}
],
"production_countries": [
{
"name": "United States of America"
}
],
"credits": {
"cast": [
{
"name": "Timothée Chalamet"
},
{
"name": "Zendaya"
}
],
"crew": [
{
"job": "Director",
"name": "Denis Villeneuve"
},
{
"job": "Screenplay",
"name": "Jon Spaihts"
},
{
"job": "Producer",
"name": "Mary Parent"
}
]
},
"external_ids": {
"imdb_id": "tt15239678"
},
"release_dates": {
"results": [
{
"iso_3166_1": "US",
"release_dates": [
{
"certification": "PG-13"
}
]
}
]
},
"videos": {
"results": [
{
"site": "YouTube",
"type": "Trailer",
"official": true,
"key": "Way9Dexny3w"
}
]
}
}

80
tests/fixtures/tmdb-tv-loki.json vendored Normal file
View file

@ -0,0 +1,80 @@
{
"id": 84958,
"name": "Loki",
"original_name": "Loki",
"original_language": "en",
"spoken_languages": [
{
"iso_639_1": "en",
"english_name": "English"
}
],
"overview": "After stealing the Tesseract...",
"episode_run_time": [],
"status": "Ended",
"first_air_date": "2021-06-09",
"last_air_date": "2023-11-09",
"number_of_seasons": 2,
"number_of_episodes": 12,
"networks": [
{
"name": "Disney+"
}
],
"vote_average": 8.2,
"homepage": "https://www.disneyplus.com/series/wp/6pARMvILBGzF",
"poster_path": null,
"genres": [
{
"name": "Drama"
},
{
"name": "Sci-Fi & Fantasy"
}
],
"origin_country": [
"United States of America"
],
"created_by": [
{
"name": "Michael Waldron"
}
],
"aggregate_credits": {
"cast": [
{
"name": "Tom Hiddleston"
},
{
"name": "Sophia Di Martino"
}
]
},
"external_ids": {
"imdb_id": "tt9140554"
},
"content_ratings": {
"results": [
{
"iso_3166_1": "US",
"rating": "TV-14"
}
]
},
"videos": {
"results": [
{
"site": "YouTube",
"type": "Trailer",
"official": true,
"key": "nW948Va-l10"
}
]
},
"last_episode_to_air": {
"season_number": 2,
"episode_number": 6,
"name": "Glorious Purpose"
},
"next_episode_to_air": null
}