Files
fil/crates/kreuzberg/tests/iwork_integration.rs
Henrik Jess Nielsen b4c07d3693
All checks were successful
Deploy fil (kreuzberg) / deploy (push) Successful in 49s
Nomad changes
2026-06-01 23:40:55 +02:00

99 lines
3.5 KiB
Rust

//! Integration tests for Apple iWork format extractors.
//!
//! These tests verify that .pages, .numbers, and .key files can be
//! opened, parsed, and produce non-empty text output.
#[cfg(feature = "iwork")]
mod iwork_tests {
use kreuzberg::core::config::ExtractionConfig;
use std::path::PathBuf;
fn test_doc_path(name: &str) -> PathBuf {
let manifest = env!("CARGO_MANIFEST_DIR");
PathBuf::from(manifest).join("../../test_documents/iwork").join(name)
}
// ── MIME type detection integration tests ───────────────────────────
#[test]
fn test_mime_detection_numbers_file() {
let path = test_doc_path("test.numbers");
if !path.exists() {
eprintln!("Skipping: test.numbers not found at {:?}", path);
return;
}
let mime = kreuzberg::core::mime::detect_mime_type(&path, true).unwrap();
assert_eq!(
mime, "application/x-iwork-numbers-sffnumbers",
"Should detect .numbers MIME type from extension"
);
}
#[test]
fn test_mime_detection_pages_file() {
let path = test_doc_path("test.pages");
if !path.exists() {
eprintln!("Skipping: test.pages not found at {:?}", path);
return;
}
let mime = kreuzberg::core::mime::detect_mime_type(&path, true).unwrap();
assert_eq!(
mime, "application/x-iwork-pages-sffpages",
"Should detect .pages MIME type from extension"
);
}
// ── Extraction integration tests ─────────────────────────────────────
#[tokio::test]
#[cfg(feature = "tokio-runtime")]
async fn test_extract_numbers_document() {
let path = test_doc_path("test.numbers");
if !path.exists() {
eprintln!("Skipping: test.numbers not found at {:?}", path);
return;
}
let content = std::fs::read(&path).expect("Failed to read test.numbers");
let config = ExtractionConfig::default();
let result = kreuzberg::extract_bytes(&content, "application/x-iwork-numbers-sffnumbers", &config)
.await
.expect("Extraction should not fail on valid file");
// A valid Numbers file should produce some text output
assert!(
!result.content.is_empty(),
"Numbers extraction should produce non-empty text. Got: {:?}",
&result.content[..result.content.len().min(200)]
);
}
#[tokio::test]
#[cfg(feature = "tokio-runtime")]
async fn test_extract_pages_document() {
let path = test_doc_path("test.pages");
if !path.exists() {
eprintln!("Skipping: test.pages not found at {:?}", path);
return;
}
let content = std::fs::read(&path).expect("Failed to read test.pages");
let config = ExtractionConfig::default();
// Extraction should not panic — it may produce empty content if the
// fixture is a stub (non-Snappy compressed IWA), but should not error.
let result = kreuzberg::extract_bytes(&content, "application/x-iwork-pages-sffpages", &config)
.await
.expect("Extraction should not fail on valid ZIP file");
// For any valid .pages file, extraction should succeed (even if empty)
assert!(
result.mime_type.as_ref() == "application/x-iwork-pages-sffpages",
"MIME type should be preserved in result"
);
}
}