use std::path::PathBuf;
use trimdown::{detect_file_type, FileType};
#[test]
fn test_fixture_images_exist() {
let fixtures = vec![
"tests/fixtures/images/sample.jpg",
"tests/fixtures/images/sample.png",
"tests/fixtures/images/sample.webp",
"tests/fixtures/images/large.jpg",
];
for fixture in fixtures {
let path = PathBuf::from(fixture);
assert!(path.exists(), "Fixture file not found: {}", fixture);
let metadata = std::fs::metadata(&path).unwrap();
assert!(metadata.len() > 0, "Fixture file is empty: {}", fixture);
}
}
#[test]
fn test_fixture_videos_exist() {
let fixtures = vec![
"tests/fixtures/videos/sample.mp4",
"tests/fixtures/videos/sample2.mp4",
];
for fixture in fixtures {
let path = PathBuf::from(fixture);
assert!(path.exists(), "Fixture file not found: {}", fixture);
let metadata = std::fs::metadata(&path).unwrap();
assert!(metadata.len() > 0, "Fixture file is empty: {}", fixture);
}
}
#[test]
fn test_fixture_pdfs_exist() {
let fixtures = vec![
"tests/fixtures/pdfs/sample.pdf",
];
for fixture in fixtures {
let path = PathBuf::from(fixture);
assert!(path.exists(), "Fixture file not found: {}", fixture);
let metadata = std::fs::metadata(&path).unwrap();
assert!(metadata.len() > 0, "Fixture file is empty: {}", fixture);
}
}
#[test]
fn test_fixture_office_exist() {
let fixtures = vec![
"tests/fixtures/office/sample.pptx",
"tests/fixtures/office/sample.docx",
];
for fixture in fixtures {
let path = PathBuf::from(fixture);
assert!(path.exists(), "Fixture file not found: {}", fixture);
let metadata = std::fs::metadata(&path).unwrap();
assert!(metadata.len() > 0, "Fixture file is empty: {}", fixture);
}
}
#[test]
fn test_detect_fixture_file_types() {
let test_cases = vec![
("tests/fixtures/videos/sample.mp4", FileType::Video),
("tests/fixtures/pdfs/sample.pdf", FileType::Pdf),
("tests/fixtures/office/sample.pptx", FileType::PowerPoint),
("tests/fixtures/office/sample.docx", FileType::Word),
];
for (path, expected_type) in test_cases {
let detected = detect_file_type(&PathBuf::from(path)).unwrap();
assert_eq!(detected, expected_type, "Failed to detect type for {}", path);
}
}
#[test]
fn test_fixture_file_sizes() {
let path = PathBuf::from("tests/fixtures/images/large.jpg");
let metadata = std::fs::metadata(&path).unwrap();
assert!(metadata.len() > 100_000, "Large image should be > 100KB");
let path = PathBuf::from("tests/fixtures/videos/sample.mp4");
let metadata = std::fs::metadata(&path).unwrap();
assert!(metadata.len() > 10_000, "Video should be > 10KB");
let path = PathBuf::from("tests/fixtures/pdfs/sample.pdf");
let metadata = std::fs::metadata(&path).unwrap();
assert!(metadata.len() > 500, "PDF should be > 500 bytes");
}
#[test]
fn test_fixture_image_formats() {
let formats: Vec<(&str, &[u8])> = vec![
("tests/fixtures/images/sample.jpg", &[0xFF, 0xD8, 0xFF]),
("tests/fixtures/images/sample.png", &[0x89, 0x50, 0x4E, 0x47]),
];
for (path, magic_bytes) in formats {
let mut file = std::fs::File::open(path).unwrap();
let mut buffer = vec![0u8; magic_bytes.len()];
use std::io::Read;
file.read_exact(&mut buffer).unwrap();
assert_eq!(&buffer[..], magic_bytes, "Invalid magic bytes for {}", path);
}
}
#[test]
fn test_fixture_pdf_header() {
let path = "tests/fixtures/pdfs/sample.pdf";
let mut file = std::fs::File::open(path).unwrap();
let mut buffer = vec![0u8; 5];
use std::io::Read;
file.read_exact(&mut buffer).unwrap();
assert_eq!(&buffer[..], b"%PDF-", "Invalid PDF header");
}
#[test]
fn test_fixture_office_zip_structure() {
use std::io::Read;
let fixtures = vec![
"tests/fixtures/office/sample.pptx",
"tests/fixtures/office/sample.docx",
];
for fixture in fixtures {
let mut file = std::fs::File::open(fixture).unwrap();
let mut buffer = vec![0u8; 4];
file.read_exact(&mut buffer).unwrap();
assert_eq!(&buffer[..2], b"PK", "Invalid ZIP header for {}", fixture);
}
}