use boko::Book;
use flate2::read::GzDecoder;
use std::io::Read;
use std::path::Path;
fn decompress_fixture() -> Option<tempfile::NamedTempFile> {
let gz_path = "tests/fixtures/annotated_metadata.kfx.gz";
if !Path::new(gz_path).exists() {
eprintln!("Skipping test - fixture not found: {gz_path}");
return None;
}
let gz_data = std::fs::read(gz_path).expect("Failed to read fixture");
let mut decoder = GzDecoder::new(&gz_data[..]);
let mut kfx_data = Vec::new();
decoder
.read_to_end(&mut kfx_data)
.expect("Failed to decompress fixture");
let mut tmp = tempfile::Builder::new()
.suffix(".kfx")
.tempfile()
.expect("Failed to create temp file");
std::io::Write::write_all(&mut tmp, &kfx_data).expect("Failed to write temp file");
Some(tmp)
}
#[test]
fn annotated_book_metadata_entity_is_imported() {
let Some(tmp) = decompress_fixture() else {
return;
};
let book = Book::open(tmp.path()).expect("opening annotated-metadata KFX fixture");
let meta = book.metadata();
assert_eq!(meta.title, "Annotated Entity Test Book");
assert_eq!(meta.authors, vec!["Boko Test Author".to_string()]);
assert_eq!(meta.publisher.as_deref(), Some("Boko Test Press"));
assert_eq!(meta.language, "en");
assert_eq!(meta.identifier, "synthetic-book-id-0001");
assert_eq!(meta.date.as_deref(), Some("2026-01-01"));
}