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