pub mod builder;
pub mod prelude;
pub fn load_plan(path: &str) -> anyhow::Result<momus_core::ast::TestPlan> {
let content = std::fs::read_to_string(path)?;
let plan: momus_core::ast::TestPlan = serde_json::from_str(&content)?;
Ok(plan)
}
pub fn parse_plan(json: &str) -> anyhow::Result<momus_core::ast::TestPlan> {
let plan: momus_core::ast::TestPlan = serde_json::from_str(json)?;
Ok(plan)
}
pub fn validate_plan(plan: &momus_core::ast::TestPlan) -> anyhow::Result<()> {
if plan.name.is_empty() {
anyhow::bail!("Plan name must not be empty");
}
if plan.steps.is_empty() && plan.setup.is_empty() && plan.teardown.is_empty() {
anyhow::bail!("Plan must have at least one step, setup, or teardown");
}
Ok(())
}
pub use momus_bench;
pub use momus_chaos;
pub use momus_contract;
pub use momus_convert;
pub use momus_core;
pub use momus_diff;
pub use momus_fuzz;
pub use momus_guard;
pub use momus_mock;
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_load_plan_from_json() {
let json = r#"{
"name": "test",
"base_url": "http://localhost",
"steps": [
{
"type": "request",
"name": "health",
"method": "GET",
"url": "/health",
"assert": [{ "status": 200 }]
}
]
}"#;
let plan = parse_plan(json).unwrap();
assert_eq!(plan.name, "test");
assert_eq!(plan.total_tests(), 1);
}
#[test]
fn test_validate_plan_ok() {
let plan = momus_core::ast::TestPlan {
name: "test".into(),
base_url: "http://localhost".into(),
default_headers: std::collections::HashMap::new(),
steps: vec![momus_core::ast::Step::Request(
momus_core::ast::RequestStep {
name: "r1".into(),
method: momus_core::ast::Method::Get,
url: "/".into(),
headers: std::collections::HashMap::new(),
body: None,
assert: vec![],
save_as: String::new(),
soft_fail: false,
dataset: None,
},
)],
setup: vec![],
teardown: vec![],
};
assert!(validate_plan(&plan).is_ok());
}
#[test]
fn test_validate_plan_empty_name() {
let plan = momus_core::ast::TestPlan {
name: "".into(),
base_url: "http://localhost".into(),
default_headers: std::collections::HashMap::new(),
steps: vec![],
setup: vec![],
teardown: vec![],
};
assert!(validate_plan(&plan).is_err());
}
#[test]
fn test_validate_plan_no_steps() {
let plan = momus_core::ast::TestPlan {
name: "empty".into(),
base_url: "http://localhost".into(),
default_headers: std::collections::HashMap::new(),
steps: vec![],
setup: vec![],
teardown: vec![],
};
assert!(validate_plan(&plan).is_err());
}
}