use edifact_mapper::{DataDir, Mapper, MapperError};
#[test]
fn test_data_dir_auto_with_env_var() {
let dir = DataDir::path("/tmp/test-edifact-data");
assert_eq!(dir.data_path().to_str().unwrap(), "/tmp/test-edifact-data");
}
#[test]
fn test_data_dir_explicit_path() {
let dir = DataDir::path("/opt/edifact");
assert_eq!(dir.data_path().to_str().unwrap(), "/opt/edifact");
}
#[test]
fn test_data_dir_bundle_path() {
let dir = DataDir::path("/data");
assert_eq!(
dir.bundle_path("FV2504").to_str().unwrap(),
"/data/edifact-data-FV2504.bin"
);
}
#[test]
fn test_data_dir_eager_chaining() {
let dir = DataDir::path("/data").eager(&["FV2504", "FV2510"]);
assert_eq!(dir.eager_fvs(), &["FV2504", "FV2510"]);
}
#[test]
fn test_mapper_missing_bundle() {
let dir = DataDir::path("/nonexistent/path");
let mapper = Mapper::from_data_dir(dir).unwrap();
match mapper.conversion_service("FV2504", "UTILMD_Strom") {
Err(MapperError::BundleNotFound { .. }) => {} Err(e) => panic!("Expected BundleNotFound, got: {e}"),
Ok(_) => panic!("Expected error, got Ok"),
}
}
#[test]
fn test_mapper_eager_missing_bundle_fails() {
let dir = DataDir::path("/nonexistent/path").eager(&["FV2504"]);
match Mapper::from_data_dir(dir) {
Err(MapperError::BundleNotFound { .. }) => {} Err(e) => panic!("Expected BundleNotFound, got: {e}"),
Ok(_) => panic!("Expected error, got Ok"),
}
}
#[test]
fn test_mapper_no_bundles_loaded_initially() {
let dir = DataDir::path("/nonexistent/path");
let mapper = Mapper::from_data_dir(dir).unwrap();
assert!(mapper.loaded_format_versions().is_empty());
}
#[test]
fn test_mapper_from_real_bundle() {
let dist = std::path::Path::new(env!("CARGO_MANIFEST_DIR")).join("../../dist");
assert!(
dist.join("edifact-data-FV2504.bin").exists(),
"no FV2504 bundle at {}: run `cargo run -p automapper-generator -- bundle-data`",
dist.display()
);
let mapper =
Mapper::from_data_dir(DataDir::path(&dist).eager(&["FV2504"])).expect("load bundle");
let variants = mapper.variants("FV2504").unwrap();
assert!(variants.contains(&"UTILMD_Strom".to_string()));
let engine = mapper.engine("FV2504", "UTILMD_Strom", "55001").unwrap();
assert!(!engine.definitions().is_empty());
}