diff --git a/crates/engine/src/tests_package.rs b/crates/engine/src/tests_package.rs index 2e22c64f..20f553c3 100644 --- a/crates/engine/src/tests_package.rs +++ b/crates/engine/src/tests_package.rs @@ -368,3 +368,31 @@ fn identical_stale_paths_in_different_nested_documents_keep_separate_assets() { assert_eq!(opened["missingLinks"], json!([]), "{filename}: {opened}"); } } + +#[test] +fn packaging_nested_files_preserves_embedded_preview_pdf_and_compression() { + let dir = Folder::new("package-native-extras"); + let mut parent = poster_with_placed_document(&dir); + let source = dir.file("art/part.vectorcraft"); + let original = std::fs::read(&source).unwrap(); + let doc = vectorcraft_format::load(&original).unwrap(); + let preview = png(8, 8, BLUE); + let pdf = b"%PDF-1.7\n%Embedded client preview\n".to_vec(); + let mut opts = vectorcraft_format::SaveOptions::for_doc(&doc); + opts.preview = Some(preview.clone()); + opts.pdf = Some(pdf.clone()); + opts.compress = true; + write(&source, &vectorcraft_format::save_with(&doc, &opts).unwrap()); + + let result = run(&mut parent, "file.package", json!({ "folder": dir.file("delivery") })); + assert_eq!(result["missingLinks"], json!([]), "{result}"); + let packaged = std::fs::read(dir.0.join("delivery/poster Folder/Links/part.vectorcraft")).unwrap(); + assert!(packaged.starts_with(&[0x1f, 0x8b]), "compression must be preserved"); + assert_eq!(vectorcraft_format::preview(&packaged), Some(preview)); + assert_eq!(vectorcraft_format::pdf_content(&packaged), Some(pdf)); + let nested = vectorcraft_format::load(&packaged).unwrap(); + let mut images = Vec::new(); + nested.visit_images(|_, image| images.push(image.link.clone())); + assert_eq!(images.len(), 1); + assert_eq!(images[0].as_ref().unwrap().relative.as_deref(), Some("photo.png")); +}