use proptest::prelude::*;
use ricecoder_storage::config::{Document, DocumentLoader};
use ricecoder_storage::types::DocumentFormat;
use tempfile::TempDir;
fn document_content_strategy() -> impl Strategy<Value = String> {
r"[a-zA-Z0-9\n\r\t !@#$%^&*()_+=\-\[\]{};:',.<>?/\\|`~]*".prop_map(|s| s.to_string())
}
proptest! {
#[test]
fn prop_yaml_document_roundtrip(content in document_content_strategy()) {
let temp_dir = TempDir::new().expect("Failed to create temp dir");
let file_path = temp_dir.path().join("document.yaml");
let original = Document {
content: content.clone(),
format: DocumentFormat::Yaml,
};
DocumentLoader::save_to_file(&original, &file_path)
.expect("Failed to save document");
let loaded = DocumentLoader::load_from_file(&file_path)
.expect("Failed to load document");
prop_assert_eq!(original, loaded);
}
#[test]
fn prop_markdown_document_roundtrip(content in document_content_strategy()) {
let temp_dir = TempDir::new().expect("Failed to create temp dir");
let file_path = temp_dir.path().join("document.md");
let original = Document {
content: content.clone(),
format: DocumentFormat::Markdown,
};
DocumentLoader::save_to_file(&original, &file_path)
.expect("Failed to save document");
let loaded = DocumentLoader::load_from_file(&file_path)
.expect("Failed to load document");
prop_assert_eq!(original, loaded);
}
#[test]
fn prop_yaml_format_detection(content in document_content_strategy()) {
let temp_dir = TempDir::new().expect("Failed to create temp dir");
let file_path = temp_dir.path().join("document.yaml");
let doc = Document {
content: content.clone(),
format: DocumentFormat::Yaml,
};
DocumentLoader::save_to_file(&doc, &file_path)
.expect("Failed to save document");
let detected_format = DocumentLoader::detect_format(&file_path)
.expect("Failed to detect format");
prop_assert_eq!(detected_format, DocumentFormat::Yaml);
}
#[test]
fn prop_markdown_format_detection(content in document_content_strategy()) {
let temp_dir = TempDir::new().expect("Failed to create temp dir");
let file_path = temp_dir.path().join("document.md");
let doc = Document {
content: content.clone(),
format: DocumentFormat::Markdown,
};
DocumentLoader::save_to_file(&doc, &file_path)
.expect("Failed to save document");
let detected_format = DocumentLoader::detect_format(&file_path)
.expect("Failed to detect format");
prop_assert_eq!(detected_format, DocumentFormat::Markdown);
}
#[test]
fn prop_document_content_preservation(content in document_content_strategy()) {
let temp_dir = TempDir::new().expect("Failed to create temp dir");
let file_path = temp_dir.path().join("document.yaml");
let original = Document {
content: content.clone(),
format: DocumentFormat::Yaml,
};
DocumentLoader::save_to_file(&original, &file_path)
.expect("Failed to save document");
let loaded = DocumentLoader::load_from_file(&file_path)
.expect("Failed to load document");
prop_assert_eq!(loaded.content, content);
}
#[test]
fn prop_both_formats_preserve_content(content in document_content_strategy()) {
let temp_dir = TempDir::new().expect("Failed to create temp dir");
let yaml_path = temp_dir.path().join("document.yaml");
let md_path = temp_dir.path().join("document.md");
let yaml_doc = Document {
content: content.clone(),
format: DocumentFormat::Yaml,
};
let md_doc = Document {
content: content.clone(),
format: DocumentFormat::Markdown,
};
DocumentLoader::save_to_file(&yaml_doc, &yaml_path)
.expect("Failed to save YAML document");
DocumentLoader::save_to_file(&md_doc, &md_path)
.expect("Failed to save Markdown document");
let loaded_yaml = DocumentLoader::load_from_file(&yaml_path)
.expect("Failed to load YAML document");
let loaded_md = DocumentLoader::load_from_file(&md_path)
.expect("Failed to load Markdown document");
prop_assert_eq!(loaded_yaml.content, content.clone());
prop_assert_eq!(loaded_md.content, content);
}
}