diff --git a/crates/domain/src/errors.rs b/crates/domain/src/errors.rs index 611dca7..7e96e0a 100644 --- a/crates/domain/src/errors.rs +++ b/crates/domain/src/errors.rs @@ -20,3 +20,44 @@ pub enum DomainError { #[error("Forbidden: {0}")] Forbidden(String), } + +impl DomainError { + pub fn is_transient(&self) -> bool { + matches!(self, DomainError::InfrastructureError(_)) + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn infrastructure_error_is_transient() { + assert!(DomainError::InfrastructureError("network timeout".into()).is_transient()); + } + + #[test] + fn not_found_is_not_transient() { + assert!(!DomainError::NotFound("thing".into()).is_transient()); + } + + #[test] + fn validation_error_is_not_transient() { + assert!(!DomainError::ValidationError("bad input".into()).is_transient()); + } + + #[test] + fn unauthorized_is_not_transient() { + assert!(!DomainError::Unauthorized("token expired".into()).is_transient()); + } + + #[test] + fn forbidden_is_not_transient() { + assert!(!DomainError::Forbidden("no access".into()).is_transient()); + } + + #[test] + fn invalid_rating_is_not_transient() { + assert!(!DomainError::InvalidRating { max: 5, given: 9 }.is_transient()); + } +}