-
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathcommand.rs
More file actions
74 lines (56 loc) · 1.71 KB
/
Copy pathcommand.rs
File metadata and controls
74 lines (56 loc) · 1.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
use crate::errors::GitfleetError;
use crate::output::Renderer;
pub async fn run<F, Fut>(renderer: &Renderer, f: F) -> Result<(), GitfleetError>
where
F: FnOnce() -> Fut,
Fut: std::future::Future<Output = Result<(), GitfleetError>>,
{
match f().await {
Ok(()) => Ok(()),
Err(e) => {
renderer.write_error_for(&e);
Err(e)
}
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::output_state::OutputMode;
#[tokio::test]
async fn test_run_ok() {
let renderer = Renderer::new(OutputMode::Silent);
let result = run(&renderer, || async { Ok(()) }).await;
assert!(result.is_ok());
}
#[tokio::test]
async fn test_run_err() {
let renderer = Renderer::new(OutputMode::Silent);
let result = run(&renderer, || async {
Err(GitfleetError::new("test error"))
})
.await;
assert!(result.is_err());
}
#[tokio::test]
async fn test_run_err_propagates_message() {
let renderer = Renderer::new(OutputMode::Silent);
let result = run(&renderer, || async {
Err(GitfleetError::new("specific error"))
})
.await;
assert_eq!(result.unwrap_err().to_string(), "specific error");
}
#[tokio::test]
async fn test_run_with_json_renderer() {
let renderer = Renderer::new(OutputMode::Json);
let result = run(&renderer, || async { Ok(()) }).await;
assert!(result.is_ok());
}
#[tokio::test]
async fn test_run_with_human_renderer() {
let renderer = Renderer::new(OutputMode::Human);
let result = run(&renderer, || async { Ok(()) }).await;
assert!(result.is_ok());
}
}