#![allow(clippy::unwrap_used)]
#![allow(missing_docs)]
#![allow(clippy::missing_panics_doc)]
#[test]
fn test_studio_shell_has_all_tab_items() {
use fraiseql_server::routes::studio::studio_shell_html;
let html = studio_shell_html();
for section in ["data", "auth", "storage", "functions", "metrics"] {
assert!(
html.contains(&format!("value=\"{section}\"")),
"Shell must have a tab item for '{section}'"
);
}
}
#[test]
fn test_studio_shell_has_login_dialog() {
use fraiseql_server::routes::studio::studio_shell_html;
let html = studio_shell_html();
assert!(html.contains("login-dialog"), "Shell must have a login dialog");
assert!(html.contains("login-form"), "Shell must have a login form");
assert!(html.contains("token-input"), "Shell must have a token input");
}
#[test]
fn test_studio_shell_loads_js_as_module() {
use fraiseql_server::routes::studio::studio_shell_html;
let html = studio_shell_html();
assert!(html.contains("type=\"module\""), "app.js must be loaded as an ES module");
}
#[test]
fn test_studio_shell_references_css() {
use fraiseql_server::routes::studio::studio_shell_html;
let html = studio_shell_html();
assert!(html.contains("app.css"), "Shell must reference app.css");
}
#[test]
fn test_all_admin_types_importable() {
use fraiseql_server::routes::studio::{
admin::{AdminHealthResponse, AdminSchemaResponse},
metrics_summary::MetricsSummary,
};
let _ = AdminHealthResponse {
uptime_secs: 0,
version: String::new(),
pool_active: None,
pool_idle: None,
pool_max: None,
cache_hit_rate: None,
cache_entries: None,
};
let _ = AdminSchemaResponse {
schema: serde_json::Value::Null,
};
let _ = MetricsSummary::zero();
}
#[test]
fn test_studio_routes_are_distinct() {
use fraiseql_server::routes::studio::{studio_asset_handler, studio_handler};
let _: fn() -> _ = studio_handler;
let _: fn(_: axum::extract::Path<String>) -> _ = studio_asset_handler;
}