better-auth-api 1.0.0-alpha.5

Plugin implementations for better-auth
use better_auth_core::{AuthPlugin, AuthRequest, AuthResponse, HttpMethod};
use serde_json::{Value, json};

use crate::plugins::{
    anonymous::AnonymousPlugin, phone_number::PhoneNumberPlugin, test_helpers::create_test_context,
};

#[tokio::test]
async fn identity_defaults_preserve_metadata_that_resembles_a_user() {
    let mut ctx = create_test_context().await;
    ctx.set_metadata("anonymous.enabled", json!(true));
    ctx.set_metadata("phone-number.enabled", json!(true));
    let user =
        json!({"id":"identity", "emailVerified":false, "createdAt":"2026-09-30T00:00:00.000Z"});
    let metadata = json!({"user":user, "members":[{"user":user}], "nested":user});
    let mut response = AuthResponse::json(
        200,
        &json!({
            "user":user,
            "users":[user],
            "members":[{"user":user,"metadata":metadata}],
            "metadata":metadata,
            "arbitrary":[user],
        }),
    )
    .unwrap();
    let request = AuthRequest::new(HttpMethod::Post, "/api-key/create");
    AnonymousPlugin::new()
        .after_request(&request, &mut response, &ctx)
        .await
        .unwrap();
    PhoneNumberPlugin::new()
        .after_request(&request, &mut response, &ctx)
        .await
        .unwrap();
    let actual: Value = serde_json::from_slice(&response.body.bytes().unwrap()).unwrap();
    assert_eq!(
        actual,
        json!({
            "user":user,
            "users":[user],
            "members":[{"user":user,"metadata":metadata}],
            "metadata":metadata,
            "arbitrary":[user],
        })
    );
}