minifly-api 0.1.2

API server for Minifly - Local Fly.io development simulator
Documentation
// Integration tests temporarily disabled due to complex mocking requirements
// TODO: Implement proper test infrastructure with mock Docker and database

/*
use minifly_api::*;
use minifly_core::models::*;
use reqwest::StatusCode;
use serde_json::json;

mod common;
use common::*;

#[tokio::test]
async fn test_health_check() {
    let (url, _handle) = start_test_server().await;
    let client = test_client();
    
    let response = client
        .get(&format!("{}/v1/health", url))
        .header("fly-region", "local")
        .send()
        .await
        .expect("Failed to send request");
    
    assert_status!(response, StatusCode::OK);
    
    let health: serde_json::Value = response.json().await.expect("Failed to parse response");
    assert_eq!(health["status"], "healthy");
    assert_eq!(health["service"], "minifly-api");
}

#[tokio::test]
async fn test_comprehensive_health() {
    let (url, _handle) = start_test_server().await;
    let client = test_client();
    
    let response = client
        .get(&format!("{}/v1/health/comprehensive", url))
        .header("fly-region", "local")
        .send()
        .await
        .expect("Failed to send request");
    
    assert_status!(response, StatusCode::OK);
    
    let health: serde_json::Value = response.json().await.expect("Failed to parse response");
    assert_eq!(health["status"], "healthy");
    assert_eq!(health["service"], "minifly-api");
    assert!(health["uptime_seconds"].is_number());
    assert!(health["memory_usage"].is_object());
    assert!(health["checks"].is_object());
}

#[tokio::test]
async fn test_liveness_check() {
    let (url, _handle) = start_test_server().await;
    let client = test_client();
    
    let response = client
        .get(&format!("{}/v1/health/live", url))
        .header("fly-region", "local")
        .send()
        .await
        .expect("Failed to send request");
    
    assert_status!(response, StatusCode::OK);
    
    let health: serde_json::Value = response.json().await.expect("Failed to parse response");
    assert_eq!(health["status"], "healthy");
    assert!(health["timestamp"].is_string());
}

#[tokio::test]
async fn test_readiness_check() {
    let (url, _handle) = start_test_server().await;
    let client = test_client();
    
    let response = client
        .get(&format!("{}/v1/health/ready", url))
        .header("fly-region", "local")
        .send()
        .await
        .expect("Failed to send request");
    
    assert_status!(response, StatusCode::OK);
    
    let health: serde_json::Value = response.json().await.expect("Failed to parse response");
    assert_eq!(health["status"], "healthy");
    assert_eq!(health["ready"], true);
    assert!(health["checks"].is_object());
}

#[tokio::test]
async fn test_admin_status() {
    let (url, _handle) = start_test_server().await;
    let client = test_client();
    
    // Create some test data first
    let app_req = CreateAppRequest {
        name: "status-test-app".to_string(),
        org_slug: "test-org".to_string(),
    };
    
    client
        .post(&format!("{}/v1/apps", url))
        .header("fly-region", "local")
        .json(&app_req)
        .send()
        .await
        .expect("Failed to create app");
    
    // Get system status
    let response = client
        .get(&format!("{}/v1/admin/status", url))
        .header("fly-region", "local")
        .send()
        .await
        .expect("Failed to send request");
    
    assert_status!(response, StatusCode::OK);
    
    let status: serde_json::Value = response.json().await.expect("Failed to parse response");
    assert!(status["stats"]["apps_count"].is_number());
    assert!(status["stats"]["machines_count"].is_number());
    assert!(status["stats"]["volumes_count"].is_number());
    assert!(status["stats"]["leases_count"].is_number());
    assert!(status["region"].is_string());
    assert!(status["version"].is_string());
}

#[tokio::test]
async fn test_health_without_region_header() {
    let (url, _handle) = start_test_server().await;
    let client = test_client();
    
    // Health endpoints should work without region header
    let response = client
        .get(&format!("{}/v1/health", url))
        // No fly-region header
        .send()
        .await
        .expect("Failed to send request");
    
    // Should still work - health endpoints don't require region
    assert_status!(response, StatusCode::OK);
}
*/