use serde::{Serialize, Deserialize};
use crate::types::*;
use crate::glue::*;
use crate::util::*;
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub struct Tests {
pub sets: Vec<TestSet>
}
impl Tests {
pub fn r#do(self, cleaner: &Cleaner) {
for set in self.sets {
set.r#do(cleaner)
}
}
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct TestSet {
#[serde(default, skip_serializing_if = "is_default")]
pub params_diff: Option<ParamsDiff>,
#[serde(default, skip_serializing_if = "is_default")]
pub job_context: JobContext,
pub tests: Vec<Test>
}
impl TestSet {
pub fn r#do(self, cleaner: &Cleaner) {
let mut cleaner = cleaner.borrowed();
println!(
"TestSet\n params_diff: {}\n job_context: {}",
serde_json::to_string(&self.params_diff).expect("Serialization to never fail."),
serde_json::to_string(&self.job_context).expect("Serialization to never fail.")
);
if let Some(params_diff) = self.params_diff {
params_diff.apply_once(&mut cleaner.params);
}
for test in self.tests {
println!(" Test: {}", serde_json::to_string(&test).expect("Serialition to never fail."));
let task = Task {
config: test.task_config,
job_context: &self.job_context,
cleaner: &cleaner,
#[cfg(feature = "cache")]
cache: CacheHandle {
cache: &Default::default(),
config: Default::default()
},
unthreader: &Default::default()
};
let result1 = task.r#do().expect("The test to execute succesfully.");
assert_eq!(result1, test.result, "The test to return the expected value.");
if test.test_idempotence {
let task = Task {
config: result1.clone().into(),
job_context: &self.job_context,
cleaner: &cleaner,
#[cfg(feature = "cache")]
cache: CacheHandle {
cache: &Default::default(),
config: Default::default()
},
unthreader: &Default::default()
};
let result2 = task.r#do().expect("The idempotence test to be succeed.");
assert_eq!(result2, result1, "Idempotence to be upheld.");
}
}
}
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct Test {
pub task_config: TaskConfig,
pub result: BetterUrl,
#[serde(default = "get_true", skip_serializing_if = "is_true")]
pub test_idempotence: bool
}