wfe_core/primitives/
poll_endpoint.rs1use async_trait::async_trait;
2
3use crate::models::ExecutionResult;
4use crate::models::poll_config::PollEndpointConfig;
5use crate::traits::step::{StepBody, StepExecutionContext};
6
7#[derive(Default)]
10pub struct PollEndpointStep {
11 pub config: PollEndpointConfig,
13}
14
15#[async_trait]
16impl StepBody for PollEndpointStep {
17 async fn run(&mut self, _context: &StepExecutionContext<'_>) -> crate::Result<ExecutionResult> {
18 Ok(ExecutionResult::poll_endpoint(self.config.clone()))
19 }
20}
21
22#[cfg(test)]
23mod tests {
24 use super::*;
25 use crate::models::ExecutionPointer;
26 use crate::models::poll_config::{HttpMethod, PollCondition};
27 use crate::primitives::test_helpers::*;
28 use std::collections::HashMap;
29 use std::time::Duration;
30
31 #[tokio::test]
32 async fn returns_poll_config() {
33 let config = PollEndpointConfig {
34 url: "https://api.example.com/status".into(),
35 method: HttpMethod::Get,
36 headers: HashMap::new(),
37 body: None,
38 interval: Duration::from_secs(10),
39 timeout: Duration::from_secs(300),
40 condition: PollCondition::StatusCode(200),
41 };
42
43 let mut step = PollEndpointStep {
44 config: config.clone(),
45 };
46 let pointer = ExecutionPointer::new(0);
47 let wf_step = default_step();
48 let workflow = default_workflow();
49 let ctx = make_context(&pointer, &wf_step, &workflow);
50
51 let result = step.run(&ctx).await.unwrap();
52 assert!(!result.proceed);
53 assert_eq!(result.poll_endpoint, Some(config));
54 }
55}