use serde_json::{json, Value};
pub fn bare_id(name: &str) -> &str {
name.rsplit('/').next().unwrap_or(name)
}
pub fn bindings_path(project: &str) -> String {
format!("/v1/projects/{}/composition/bindings", bare_id(project))
}
pub fn enable_body(env: &str) -> Value {
json!({
"capabilityId": "identity",
"slot": "identity",
"providerId": "sylphx-auth",
"environmentId": bare_id(env),
})
}
pub fn organization_id(answer: &Value) -> Option<&str> {
answer.pointer("/config/organizationId")?.as_str()
}
pub fn status(bindings: &Value) -> Value {
let identity: Vec<Value> = bindings
.get("bindings")
.and_then(Value::as_array)
.into_iter()
.flatten()
.filter(|b| b.get("slot").and_then(Value::as_str) == Some("identity"))
.map(|b| {
json!({
"environmentId": b.get("environmentId"),
"provider": b.get("providerId"),
"status": b.get("status"),
"organizationId": b.pointer("/config/organizationId"),
})
})
.collect();
json!({ "enabled": !identity.is_empty(), "bindings": identity })
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn the_request_is_the_documented_binding() {
assert_eq!(
bindings_path("orgs/o/projects/p1"),
"/v1/projects/p1/composition/bindings"
);
assert_eq!(bindings_path("p1"), "/v1/projects/p1/composition/bindings");
assert_eq!(
enable_body("orgs/o/projects/p1/envs/e9"),
json!({
"capabilityId": "identity",
"slot": "identity",
"providerId": "sylphx-auth",
"environmentId": "e9"
})
);
}
#[test]
fn the_answer_names_the_instance() {
let answer = json!({"status": "active", "config": {"organizationId": "org-1"}});
assert_eq!(organization_id(&answer), Some("org-1"));
assert_eq!(organization_id(&json!({"config": {}})), None);
}
#[test]
fn status_lists_only_identity_bindings() {
let list = json!({"bindings": [
{"slot": "identity", "environmentId": "e1", "providerId": "sylphx-auth",
"status": "active", "config": {"organizationId": "org-1"}},
{"slot": "email", "environmentId": "e2", "providerId": "x"},
]});
let on = status(&list);
assert_eq!(on["enabled"], true);
assert_eq!(on["bindings"].as_array().unwrap().len(), 1);
assert_eq!(on["bindings"][0]["organizationId"], "org-1");
assert_eq!(status(&json!({"bindings": []}))["enabled"], false);
assert_eq!(status(&json!({}))["enabled"], false);
}
}