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 = "testCase", default, skip_serializing_if = "Option::is_none",)]
14 pub test_case: Option<ContentTestCase>,
15 #[serde(rename = "testSuiteRun", default, skip_serializing_if = "Option::is_none",)]
16 pub test_suite_run: Option<ContentTestSuiteRun>,
17 #[serde(rename = "trigger", default, skip_serializing_if = "Option::is_none",)]
18 pub trigger: Option<ContentTrigger>,
19}
20
21#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
22#[cfg_attr(feature = "testkit", derive(Arbitrary))]
23#[serde(deny_unknown_fields)]
24pub struct ContentTrigger {
25 #[serde(rename = "type", default, skip_serializing_if = "Option::is_none",)]
26 pub ty: Option<ContentTriggerType>,
27 #[serde(rename = "uri", default, skip_serializing_if = "Option::is_none",)]
28 pub uri: Option<crate::Uri>,
29}
30
31#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
32#[cfg_attr(feature = "testkit", derive(Arbitrary))]
33#[serde(deny_unknown_fields)]
34pub struct ContentTestSuiteRun {
35 #[serde(rename = "id",)]
36 pub id: crate::Id,
37 #[serde(rename = "source", default, skip_serializing_if = "Option::is_none",)]
38 pub source: Option<String>,
39}
40
41#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
42#[cfg_attr(feature = "testkit", derive(Arbitrary))]
43#[serde(deny_unknown_fields)]
44pub struct ContentTestCase {
45 #[serde(rename = "id",)]
46 pub id: crate::Id,
47 #[serde(rename = "name", default, skip_serializing_if = "Option::is_none",)]
48 pub name: Option<String>,
49 #[serde(rename = "type", default, skip_serializing_if = "Option::is_none",)]
50 pub ty: Option<ContentTestCaseType>,
51 #[serde(rename = "uri", default, skip_serializing_if = "Option::is_none",)]
52 pub uri: Option<crate::Uri>,
53 #[serde(rename = "version", default, skip_serializing_if = "Option::is_none",)]
54 pub version: Option<String>,
55}
56
57#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
58#[cfg_attr(feature = "testkit", derive(Arbitrary))]
59#[serde(deny_unknown_fields)]
60pub struct ContentEnvironment {
61 #[serde(rename = "id",)]
62 pub id: crate::Id,
63 #[serde(rename = "source", default, skip_serializing_if = "Option::is_none",)]
64 pub source: Option<crate::UriReference>,
65}
66
67#[derive(Debug, Clone, Serialize, Deserialize, Eq, PartialEq)]
68#[cfg_attr(feature = "testkit", derive(Arbitrary))]
69pub enum ContentTestCaseType {
70 #[serde(rename = "performance")]
71 Performance,
72 #[serde(rename = "functional")]
73 Functional,
74 #[serde(rename = "unit")]
75 Unit,
76 #[serde(rename = "security")]
77 Security,
78 #[serde(rename = "compliance")]
79 Compliance,
80 #[serde(rename = "integration")]
81 Integration,
82 #[serde(rename = "e2e")]
83 E2E,
84 #[serde(rename = "other")]
85 Other,
86}
87
88#[derive(Debug, Clone, Serialize, Deserialize, Eq, PartialEq)]
89#[cfg_attr(feature = "testkit", derive(Arbitrary))]
90pub enum ContentTriggerType {
91 #[serde(rename = "manual")]
92 Manual,
93 #[serde(rename = "pipeline")]
94 Pipeline,
95 #[serde(rename = "event")]
96 Event,
97 #[serde(rename = "schedule")]
98 Schedule,
99 #[serde(rename = "other")]
100 Other,
101}
102
103#[cfg(test)]
104mod tests {
105 use proptest::prelude::*;
106 use super::*;
107
108 proptest! {
109 #[test]
110 #[cfg(feature = "testkit")]
111 fn arbitraries_are_json_valid(s in any::<Content>()) {
112 let json_str = serde_json::to_string(&s).unwrap();
113 let actual = serde_json::from_str::<Content>(&json_str).unwrap();
114 assert_eq!(s, actual);
115 }
116 }
117}