Files
sausage/host/tests/cred_presentation.rs
T

89 lines
3.0 KiB
Rust

//! Approval text exposes public policy and rejects deceptive display controls.
use sausage::cred::{
Caller, Cred,
edits::{Edit, Operation, OperationRequest},
items::Item,
summary::operation_summary,
};
#[test]
fn summaries_show_public_values_rules_free_use_and_wildcard_risk() {
let item: Item = serde_json::from_value(serde_json::json!({"name":"test","free_use":true,"rules":[{"scheme":"https","hosts":["*.com","api.example"],"port":8443,"path_prefixes":["/"],"methods":null}],"validate_js":null,"transform_js":"","fields":[]})).unwrap();
let text = operation_summary(&Operation::CreateItem { config: item });
for part in [
"without a grant",
"*.com",
"api.example",
"8443",
"wildcard",
] {
assert!(text.contains(part));
}
let text = operation_summary(&Operation::SetFieldValue {
field: "public-id".into(),
value: "public-value".into(),
});
assert!(text.contains("public-id"));
assert!(text.contains("public-value"));
}
#[test]
fn diffs_report_rule_overlaps_for_edits_and_creation() {
let dir = tempfile::tempdir().unwrap();
let c = Cred::open(dir.path()).unwrap();
let caller = Caller::default();
let mut item:Item=serde_json::from_value(serde_json::json!({"name":"first","rules":[{"scheme":"https","hosts":["*.example"],"path_prefixes":["/"],"methods":null}],"validate_js":null,"transform_js":"","fields":[]})).unwrap();
let first = c
.create_item(item.clone(), &caller, c.unlocked().unwrap())
.unwrap();
item.name = "second".into();
item.rules[0].hosts = vec!["api.example".into()];
let create = c
.file_operation_request(
&caller,
"create",
OperationRequest {
item: None,
base_version: None,
change: vec![Operation::CreateItem {
config: item.clone(),
}],
},
)
.unwrap();
assert!(
c.request_diff(&create).unwrap()["overlapping_items"]
.as_array()
.unwrap()
.iter()
.any(|v| v == &first.id)
);
let second = c.create_item(item, &caller, c.unlocked().unwrap()).unwrap();
let mut config = second.clone();
config.name = "edited".into();
let edit = c
.file_edit_request(
&caller,
"edit",
Edit {
item: second.id,
base_version: second.version,
config,
},
)
.unwrap();
assert!(
c.edit_diff(&edit)
.unwrap()
.overlapping_items
.contains(&first.id)
);
}
#[test]
fn summaries_remove_bidi_and_zero_width_controls() {
let text = operation_summary(&Operation::SetName {
name: "a\u{202e}b\u{2066}c\u{200b}d\u{200d}e\u{feff}".into(),
});
for c in ['\u{202e}', '\u{2066}', '\u{200b}', '\u{200d}', '\u{feff}'] {
assert!(!text.contains(c));
}
}