use crate::eval::{Value, monadic_architecture::{MonadicComputation, MonadicEvaluationResult}};
use super::{DIContainer, MockConfiguration, TestScenario, TestResult};
use std::collections::HashMap;
#[derive(Debug)]
pub struct TestFixture {
pub container: DIContainer,
pub mock_configs: HashMap<String, MockConfiguration>,
}
impl TestFixture {
pub async fn execute_scenario(&self, scenario: TestScenario) -> TestResult {
let start_time = std::time::Instant::now();
let execution_time = start_time.elapsed().as_millis() as u64;
let mock_result = MonadicEvaluationResult {
computation: MonadicComputation::Pure(Value::Unspecified),
metadata: crate::eval::monadic_architecture::EvaluationMetadata {
steps_taken: 1,
max_stack_depth: 1,
monads_used: vec![],
tail_call_optimized: false,
},
effects: vec![],
metrics: crate::eval::monadic_architecture::EvaluationMetrics {
evaluation_time_ns: execution_time * 1_000_000,
memory_allocated: 1024,
continuations_captured: 0,
io_operations: 0,
},
};
TestResult {
scenario: scenario.clone(),
execution_result: Ok(mock_result.clone()),
execution_time_ms: execution_time,
assertions_passed: Vec::new(),
assertions_failed: Vec::new(),
mock_call_counts: HashMap::new(),
}
}
pub fn get_mock<T: Send + Sync + 'static>(&self, name: &str) -> Option<&T> {
self.container.resolve::<T>(name)
}
}