tidaldb/tidal/tests/visibility_errors.rs
jx12n 3bcfb3c576 feat: Bazel build, crate docs/ai-lookup, docker images, and engine hardening
- Add BUILD.bazel across tidal, tidal-net, tidal-server, tidalctl for bzlmod build
- Add tidal/ crate docs (README, CHANGELOG, CONTRIBUTING, AGENTS, CLAUDE, API, ARCHITECTURE) and ai-lookup reference
- Add docker standalone/cluster/deploy images, compose, and prometheus config
- Harden WAL (batch format, writer, dedup, diagnostics), text syncer/collectors, and vector registry
- Expand tidalctl CLI and tests; restructure WAL/visibility integration test suites
- Refine tidal-net transport/client/server and tidal-server cluster/scatter-gather
2026-06-07 18:29:38 -06:00

57 lines
1.9 KiB
Rust

//! Integration tests for M7P4 Operational Visibility — structured error context.
//!
//! - Task 06: Structured error context
#![allow(clippy::unwrap_used)]
use tidaldb::schema::EntityKind;
// ── Task 06: Structured Error Context ────────────────────────────────────────
/// `TidalError::Internal` wraps `ErrorContext` with operation + detail fields.
#[test]
fn tidal_error_internal_wraps_error_context() {
use tidaldb::TidalError;
let err = TidalError::internal("test_operation", "something went wrong");
if let TidalError::Internal(ctx) = &err {
assert_eq!(ctx.operation, "test_operation");
assert_eq!(ctx.detail, "something went wrong");
assert!(ctx.entity_id.is_none(), "entity_id should default to None");
assert!(
ctx.entity_kind.is_none(),
"entity_kind should default to None"
);
assert!(
ctx.signal_type.is_none(),
"signal_type should default to None"
);
} else {
panic!("expected TidalError::Internal, got {err:?}");
}
// Display must include the operation name.
let display = format!("{err}");
assert!(
display.contains("test_operation"),
"Display must include the operation name: {display}"
);
}
/// `ErrorContext` builder pattern sets optional fields correctly.
#[test]
fn error_context_builder_sets_optional_fields() {
use tidaldb::ErrorContext;
let ctx = ErrorContext::new("write_signal", "WAL append failed")
.with_entity(42)
.with_kind(EntityKind::Item)
.with_signal("view");
assert_eq!(ctx.operation, "write_signal");
assert_eq!(ctx.detail, "WAL append failed");
assert_eq!(ctx.entity_id, Some(42));
assert_eq!(ctx.entity_kind, Some(EntityKind::Item));
assert_eq!(ctx.signal_type, Some("view".to_string()));
}