66 lines
2.3 KiB
Rust
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);
|
|
}
|