use std::sync::LazyLock;
use vn::TraitField::*;
use vn::{TraitId, Vndb};
const AIRHEAD: &str = "Airhead";
const AIRHEAD_GROUP: &str = "Personality";
static AIRHEAD_ID: LazyLock<TraitId> = LazyLock::new(|| {
let id = format!("{}{}", TraitId::PREFIX, 229);
TraitId::new(&id).unwrap()
});
#[tokio::test]
async fn get_trait() {
let vndb = Vndb::new();
let filters = r#"["id", "=", "i229"]"#;
let mut results = vndb
.post()
.r#trait()
.filters(filters.try_into().unwrap())
.fields([Name, GroupName])
.results(5)
.send()
.await
.unwrap()
.results;
assert_eq!(results.len(), 1);
let r#trait = results.pop_front().unwrap();
let name = r#trait.name.as_deref().unwrap();
let group_name = r#trait.group_name.as_deref().unwrap();
assert_eq!(&r#trait.id, &*AIRHEAD_ID);
assert!(name.eq_ignore_ascii_case(AIRHEAD));
assert!(group_name.eq_ignore_ascii_case(AIRHEAD_GROUP));
}
#[tokio::test]
async fn find_trait() {
let r#trait = Vndb::new()
.find_trait(&*AIRHEAD_ID)
.fields([Name, GroupName])
.send()
.await
.unwrap()
.results
.pop_front()
.unwrap();
assert_eq!(&r#trait.id, &*AIRHEAD_ID);
assert_eq!(r#trait.name.as_deref(), Some(AIRHEAD));
assert_eq!(r#trait.group_name.as_deref(), Some(AIRHEAD_GROUP));
}
#[tokio::test]
async fn search_trait() {
let r#trait = Vndb::new()
.search_trait(AIRHEAD.to_ascii_lowercase())
.fields([Name, GroupName])
.send()
.await
.unwrap()
.results
.pop_front()
.unwrap();
assert_eq!(&r#trait.id, &*AIRHEAD_ID);
assert_eq!(r#trait.name.as_deref(), Some(AIRHEAD));
assert_eq!(r#trait.group_name.as_deref(), Some(AIRHEAD_GROUP));
}