1#[cfg(feature = "testkit")] use proptest_derive::Arbitrary;
5use serde::{Serialize, Deserialize};
6
7#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
8#[cfg_attr(feature = "testkit", derive(Arbitrary))]
9#[serde(deny_unknown_fields)]
10pub struct Content {
11 #[serde(rename = "environment",)]
12 pub environment: ContentEnvironment,
13 #[serde(rename = "outcome",)]
14 pub outcome: ContentOutcome,
15 #[serde(rename = "reason", default, skip_serializing_if = "Option::is_none",)]
16 pub reason: Option<String>,
17 #[serde(rename = "severity", default, skip_serializing_if = "Option::is_none",)]
18 pub severity: Option<ContentSeverity>,
19 #[serde(rename = "testCase", default, skip_serializing_if = "Option::is_none",)]
20 pub test_case: Option<ContentTestCase>,
21 #[serde(rename = "testSuiteRun", default, skip_serializing_if = "Option::is_none",)]
22 pub test_suite_run: Option<ContentTestSuiteRun>,
23}
24
25#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
26#[cfg_attr(feature = "testkit", derive(Arbitrary))]
27#[serde(deny_unknown_fields)]
28pub struct ContentTestSuiteRun {
29 #[serde(rename = "id",)]
30 pub id: crate::Id,
31 #[serde(rename = "source", default, skip_serializing_if = "Option::is_none",)]
32 pub source: Option<String>,
33}
34
35#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
36#[cfg_attr(feature = "testkit", derive(Arbitrary))]
37#[serde(deny_unknown_fields)]
38pub struct ContentTestCase {
39 #[serde(rename = "id",)]
40 pub id: crate::Id,
41 #[serde(rename = "name", default, skip_serializing_if = "Option::is_none",)]
42 pub name: Option<String>,
43 #[serde(rename = "type", default, skip_serializing_if = "Option::is_none",)]
44 pub ty: Option<ContentTestCaseType>,
45 #[serde(rename = "uri", default, skip_serializing_if = "Option::is_none",)]
46 pub uri: Option<crate::Uri>,
47 #[serde(rename = "version", default, skip_serializing_if = "Option::is_none",)]
48 pub version: Option<String>,
49}
50
51#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
52#[cfg_attr(feature = "testkit", derive(Arbitrary))]
53#[serde(deny_unknown_fields)]
54pub struct ContentEnvironment {
55 #[serde(rename = "id",)]
56 pub id: crate::Id,
57 #[serde(rename = "source", default, skip_serializing_if = "Option::is_none",)]
58 pub source: Option<crate::UriReference>,
59}
60
61#[derive(Debug, Clone, Serialize, Deserialize, Eq, PartialEq)]
62#[cfg_attr(feature = "testkit", derive(Arbitrary))]
63pub enum ContentOutcome {
64 #[serde(rename = "pass")]
65 Pass,
66 #[serde(rename = "fail")]
67 Fail,
68 #[serde(rename = "cancel")]
69 Cancel,
70 #[serde(rename = "error")]
71 Error,
72}
73
74#[derive(Debug, Clone, Serialize, Deserialize, Eq, PartialEq)]
75#[cfg_attr(feature = "testkit", derive(Arbitrary))]
76pub enum ContentSeverity {
77 #[serde(rename = "low")]
78 Low,
79 #[serde(rename = "medium")]
80 Medium,
81 #[serde(rename = "high")]
82 High,
83 #[serde(rename = "critical")]
84 Critical,
85}
86
87#[derive(Debug, Clone, Serialize, Deserialize, Eq, PartialEq)]
88#[cfg_attr(feature = "testkit", derive(Arbitrary))]
89pub enum ContentTestCaseType {
90 #[serde(rename = "performance")]
91 Performance,
92 #[serde(rename = "functional")]
93 Functional,
94 #[serde(rename = "unit")]
95 Unit,
96 #[serde(rename = "security")]
97 Security,
98 #[serde(rename = "compliance")]
99 Compliance,
100 #[serde(rename = "integration")]
101 Integration,
102 #[serde(rename = "e2e")]
103 E2E,
104 #[serde(rename = "other")]
105 Other,
106}
107
108#[cfg(test)]
109mod tests {
110 use proptest::prelude::*;
111 use super::*;
112
113 proptest! {
114 #[test]
115 #[cfg(feature = "testkit")]
116 fn arbitraries_are_json_valid(s in any::<Content>()) {
117 let json_str = serde_json::to_string(&s).unwrap();
118 let actual = serde_json::from_str::<Content>(&json_str).unwrap();
119 assert_eq!(s, actual);
120 }
121 }
122}