Lines
97.96 %
Functions
100 %
Branches
use axum::{
Router,
body::Body,
http::{Request, StatusCode},
routing::get,
};
use tower::ServiceExt;
use crate::common::create_test_app_state;
// SIMPLE HANDLERS TESTS (no external dependencies)
#[tokio::test]
async fn test_get_version_handler() {
let app = Router::new().route("/version", get(web::handler::get_version));
let response = app
.oneshot(
Request::builder()
.uri("/version")
.body(Body::empty())
.unwrap(),
)
.await
.unwrap();
assert_eq!(response.status(), StatusCode::OK);
let body = axum::body::to_bytes(response.into_body(), usize::MAX)
let body_str = String::from_utf8(body.to_vec()).unwrap();
// Should contain some version info (git hash)
assert!(!body_str.is_empty());
}
async fn test_get_logout_link_handler() {
let app_state = create_test_app_state().await;
let app = Router::new()
.route("/logout", get(web::handler::get_logout_link))
.with_state(app_state);
.uri("/logout")
// Should contain the logout link
assert!(body_str.contains("/api/auth/logout"));
async fn test_handlers_return_proper_json_errors() {
.route(
"/auth/login",
axum::routing::post(web::handler::login_user_handler),
"/auth/register",
axum::routing::post(web::handler::register_user_handler),
"/auth/refresh",
axum::routing::get(web::handler::refresh_access_token_handler),
// Test login with invalid JSON
.clone()
.method("POST")
.uri("/auth/login")
.header("content-type", "application/json")
.body(Body::from("invalid json"))
assert_eq!(response.status(), StatusCode::BAD_REQUEST);
// Test register with invalid JSON
.uri("/auth/register")
// Test refresh without cookie
.uri("/auth/refresh")
// May return 401 (Unauthorized) or 403 (Forbidden) depending on auth middleware
assert!(
response.status() == StatusCode::UNAUTHORIZED || response.status() == StatusCode::FORBIDDEN,
"Expected 401 or 403, got: {}",
response.status()
);
// Verify it returns JSON
let _: serde_json::Value =
serde_json::from_str(&body_str).expect("Response should be valid JSON");