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
use serde::Deserialize;

use super::TestEvent;

/// Expected outcome of a validation test case.
#[derive(Clone, Copy, Deserialize)]
pub enum TestCaseExpectation {
    /// All events were processed successfully.
    #[serde(rename = "success")]
    Success,

    /// All events failed to be processed successfully.
    #[serde(rename = "failure")]
    Failure,

    /// Some events, but not all, were processed successfully.
    #[serde(rename = "partial_success")]
    PartialSuccess,
}

/// A validation test case.
///
/// Test cases define both the events that should be given as input to the component being
/// validated, as well as the "expectation" for the test case, in terms of if all the events should
/// be processed successfully, or fail to be processed, and so on.
#[derive(Deserialize)]
pub struct TestCase {
    pub name: String,
    pub config_name: Option<String>,
    pub expectation: TestCaseExpectation,
    pub events: Vec<TestEvent>,
}