Files
IdeA/crates/domain/tests/context_injection.rs
Blomios 307ae71857 feat: add main features
Agents for developpement added + frontend add + backend added. Git viewer created + agent and template creator + layout and project creator
2026-06-06 01:27:01 +02:00

105 lines
2.7 KiB
Rust

//! Validation of the four `ContextInjection` variants (ARCHITECTURE §3.2).
use domain::{ContextInjection, DomainError};
// --- ConventionFile -------------------------------------------------------
#[test]
fn convention_file_relative_ok() {
let ci = ContextInjection::convention_file("CLAUDE.md").unwrap();
assert!(matches!(ci, ContextInjection::ConventionFile { target } if target == "CLAUDE.md"));
}
#[test]
fn convention_file_nested_relative_ok() {
assert!(ContextInjection::convention_file("docs/AGENTS.md").is_ok());
}
#[test]
fn convention_file_rejects_absolute() {
assert!(matches!(
ContextInjection::convention_file("/etc/CLAUDE.md").unwrap_err(),
DomainError::PathNotRelativeSafe { .. }
));
}
#[test]
fn convention_file_rejects_dotdot() {
assert!(matches!(
ContextInjection::convention_file("../CLAUDE.md").unwrap_err(),
DomainError::PathNotRelativeSafe { .. }
));
}
#[test]
fn convention_file_rejects_windows_drive() {
assert!(matches!(
ContextInjection::convention_file("C:\\CLAUDE.md").unwrap_err(),
DomainError::PathNotRelativeSafe { .. }
));
}
// --- Flag -----------------------------------------------------------------
#[test]
fn flag_non_empty_ok() {
let ci = ContextInjection::flag("--context-file {path}").unwrap();
assert!(matches!(ci, ContextInjection::Flag { flag } if flag == "--context-file {path}"));
}
#[test]
fn flag_rejects_empty() {
assert!(matches!(
ContextInjection::flag("").unwrap_err(),
DomainError::EmptyField { .. }
));
assert!(matches!(
ContextInjection::flag(" ").unwrap_err(),
DomainError::EmptyField { .. }
));
}
// --- Stdin ----------------------------------------------------------------
#[test]
fn stdin_variant() {
assert_eq!(ContextInjection::stdin(), ContextInjection::Stdin);
}
// --- Env ------------------------------------------------------------------
#[test]
fn env_valid_identifier_ok() {
assert!(ContextInjection::env("AGENT_CONTEXT_FILE").is_ok());
assert!(ContextInjection::env("_private").is_ok());
assert!(ContextInjection::env("X1").is_ok());
}
#[test]
fn env_rejects_leading_digit() {
assert!(matches!(
ContextInjection::env("1BAD").unwrap_err(),
DomainError::InvalidEnvVar { .. }
));
}
#[test]
fn env_rejects_invalid_chars() {
assert!(matches!(
ContextInjection::env("BAD-VAR").unwrap_err(),
DomainError::InvalidEnvVar { .. }
));
assert!(matches!(
ContextInjection::env("HAS SPACE").unwrap_err(),
DomainError::InvalidEnvVar { .. }
));
}
#[test]
fn env_rejects_empty() {
assert!(matches!(
ContextInjection::env("").unwrap_err(),
DomainError::InvalidEnvVar { .. }
));
}