use serde_json::Value;
#[test]
fn every_shared_fixture_answers_its_expectation_in_rust() {
let fixtures: Value = serde_json::from_str(include_str!("../fixtures/cases.json")).expect("cases.json is JSON");
let cases = fixtures["cases"].as_array().expect("cases");
assert!(cases.len() >= 20, "the fixture set is all there");
for case in cases {
let (function, name) = (case["fn"].as_str().unwrap(), case["name"].as_str().unwrap());
let got = techne_sdk::call(function, &case["args"]).unwrap_or_else(|e| panic!("{function} {name}: {e}"));
assert_eq!(got, case["expect"], "{function}: {name}");
}
}
#[test]
fn an_unknown_function_is_an_error() {
assert!(techne_sdk::call("nope", &serde_json::json!({})).is_err());
}
#[test]
fn put_and_put_plan_refuse_without_now() {
let fixtures: Value = serde_json::from_str(include_str!("../fixtures/cases.json")).expect("cases.json is JSON");
for function in ["put", "putPlan"] {
let case = fixtures["cases"].as_array().unwrap().iter().find(|c| c["fn"] == function).expect("a fixture");
let mut args = case["args"].clone();
assert!(args.as_object_mut().unwrap().remove("now").is_some(), "{function}: the fixture passes now");
let err = techne_sdk::call(function, &args).expect_err("refused without now");
assert!(err.contains("now"), "{function}: names what is missing: {err}");
}
}