use node_app_manifest::{
check_host_contract, required_features, AppManifest, HostFeature, HostFeatureSet,
HostVersion, ManifestRejection,
};
fn load(name: &str) -> AppManifest {
let path = format!("{}/fixtures/composed/{name}", env!("CARGO_MANIFEST_DIR"));
let json = std::fs::read_to_string(&path).unwrap();
AppManifest::from_json(&json).unwrap_or_else(|error| panic!("{name}: {error}"))
}
#[test]
fn incident_widgets_with_app_data_parse_on_this_host() {
for name in ["friends-0.8.5.json", "message-1.1.3.json"] {
let manifest = load(name);
assert!(required_features(&manifest).contains(&HostFeature::UiWidgetData), "{name}");
assert_eq!(check_host_contract(&manifest, &HostFeatureSet::current()), Ok(()), "{name}");
}
}
#[test]
fn incident_widgets_are_rejected_precisely_for_7_1_17() {
let manifest = load("friends-0.8.5.json");
let rejection = check_host_contract(&manifest, &HostFeatureSet::at(HostVersion::new(7, 1, 17)));
assert_eq!(
rejection,
Err(ManifestRejection::HostFeatureMissing {
features: vec!["ui.widget-data".to_string()],
min_host: Some(HostVersion::new(7, 2, 0)),
})
);
}