use std::sync::LazyLock;
use vn::VisualNovelField::*;
use vn::{VisualNovelId, Vndb};
const NOVEL: &str = "Yosuga no Sora";
const NOVEL_JP: &str = "ヨスガノソラ";
static NOVEL_ID: LazyLock<VisualNovelId> = LazyLock::new(|| {
let id = format!("{}{}", VisualNovelId::PREFIX, 1194);
VisualNovelId::new(&id).unwrap()
});
#[tokio::test]
async fn get_visual_novel() {
let vndb = Vndb::new();
let filters = r#"["id", "=", "v1194"]"#;
let visual_novel = vndb
.post()
.visual_novel()
.filters(filters.try_into().unwrap())
.fields([Title, TitlesMain, TitlesTitle])
.results(5)
.send()
.await
.unwrap();
let visual_novel = visual_novel
.iter()
.find(|it| {
it.title
.as_deref()
.unwrap()
.eq_ignore_ascii_case(NOVEL)
})
.unwrap();
let title = visual_novel.title.as_deref().unwrap();
assert_eq!(visual_novel.id, *NOVEL_ID);
assert!(title.eq_ignore_ascii_case(NOVEL));
let main = visual_novel
.titles
.as_ref()
.unwrap()
.iter()
.find(|it| it.main.unwrap_or(false))
.unwrap();
let title = main.title.as_deref().unwrap();
assert!(title == NOVEL || title == NOVEL_JP);
}
#[tokio::test]
async fn find_visual_novel() {
let visual_novel = Vndb::new()
.find_visual_novel(&NOVEL_ID)
.fields(Title)
.send()
.await
.unwrap()
.pop_front()
.unwrap();
assert_eq!(visual_novel.id, *NOVEL_ID);
assert_eq!(visual_novel.title.as_deref(), Some(NOVEL));
}
#[tokio::test]
async fn search_visual_novel() {
let visual_novel = Vndb::new()
.search_visual_novel(NOVEL.to_ascii_lowercase())
.fields(Title)
.send()
.await
.unwrap()
.pop_front()
.unwrap();
assert_eq!(visual_novel.id, *NOVEL_ID);
assert_eq!(visual_novel.title.as_deref(), Some(NOVEL));
}