apsis-book/tests/tools_registry.rs

66 lines
2.3 KiB
Rust

//! Tests for the tool registry.
//!
//! They live here rather than inside the module so that `src/` holds no test
//! code, as it does in `apsis-rs`. An integration test is a separate crate and
//! reaches only what the library makes public, so the few internal items the
//! tests need are opened through `apsis_book::testkit`.
use apsis_book::testkit::json_object;
use apsis_book::tools::*;
#[test]
fn registry_is_populated() {
let registry = Registry::new();
assert!(registry.entries().len() >= 7);
assert!(registry.get("parse-tle").is_some());
assert!(registry.get("sgp4-propagate").is_some());
assert!(registry.get("missing").is_none());
}
#[test]
fn registry_json_lists_tools_and_categories() {
let value = registry_json(&Registry::new());
assert!(!value.get("tools").unwrap().as_array().is_empty());
assert!(!value.get("categories").unwrap().as_array().is_empty());
}
#[test]
fn number_parameters_honour_defaults_and_bounds() {
let registry = Registry::new();
let tool = registry.get("sgp4-propagate").unwrap();
let values = json_object! {};
let params = Params::new(tool, &values).unwrap();
assert_eq!(params.number("minutes").unwrap(), 0.0);
}
#[test]
fn rejects_out_of_range_values() {
let registry = Registry::new();
let tool = registry.get("sgp4-propagate").unwrap();
let values = json_object! { "minutes" => 5_000_000.0 };
let params = Params::new(tool, &values).unwrap();
let error = params.number("minutes").unwrap_err();
assert_eq!(error.parameter, Some("minutes"));
}
#[test]
fn select_parameters_reject_unknown_choices() {
let registry = Registry::new();
let tool = registry.get("sgp4-propagate").unwrap();
let values = json_object! { "model" => "wgs99" };
let params = Params::new(tool, &values).unwrap();
assert!(params.choice("model").is_err());
let values = json_object! { "model" => "WGS84" };
let params = Params::new(tool, &values).unwrap();
assert_eq!(params.choice("model").unwrap(), "wgs84");
}
#[test]
fn string_numbers_are_accepted() {
let registry = Registry::new();
let tool = registry.get("sgp4-propagate").unwrap();
let values = json_object! { "minutes" => "12.5" };
let params = Params::new(tool, &values).unwrap();
assert_eq!(params.number("minutes").unwrap(), 12.5);
}