mirror of
https://github.com/fabro-sh/fabro.git
synced 2026-09-05 08:10:39 +00:00
87 lines
2.5 KiB
Rust
87 lines
2.5 KiB
Rust
use axum::body::Body;
|
|
use axum::http::{Request, StatusCode};
|
|
use fabro_server::test_support::test_app_state_with_runtime_settings_and_options;
|
|
use tower::ServiceExt;
|
|
|
|
use crate::helpers::{response_json, settings_from_toml};
|
|
|
|
#[tokio::test]
|
|
async fn retrieve_server_settings_returns_dense_server_settings_from_app_state() {
|
|
let settings = settings_from_toml(
|
|
r#"
|
|
_version = 1
|
|
|
|
[server.listen]
|
|
type = "tcp"
|
|
address = "127.0.0.1:32276"
|
|
|
|
[server.storage]
|
|
root = "/srv/fabro"
|
|
|
|
[server.scheduler]
|
|
max_concurrent_runs = 9
|
|
|
|
[server.auth]
|
|
methods = ["dev-token", "github"]
|
|
|
|
[server.auth.github]
|
|
allowed_usernames = ["alice"]
|
|
|
|
[server.integrations.github]
|
|
strategy = "app"
|
|
app_id = "12345"
|
|
client_id = "Iv1.abcdef"
|
|
|
|
[server.integrations.github.webhooks]
|
|
strategy = "tailscale_funnel"
|
|
"#,
|
|
);
|
|
let app = fabro_server::test_support::build_test_router(
|
|
test_app_state_with_runtime_settings_and_options(
|
|
settings.server_settings,
|
|
settings.manifest_run_defaults,
|
|
5,
|
|
),
|
|
);
|
|
|
|
let request = Request::builder()
|
|
.method("GET")
|
|
.uri("/api/v1/settings")
|
|
.body(Body::empty())
|
|
.unwrap();
|
|
let response = app.oneshot(request).await.unwrap();
|
|
|
|
let body = response_json(response, StatusCode::OK, "GET /api/v1/settings").await;
|
|
let top_level = body
|
|
.as_object()
|
|
.expect("server settings response should be an object");
|
|
assert!(top_level.contains_key("server"));
|
|
|
|
assert_eq!(body["server"]["listen"]["type"], "tcp");
|
|
assert_eq!(body["server"]["listen"]["address"], "127.0.0.1:32276");
|
|
assert_eq!(body["server"]["storage"]["root"], "/srv/fabro");
|
|
assert_eq!(body["server"]["scheduler"]["max_concurrent_runs"], 9);
|
|
assert_eq!(body["server"]["auth"]["methods"][0], "dev-token");
|
|
assert_eq!(body["server"]["auth"]["methods"][1], "github");
|
|
assert_eq!(
|
|
body["server"]["auth"]["github"]["allowed_usernames"][0],
|
|
"alice"
|
|
);
|
|
assert_eq!(
|
|
body["server"]["integrations"]["github"]["client_id"],
|
|
"Iv1.abcdef"
|
|
);
|
|
assert!(
|
|
body["server"].get("ip_allowlist").is_none(),
|
|
"settings response should not expose removed server IP allowlist"
|
|
);
|
|
assert!(
|
|
body["server"]["integrations"]["github"]["webhooks"]
|
|
.get("ip_allowlist")
|
|
.is_none(),
|
|
"settings response should not expose removed GitHub webhook IP allowlist"
|
|
);
|
|
assert!(body.get("features").is_none());
|
|
assert!(body.get("cli").is_none());
|
|
assert!(body.get("run").is_none());
|
|
}
|