episodic 0.1.0

Reusable Observational Memory core models and pure transforms.
Documentation
use super::*;

#[test]
fn build_scope_key_requires_identifier_by_scope() {
    assert_eq!(
        build_scope_key(OmScope::Session, Some("s1"), None, None).expect("session key"),
        "session:s1"
    );
    assert_eq!(
        build_scope_key(OmScope::Thread, None, Some("t1"), None).expect("thread key"),
        "thread:t1"
    );
    assert_eq!(
        build_scope_key(OmScope::Resource, None, None, Some("r1")).expect("resource key"),
        "resource:r1"
    );
    assert_eq!(
        build_scope_key(OmScope::Session, None, None, None).expect_err("must fail"),
        OmTransformError::MissingScopeIdentifier("session_id")
    );
}

#[test]
fn build_scope_key_trims_identifiers_and_ignores_unrelated_ids() {
    assert_eq!(
        build_scope_key(
            OmScope::Session,
            Some("  s-main  "),
            Some("t-ignored"),
            Some("r-ignored"),
        )
        .expect("session key"),
        "session:s-main"
    );
    assert_eq!(
        build_scope_key(
            OmScope::Thread,
            Some("s-ignored"),
            Some("  t-main  "),
            Some("r-ignored"),
        )
        .expect("thread key"),
        "thread:t-main"
    );
    assert_eq!(
        build_scope_key(
            OmScope::Resource,
            Some("s-ignored"),
            Some("t-ignored"),
            Some("  r-main  "),
        )
        .expect("resource key"),
        "resource:r-main"
    );
}

#[test]
fn build_scope_key_rejects_missing_identifier_for_each_scope() {
    assert_eq!(
        build_scope_key(OmScope::Session, Some("   "), Some("t1"), Some("r1"))
            .expect_err("must fail"),
        OmTransformError::MissingScopeIdentifier("session_id")
    );
    assert_eq!(
        build_scope_key(OmScope::Thread, Some("s1"), None, Some("r1")).expect_err("must fail"),
        OmTransformError::MissingScopeIdentifier("thread_id")
    );
    assert_eq!(
        build_scope_key(OmScope::Thread, Some("s1"), Some("   "), Some("r1"))
            .expect_err("must fail"),
        OmTransformError::MissingScopeIdentifier("thread_id")
    );
    assert_eq!(
        build_scope_key(OmScope::Resource, Some("s1"), Some("t1"), None).expect_err("must fail"),
        OmTransformError::MissingScopeIdentifier("resource_id")
    );
}