use apollo_configuration::configuration;
use apollo_configuration::parse_yaml;
use apollo_configuration::types::Url;
#[configuration]
struct OptionConfig {
endpoint: Option<Url>,
}
#[test]
fn option_some_parses() {
let config: OptionConfig =
parse_yaml("endpoint: https://example.com", &Default::default()).unwrap();
assert_eq!(
config.endpoint.as_ref().unwrap().as_str(),
"https://example.com/"
);
}
#[test]
fn option_none_parses() {
let config: OptionConfig = parse_yaml("{}", &Default::default()).unwrap();
assert!(config.endpoint.is_none());
}
#[test]
fn option_explicit_null_parses() {
let config: OptionConfig = parse_yaml("endpoint: null", &Default::default()).unwrap();
assert!(config.endpoint.is_none());
}
#[test]
fn option_value_error_propagates() {
let result = parse_yaml::<OptionConfig>("endpoint: '://invalid'", &Default::default());
let err = result.expect_err("should fail to parse invalid URL");
assert_eq!(
format!("{err}"),
"failed to parse value: relative URL without a base"
);
}