openauth-plugins 0.0.4

Official OpenAuth plugin modules.
Documentation
use super::*;

#[tokio::test]
async fn verify_route_returns_status_for_valid_user_code() -> Result<(), Box<dyn std::error::Error>>
{
    let adapter = Arc::new(TestAdapter::default());
    let router = router(
        adapter,
        DeviceAuthorizationOptions::new().generate_user_code(|| "ABC-123".to_owned()),
    )?;
    let code = create_device_code(&router, "test-client", None).await?;

    let response = router
        .handle_async(json_request(
            Method::GET,
            &format!(
                "/api/auth/device?user_code={}",
                string_field(&code, "user_code")
            ),
            "",
            None,
        )?)
        .await?;

    assert_eq!(response.status(), StatusCode::OK);
    let body: Value = serde_json::from_slice(response.body())?;
    assert_eq!(body["user_code"], "ABC-123");
    assert_eq!(body["status"], "pending");
    Ok(())
}

#[tokio::test]
async fn verify_route_accepts_user_code_without_dashes() -> Result<(), Box<dyn std::error::Error>> {
    let adapter = Arc::new(TestAdapter::default());
    let router = router(
        adapter,
        DeviceAuthorizationOptions::new().generate_user_code(|| "ABC12345".to_owned()),
    )?;
    create_device_code(&router, "test-client", None).await?;

    let response = router
        .handle_async(json_request(
            Method::GET,
            "/api/auth/device?user_code=ABC-12345",
            "",
            None,
        )?)
        .await?;

    assert_eq!(response.status(), StatusCode::OK);
    let body: Value = serde_json::from_slice(response.body())?;
    assert_eq!(body["status"], "pending");
    Ok(())
}

#[tokio::test]
async fn verify_route_rejects_invalid_user_code() -> Result<(), Box<dyn std::error::Error>> {
    let adapter = Arc::new(TestAdapter::default());
    let router = router(adapter, DeviceAuthorizationOptions::default())?;

    let response = router
        .handle_async(json_request(
            Method::GET,
            "/api/auth/device?user_code=INVALID",
            "",
            None,
        )?)
        .await?;

    assert_eq!(response.status(), StatusCode::BAD_REQUEST);
    let body: Value = serde_json::from_slice(response.body())?;
    assert_eq!(body["error"], "invalid_request");
    assert_eq!(body["error_description"], "Invalid user code");
    Ok(())
}