bindizr 0.1.0-beta.4

DNS Synchronization Service for BIND9
Documentation
mod notify;
mod record;
mod zone;

mod test {
    use axum::http::StatusCode;

    use crate::common::TestContext;

    #[tokio::test]
    async fn api_home_returns_running_message() {
        let ctx = TestContext::new().await;

        let (status, body) = ctx.make_request("GET", "/", None).await;

        assert_eq!(status, StatusCode::OK);
        assert_eq!(body["msg"], "bindizr API running");
    }

    #[tokio::test]
    async fn missing_resources_and_invalid_payloads_return_client_errors() {
        let ctx = TestContext::new().await;

        // Test 404 for non-existent zone
        let (status, _) = ctx.make_request("GET", "/zones/99999", None).await;
        assert_eq!(status, StatusCode::NOT_FOUND);

        // Test 404 for non-existent record
        let (status, _) = ctx.make_request("GET", "/records/99999", None).await;
        assert_eq!(status, StatusCode::NOT_FOUND);

        // Test invalid JSON for zone creation
        let invalid_json = serde_json::json!({
            "name": "test.com"
            // Missing required fields
        });

        let (status, _) = ctx.make_request("POST", "/zones", Some(invalid_json)).await;
        assert_eq!(status, StatusCode::BAD_REQUEST);

        // Test invalid record type
        let zone = ctx.create_test_zone().await;
        let invalid_record = serde_json::json!({
            "name": "test.example.com",
            "record_type": "INVALID",
            "value": "192.168.1.1",
            "zone_name": zone.name
        });

        let (status, _) = ctx
            .make_request("POST", "/records", Some(invalid_record))
            .await;
        assert!(status == StatusCode::BAD_REQUEST);
    }
}