use thiserror::Error;
use crate::errors::{ProviderError, RepoError, UpstreamError};
use crate::helpers::person_router::RouteError;
#[derive(Debug, Error)]
pub enum UseCaseError {
#[error(transparent)]
Repo(#[from] RepoError),
#[error(transparent)]
Provider(#[from] ProviderError),
#[error(transparent)]
Upstream(#[from] UpstreamError),
#[error(transparent)]
Domain(#[from] smos_domain::DomainError),
#[error(transparent)]
Route(#[from] RouteError),
}
#[cfg(test)]
mod tests {
use super::*;
use crate::helpers::person_router::PersonEntry;
use std::collections::HashMap;
#[test]
fn repo_error_converts_via_from() {
let repo_err = RepoError::QueryFailed("boom".into());
let use_case: UseCaseError = repo_err.into();
assert!(matches!(
use_case,
UseCaseError::Repo(RepoError::QueryFailed(_))
));
}
#[test]
fn provider_error_converts_via_from() {
let provider_err = ProviderError::Unavailable("down".into());
let use_case: UseCaseError = provider_err.into();
assert!(matches!(
use_case,
UseCaseError::Provider(ProviderError::Unavailable(_))
));
}
#[test]
fn upstream_error_converts_via_from() {
let upstream_err = UpstreamError::ConnectFailed("refused".into());
let use_case: UseCaseError = upstream_err.into();
assert!(matches!(
use_case,
UseCaseError::Upstream(UpstreamError::ConnectFailed(_))
));
}
#[test]
fn route_error_converts_via_from() {
let route_err = RouteError::UnknownPerson("ghost".into());
let use_case: UseCaseError = route_err.into();
assert!(matches!(
use_case,
UseCaseError::Route(RouteError::UnknownPerson(_))
));
}
#[test]
fn person_entry_map_can_be_constructed_empty() {
let _map: HashMap<String, PersonEntry> = HashMap::new();
}
}