uf-valence-codegen 0.1.1

Valence schema codegen (caller-supplied roots)
Documentation
use std::collections::HashMap;

use crate::codegen::generate_from_schema_file;
use crate::codegen::parser::ParsedTraitDef;

use super::support::write_temp_schema_file;

#[test]
fn create_injects_default_actor_ownership_resolution() {
    let schema = r#"
use valence::prelude::*;
use valence::privacy_policies::common::{PUBLIC_READ, AUTHENTICATED};

valence_schema! {
    OwnershipHookProbe {
        table: "ownership_hook_probe",
        database: valence::DEFAULT_SURREAL_STORAGE,
        version: "0.1.0",
        description: "codegen ownership probe",

        policies: {
            read: { allow: [PUBLIC_READ] },
            create: { allow: [AUTHENTICATED] },
        },

        fields: [
            id: { r#type: FieldType::String, primary_key: true, required: true },
        ]
    }
}
"#;

    let path = write_temp_schema_file(schema, "ownership_hook_default.rs");
    let generated = generate_from_schema_file(&path, &HashMap::<String, ParsedTraitDef>::new())
        .expect("codegen");

    assert!(generated.contains("ensure_active_ownership"));
    assert!(generated.contains("from_actor"));
    assert!(generated.contains("__ensure_ownership_after_write"));
    assert!(generated.contains("ensure_ownership_after_batch_create"));
}

#[test]
fn create_injects_system_owned_when_configured() {
    let schema = r#"
use valence::prelude::*;
use valence::privacy_policies::common::{PUBLIC_READ, AUTHENTICATED, SYSTEM_ONLY};

valence_schema! {
    OwnershipHookSystem {
        table: "ownership_hook_system",
        database: valence::DEFAULT_SURREAL_STORAGE,
        version: "0.1.0",
        description: "system-owned probe",

        ownership: { system: true },

        policies: {
            read: { allow: [PUBLIC_READ] },
            create: { allow: [SYSTEM_ONLY] },
        },

        fields: [
            id: { r#type: FieldType::String, primary_key: true, required: true },
        ]
    }
}
"#;

    let path = write_temp_schema_file(schema, "ownership_hook_system.rs");
    let generated = generate_from_schema_file(&path, &HashMap::<String, ParsedTraitDef>::new())
        .expect("codegen");

    assert!(generated.contains("ensure_active_ownership"));
    assert!(generated.contains("OwnerRef::system()"));
}

#[test]
fn create_injects_custom_resolver_when_configured() {
    let schema = r#"
use valence::prelude::*;
use valence::privacy_policies::common::{PUBLIC_READ, AUTHENTICATED};

valence_schema! {
    OwnershipHookResolve {
        table: "ownership_hook_resolve",
        database: valence::DEFAULT_SURREAL_STORAGE,
        version: "0.1.0",
        description: "custom resolver probe",

        ownership: { resolve: fixture_own_resolver::StubOwnerResolver },

        policies: {
            read: { allow: [PUBLIC_READ] },
            create: { allow: [AUTHENTICATED] },
        },

        fields: [
            id: { r#type: FieldType::String, primary_key: true, required: true },
        ]
    }
}
"#;

    let path = write_temp_schema_file(schema, "ownership_hook_resolve.rs");
    let generated = generate_from_schema_file(&path, &HashMap::<String, ParsedTraitDef>::new())
        .expect("codegen");

    assert!(generated.contains("owner_override()"));
    assert!(generated.contains("fixture_own_resolver::StubOwnerResolver"));
    assert!(generated.contains("resolve_owner"));
    assert!(generated.contains("ensure_active_ownership"));
}

#[test]
fn platform_ownership_tables_skip_ownership_hooks_in_generated_crud() {
    let schema = r#"
use valence::prelude::*;
use valence::privacy_policies::common::{PUBLIC_READ, SYSTEM_ONLY};

valence_schema! {
    OwnCodegenSkipProbe {
        table: "valence_data_ownership",
        database: valence::DEFAULT_SURREAL_STORAGE,
        version: "0.1.0",
        description: "codegen self-skip probe",

        policies: {
            read: { allow: [PUBLIC_READ] },
            create: { allow: [SYSTEM_ONLY] },
            update: { allow: [SYSTEM_ONLY] },
            delete: { allow: [SYSTEM_ONLY] },
        },

        composite_key: [valence_model, record_id],

        fields: [
            id: { r#type: FieldType::String, primary_key: true, required: true },
            valence_model: { r#type: FieldType::String, required: true },
            record_id: { r#type: FieldType::String, required: true },
            owner_id: { r#type: FieldType::String, required: true },
            owner_type: { r#type: FieldType::Enum(&["user", "system"]), required: true },
            status: { r#type: FieldType::Enum(&["active"]), required: true, default: "active" },
        ]
    }
}
"#;

    let path = write_temp_schema_file(schema, "ownership_hook_skip_platform.rs");
    let generated = generate_from_schema_file(&path, &HashMap::<String, ParsedTraitDef>::new())
        .expect("codegen");

    assert!(
        !generated.contains("valence::ownership::OwnershipService::ensure_active_ownership"),
        "platform ownership table must not inject nested ownership writes"
    );
    assert!(
        !generated.contains("valence::ownership::OwnershipService::mark_pending_deletion"),
        "platform ownership table must not inject delete ownership markers"
    );
}