Initial Dever 0.0.1
This commit is contained in:
commit
81233d098c
1479 files changed
+163782
No files matched your search
@@ -0,0 +1,159 @@
|
||||
use super::{execute, request, token};
|
||||
use serde_json::{Value, json};
|
||||
use std::path::Path;
|
||||
|
||||
fn get(port: u16, action: &str, credentials: &str) -> (u16, Value) {
|
||||
let (status, body) = request(
|
||||
port,
|
||||
"GET",
|
||||
&format!("/demo/account/admin/roles/{action}"),
|
||||
"fixture.test",
|
||||
credentials,
|
||||
"",
|
||||
);
|
||||
(status, serde_json::from_str(&body).unwrap())
|
||||
}
|
||||
|
||||
fn post(port: u16, action: &str, credentials: &str, input: Value) -> (u16, Value) {
|
||||
let (status, body) = request(
|
||||
port,
|
||||
"POST",
|
||||
&format!("/demo/account/admin/roles/{action}"),
|
||||
"fixture.test",
|
||||
&format!("{credentials}Content-Type: application/json\r\n"),
|
||||
&input.to_string(),
|
||||
);
|
||||
(status, serde_json::from_str(&body).unwrap())
|
||||
}
|
||||
|
||||
pub(super) fn check(binary: &Path, port: u16, owner: &str) {
|
||||
assert_eq!(get(port, "protected_me?unexpected=1", owner).0, 403);
|
||||
assert_eq!(
|
||||
post(port, "save_role", owner, json!({"unexpected":1})).0,
|
||||
403
|
||||
);
|
||||
assert_eq!(get(port, "current_permissions", owner).1["data"], json!([]));
|
||||
let bootstrap = execute(
|
||||
binary,
|
||||
"dever.auth.owner",
|
||||
r#"{"site":"admin","user_id":1}"#,
|
||||
);
|
||||
assert!(
|
||||
bootstrap.status.success(),
|
||||
"{}",
|
||||
String::from_utf8_lossy(&bootstrap.stderr)
|
||||
);
|
||||
assert_eq!(get(port, "protected_me", owner).0, 200);
|
||||
assert_eq!(get(port, "protected_me?unexpected=1", owner).0, 400);
|
||||
assert_eq!(get(port, "is_owner?user_id=1", owner).1["data"], true);
|
||||
let directory = get(port, "permissions", owner).1["data"]
|
||||
.as_array()
|
||||
.unwrap()
|
||||
.clone();
|
||||
assert!(
|
||||
directory
|
||||
.iter()
|
||||
.any(|entry| entry["key"] == "demo.account.admin.protected_me")
|
||||
);
|
||||
assert!(
|
||||
!directory
|
||||
.iter()
|
||||
.any(|entry| entry["key"] == "demo.account.admin.me")
|
||||
);
|
||||
assert_eq!(
|
||||
get(port, "current_permissions", owner).1["data"],
|
||||
json!(directory)
|
||||
);
|
||||
for (action, input) in [
|
||||
("delete_role", json!({"role_id":"owner"})),
|
||||
("disable_role", json!({"role_id":"owner"})),
|
||||
("revoke_role", json!({"role_id":"owner","user_id":1})),
|
||||
("grant_role", json!({"role_id":"owner","user_id":2})),
|
||||
(
|
||||
"save_role",
|
||||
json!({"id":"owner","name":"changed","all_permissions":false,"permission_keys":[]}),
|
||||
),
|
||||
] {
|
||||
assert_eq!(post(port, action, owner, input).0, 403, "{action}");
|
||||
}
|
||||
let seeded = execute(
|
||||
binary,
|
||||
"demo.account.seed",
|
||||
r#"{"subject":"reader","session":"reader-session"}"#,
|
||||
);
|
||||
assert!(seeded.status.success());
|
||||
let reader = format!(
|
||||
"Authorization: Bearer {}\r\n",
|
||||
token("reader", "reader-session")
|
||||
);
|
||||
assert_eq!(get(port, "protected_me", &reader).0, 403);
|
||||
let role = json!({"id":"reader","name":"Reader","all_permissions":false,"permission_keys":["demo.account.admin.protected_me"]});
|
||||
assert_eq!(post(port, "save_role", owner, role.clone()).0, 200);
|
||||
assert_eq!(
|
||||
post(
|
||||
port,
|
||||
"grant_role",
|
||||
owner,
|
||||
json!({"user_id":2,"role_id":"reader"})
|
||||
)
|
||||
.0,
|
||||
200
|
||||
);
|
||||
assert_eq!(get(port, "protected_me", &reader).0, 200);
|
||||
assert_eq!(
|
||||
get(port, "user_roles?user_id=2", &reader).1["data"][0]["permission_keys"],
|
||||
json!(["demo.account.admin.protected_me"])
|
||||
);
|
||||
assert_eq!(get(port, "is_owner?user_id=2", &reader).1["data"], false);
|
||||
assert_eq!(post(port, "save_role", &reader, role.clone()).0, 403);
|
||||
let mut invalid = role.clone();
|
||||
invalid["permission_keys"] = json!(["demo.account.admin.unknown"]);
|
||||
assert_eq!(post(port, "save_role", owner, invalid).0, 400);
|
||||
assert_eq!(get(port, "protected_me", &reader).0, 200);
|
||||
assert_eq!(
|
||||
post(port, "role_fail", owner, json!({"id":"rolled_back"})).0,
|
||||
409
|
||||
);
|
||||
assert!(get(port, "role?id=rolled_back", owner).1["data"].is_null());
|
||||
assert_eq!(
|
||||
post(port, "disable_role", owner, json!({"role_id":"reader"})).0,
|
||||
200
|
||||
);
|
||||
assert_eq!(get(port, "protected_me", &reader).0, 403);
|
||||
assert_eq!(
|
||||
get(port, "role?id=reader", owner).1["data"]["enabled"],
|
||||
false
|
||||
);
|
||||
assert_eq!(post(port, "save_role", owner, role).0, 200);
|
||||
assert_eq!(get(port, "protected_me", &reader).0, 200);
|
||||
assert_eq!(
|
||||
post(
|
||||
port,
|
||||
"revoke_role",
|
||||
owner,
|
||||
json!({"user_id":2,"role_id":"reader"})
|
||||
)
|
||||
.0,
|
||||
200
|
||||
);
|
||||
assert_eq!(get(port, "protected_me", &reader).0, 403);
|
||||
assert_eq!(
|
||||
post(
|
||||
port,
|
||||
"grant_role",
|
||||
owner,
|
||||
json!({"user_id":2,"role_id":"reader"})
|
||||
)
|
||||
.0,
|
||||
200
|
||||
);
|
||||
assert_eq!(
|
||||
post(port, "delete_role", owner, json!({"role_id":"reader"})).0,
|
||||
200
|
||||
);
|
||||
assert_eq!(
|
||||
get(port, "user_roles?user_id=2", owner).1["data"],
|
||||
json!([])
|
||||
);
|
||||
assert_eq!(get(port, "protected_me", &reader).0, 403);
|
||||
}
|
||||
Reference in new issue
Block a user