wick_test/
test_group.rs

1use flow_component::SharedComponent;
2use tap_harness::TestRunner;
3use wick_config::config::test_case::TestCase;
4use wick_packet::RuntimeConfig;
5
6use crate::{run_test, TestError, UnitTest};
7
8#[derive(Debug)]
9#[must_use]
10pub struct TestGroup<'a> {
11  pub(crate) tests: Vec<UnitTest<'a>>,
12  pub(crate) root_config: Option<RuntimeConfig>,
13  pub(crate) name: String,
14}
15
16impl<'a> TestGroup<'a> {
17  pub fn from_test_cases<'b>(root_config: Option<RuntimeConfig>, tests: &'b [TestCase]) -> Self
18  where
19    'b: 'a,
20  {
21    let defs: Vec<UnitTest<'b>> = tests.iter().map(UnitTest::new).collect();
22    Self {
23      tests: defs,
24      root_config,
25      name: "Test".to_owned(),
26    }
27  }
28
29  #[allow(clippy::missing_const_for_fn)]
30  pub fn name(mut self, name: String) -> Self {
31    self.name = name;
32    self
33  }
34
35  pub async fn run(
36    &'a mut self,
37    component_id: Option<&str>,
38    component: SharedComponent,
39    filter: &[String],
40  ) -> Result<TestRunner, TestError> {
41    let name = self.name.clone();
42    let config = self.root_config.clone();
43    let tests = self
44      .tests
45      .iter_mut()
46      .filter(|test| {
47        if filter.is_empty() {
48          return true;
49        }
50        test
51          .test
52          .name()
53          .map_or(false, |name| filter.iter().any(|f| name.contains(f)))
54      })
55      .collect();
56    run_test(name, tests, component_id, component, config).await
57  }
58}