use reifydb_test_harness::engine::TestEngine;
fn engine_with_sources(time: &str) -> TestEngine {
let engine = TestEngine::new();
engine.admin("CREATE NAMESPACE js");
engine.admin(&format!("CREATE TABLE js::lhs {{ id: int4, at: datetime, v: float8 }} with {{ time: {time} }}"));
engine.admin(&format!("CREATE TABLE js::rhs {{ id: int4, at: datetime, w: float8 }} with {{ time: {time} }}"));
engine
}
fn join_view(clause: &str) -> String {
format!("CREATE DEFERRED VIEW js::v {{ id: int4, w: float8 }} AS {{ \
FROM js::lhs \
LEFT JOIN {{ FROM js::rhs }} AS r USING (id, r.id) WITH {{ {clause} }} \
MAP {{ id: id, w: r_w }} }}")
}
#[test]
fn a_right_retention_on_a_latest_join_is_accepted() {
let engine = engine_with_sources("event(at)");
engine.admin(&join_view("retention: { right: 1h }, latest: true"));
}
#[test]
fn a_right_retention_on_a_snapshot_join_is_accepted() {
let engine = engine_with_sources("event(at)");
engine.admin(&join_view("retention: { right: 1h }, snapshot: true"));
}
#[test]
fn a_left_retention_on_a_latest_join_is_accepted() {
let engine = engine_with_sources("event(at)");
engine.admin(&join_view("retention: { left: 1h }, latest: true"));
}
#[test]
fn a_left_retention_on_a_snapshot_join_is_accepted() {
let engine = engine_with_sources("event(at)");
engine.admin(&join_view("retention: { left: 1h }, snapshot: true"));
}
#[test]
fn a_join_retention_over_a_processing_time_source_is_rejected() {
let engine = engine_with_sources("processing");
let err = engine.admin_err(&join_view("retention: { left: 1h }"));
assert!(err.contains("FLOW_049"), "expected FLOW_049, got: {err}");
}
#[test]
fn a_join_retention_over_an_event_time_source_is_accepted() {
let engine = engine_with_sources("event(at)");
engine.admin(&join_view("retention: { left: 1h }"));
}
#[test]
fn a_join_without_a_retention_over_a_processing_time_source_is_accepted() {
let engine = engine_with_sources("processing");
engine.admin(&join_view("snapshot: true"));
}