smos_application/errors/
use_case_error.rs1use thiserror::Error;
10
11use crate::errors::{ProviderError, RepoError, UpstreamError};
12use crate::helpers::person_router::RouteError;
13
14#[derive(Debug, Error)]
16pub enum UseCaseError {
17 #[error(transparent)]
18 Repo(#[from] RepoError),
19
20 #[error(transparent)]
21 Provider(#[from] ProviderError),
22
23 #[error(transparent)]
24 Upstream(#[from] UpstreamError),
25
26 #[error(transparent)]
27 Domain(#[from] smos_domain::DomainError),
28
29 #[error(transparent)]
34 Route(#[from] RouteError),
35}
36
37#[cfg(test)]
38mod tests {
39 use super::*;
40 use crate::helpers::person_router::PersonEntry;
41 use std::collections::HashMap;
42
43 #[test]
44 fn repo_error_converts_via_from() {
45 let repo_err = RepoError::QueryFailed("boom".into());
46 let use_case: UseCaseError = repo_err.into();
47 assert!(matches!(
48 use_case,
49 UseCaseError::Repo(RepoError::QueryFailed(_))
50 ));
51 }
52
53 #[test]
54 fn provider_error_converts_via_from() {
55 let provider_err = ProviderError::Unavailable("down".into());
56 let use_case: UseCaseError = provider_err.into();
57 assert!(matches!(
58 use_case,
59 UseCaseError::Provider(ProviderError::Unavailable(_))
60 ));
61 }
62
63 #[test]
64 fn upstream_error_converts_via_from() {
65 let upstream_err = UpstreamError::ConnectFailed("refused".into());
66 let use_case: UseCaseError = upstream_err.into();
67 assert!(matches!(
68 use_case,
69 UseCaseError::Upstream(UpstreamError::ConnectFailed(_))
70 ));
71 }
72
73 #[test]
74 fn route_error_converts_via_from() {
75 let route_err = RouteError::UnknownPerson("ghost".into());
76 let use_case: UseCaseError = route_err.into();
77 assert!(matches!(
78 use_case,
79 UseCaseError::Route(RouteError::UnknownPerson(_))
80 ));
81 }
82
83 #[test]
88 fn person_entry_map_can_be_constructed_empty() {
89 let _map: HashMap<String, PersonEntry> = HashMap::new();
90 }
91}