feat: add main features
Agents for developpement added + frontend add + backend added. Git viewer created + agent and template creator + layout and project creator
This commit is contained in:
104
crates/domain/tests/context_injection.rs
Normal file
104
crates/domain/tests/context_injection.rs
Normal file
@ -0,0 +1,104 @@
|
||||
//! 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 { .. }
|
||||
));
|
||||
}
|
||||
Reference in New Issue
Block a user