use super::*;
#[test]
fn unavailable_maps_infra_failures_to_an_opaque_error() {
let err = unavailable("secret driver gunk: no such table");
let rendered = err.to_string();
assert!(
rendered.contains(DATABASE_UNAVAILABLE),
"the opaque message must survive, got {rendered}"
);
assert!(
!rendered.contains("gunk"),
"driver text must not leak, got {rendered}"
);
assert!(TabloError::is_infrastructure(&err));
}
#[test]
fn driver_failure_maps_driver_errors_to_an_opaque_error() {
let err = driver_failure(
toasty::Error::from_args(format_args!("secret driver gunk: no such table")),
DATABASE_UNAVAILABLE,
);
let rendered = err.to_string();
assert!(
rendered.contains(DATABASE_UNAVAILABLE),
"the opaque message must survive, got {rendered}"
);
assert!(
!rendered.contains("gunk"),
"driver text must not leak, got {rendered}"
);
assert!(TabloError::is_infrastructure(&err));
}
#[test]
fn driver_failure_keeps_an_app_error_intact() {
let guard: topcoat::Error = topcoat::router::error::not_found().into();
let err = driver_failure(guard, DATABASE_UNAVAILABLE);
assert!(
err.is::<topcoat::router::error::NotFoundError>(),
"an app-authored error must keep its own mapping"
);
assert!(!TabloError::is_infrastructure(&err));
}
#[test]
fn driver_failure_marks_a_serialization_failure_as_a_conflict() {
let err = driver_failure(
toasty::Error::serialization_failure("could not serialize access"),
DATABASE_UNAVAILABLE,
);
assert!(TabloError::is_conflict(&err));
assert!(TabloError::is_infrastructure(&err));
assert!(!err.to_string().contains("serialize"));
}