icydb-model 0.298.0

IcyDB application-model authoring, validation, and code generation
Documentation
use super::*;

#[test]
fn stable_key_segment_policy_requires_a_lowercase_letter_prefix() {
    for segment in ["db", "demo_rpg", "store_1", "v1"] {
        assert!(stable_key_segment_is_canonical(segment));
    }

    for segment in [
        "",
        "1db",
        "_db",
        "Demo",
        "demo-rpg",
        "demo.rpg",
        "canic.owned",
    ] {
        assert!(!stable_key_segment_is_canonical(segment));
    }
}

#[test]
fn full_stable_key_policy_rejects_reserved_and_malformed_keys() {
    assert!(stable_key_is_canonical("icydb.demo_rpg.characters.data.v1"));

    for key in [
        "canic.demo_rpg.characters.data.v1",
        "icydb.demo_rpg.characters.data",
        "icydb.demo-rpg.characters.data.v1",
        "icydb.demo_rpg..data.v1",
        "icydb.Demo.characters.data.v1",
        "icydb.demo_rpg.characters.data.v2",
        "icydb.1demo.characters.data.v1",
        "icydb._demo.characters.data.v1",
    ] {
        assert!(!stable_key_is_canonical(key), "key should fail: {key}");
    }

    let maximum = format!("icydb.{}.data.v1", "a".repeat(114));
    assert_eq!(maximum.len(), 128);
    assert!(stable_key_is_canonical(&maximum));

    let oversized = format!("icydb.{}.data.v1", "a".repeat(115));
    assert_eq!(oversized.len(), 129);
    assert!(!stable_key_is_canonical(&oversized));
}