perf: compress anime requests and reuse AniList search metadata

This commit is contained in:
2026-10-25 20:11:44 +01:00
parent 19267d169b
commit 6cc4e18f72
8 changed files with 141 additions and 15 deletions
+46
View File
@@ -767,6 +767,52 @@ fn episode_launch_retains_checks_on_failure_and_clears_only_after_spawn() {
}
}
#[test]
fn anilist_search_results_open_without_waiting_for_another_catalog_request() {
let directory = Directory::new();
let path = directory.0.join("config.toml");
fs::write(&path, "").unwrap();
let mut browser = Browser::new(
Options::parse_from(["tubular", "--anilist", "Cowboy Bebop"]),
path.clone(),
config::Config::default(),
State::open(&path).unwrap(),
);
let media = miruro_browser::catalog(vec![serde_json::json!({
"id":"1", "catalog_provider":"anilist",
"title":{"romaji":"Cowboy Bebop"}, "status":"FINISHED",
"episode_count":26, "catalog_count":26, "description":"Search synopsis"
})])
.unwrap();
browser.accept(browser.generation, Ok(Response::Catalog(media)));
browser.pending = None;
browser.key(KeyEvent::new(KeyCode::Enter, KeyModifiers::NONE));
assert_eq!(
browser.screen().selected_video().map(|video| video.id),
Some("anilist:1:1".into()),
"opening a complete search result must expose episodes immediately"
);
assert!(browser.pending.is_none());
assert!(browser.screen().overview.contains("Search synopsis"));
browser.select(Action::VideoLast);
assert_eq!(
browser.screen().selected_video().unwrap().id,
"anilist:1:26"
);
browser.refresh();
assert!(
matches!(&browser.pending, Some(Request::Episodes { media_id, .. }) if media_id == "1")
);
let refreshed = miruro_browser::anilist_series(serde_json::json!({
"id":"1", "catalog_provider":"anilist", "title":{"romaji":"Cowboy Bebop"},
"status":"FINISHED", "episode_count":27
}))
.unwrap();
browser.accept(browser.generation, Ok(Response::Series(refreshed)));
assert_eq!(browser.screen().len(), 27);
}
#[test]
fn anilist_unknown_count_allows_explicit_selection_and_provider_local_collections() {
let directory = Directory::new();