From 6beae164c09055acf4f0b55a36e47f9af6664c22 Mon Sep 17 00:00:00 2001 From: David Bernard Date: Sun, 28 Jan 2024 18:01:14 +0100 Subject: [PATCH] feat(testkit): provide proptest 's arbitraies to generate samples Signed-off-by: David Bernard --- Makefile | 4 +- cdevents-sdk/Cargo.toml | 6 +++ cdevents-sdk/src/cdevent.rs | 37 ++++++++++++++ .../src/generated/artifact_packaged.rs | 19 +++++++ .../src/generated/artifact_published.rs | 18 +++++++ cdevents-sdk/src/generated/artifact_signed.rs | 18 +++++++ cdevents-sdk/src/generated/branch_created.rs | 19 +++++++ cdevents-sdk/src/generated/branch_deleted.rs | 19 +++++++ cdevents-sdk/src/generated/build_finished.rs | 18 +++++++ cdevents-sdk/src/generated/build_queued.rs | 18 +++++++ cdevents-sdk/src/generated/build_started.rs | 18 +++++++ .../src/generated/change_abandoned.rs | 19 +++++++ cdevents-sdk/src/generated/change_created.rs | 19 +++++++ cdevents-sdk/src/generated/change_merged.rs | 19 +++++++ cdevents-sdk/src/generated/change_reviewed.rs | 19 +++++++ cdevents-sdk/src/generated/change_updated.rs | 19 +++++++ .../src/generated/environment_created.rs | 18 +++++++ .../src/generated/environment_deleted.rs | 18 +++++++ .../src/generated/environment_modified.rs | 18 +++++++ .../src/generated/incident_detected.rs | 20 ++++++++ .../src/generated/incident_reported.rs | 20 ++++++++ .../src/generated/incident_resolved.rs | 20 ++++++++ cdevents-sdk/src/generated/mod.rs | 51 +++++++++++++++++++ .../src/generated/pipelinerun_finished.rs | 18 +++++++ .../src/generated/pipelinerun_queued.rs | 18 +++++++ .../src/generated/pipelinerun_started.rs | 18 +++++++ .../src/generated/repository_created.rs | 18 +++++++ .../src/generated/repository_deleted.rs | 18 +++++++ .../src/generated/repository_modified.rs | 18 +++++++ .../src/generated/service_deployed.rs | 19 +++++++ .../src/generated/service_published.rs | 19 +++++++ cdevents-sdk/src/generated/service_removed.rs | 19 +++++++ .../src/generated/service_rolledback.rs | 19 +++++++ .../src/generated/service_upgraded.rs | 19 +++++++ .../src/generated/taskrun_finished.rs | 19 +++++++ cdevents-sdk/src/generated/taskrun_started.rs | 19 +++++++ .../src/generated/testcaserun_finished.rs | 24 +++++++++ .../src/generated/testcaserun_queued.rs | 24 +++++++++ .../src/generated/testcaserun_started.rs | 24 +++++++++ .../src/generated/testoutput_published.rs | 20 ++++++++ .../src/generated/testsuiterun_finished.rs | 22 ++++++++ .../src/generated/testsuiterun_queued.rs | 22 ++++++++ .../src/generated/testsuiterun_started.rs | 22 ++++++++ cdevents-sdk/src/subject.rs | 37 ++++++++++++++ cdevents-sdk/src/uri.rs | 25 ++++++++- cdevents-sdk/src/uri_reference.rs | 36 ++++++++++++- generator/templates/mod.hbs | 15 ++++++ generator/templates/variant.hbs | 19 +++++++ 48 files changed, 979 insertions(+), 6 deletions(-) diff --git a/Makefile b/Makefile index de2adcb..e381aec 100644 --- a/Makefile +++ b/Makefile @@ -12,7 +12,7 @@ build_%: cargo build --package $* check: - cargo check + cargo hack check --each-feature check_no_std: cargo --version cargo check --target thumbv7em-none-eabihf -p ockam --no-default-features --features 'no_std alloc software_vault' @@ -57,7 +57,7 @@ generate: cargo run -p generator -- --templates-dir "generator/templates" --jsonschema-dir "cdevents-spec/schemas" --dest "cdevents-sdk/src/generated" test: - cargo nextest run + cargo nextest run --all-features cargo test --doc .PHONY: diff --git a/cdevents-sdk/Cargo.toml b/cdevents-sdk/Cargo.toml index f5f3624..9cc5395 100644 --- a/cdevents-sdk/Cargo.toml +++ b/cdevents-sdk/Cargo.toml @@ -12,6 +12,8 @@ description = "A Rust SDK for CDEvents" [dependencies] cloudevents-sdk = { version = "0.7", optional = true, default-features = false } fluent-uri = "0.1" +proptest = { version = "1.4", optional = true } +proptest-derive = { version = "0.4", optional = true } serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" thiserror = "1.0" @@ -19,8 +21,12 @@ time = { version = "0.3", features = ["serde-human-readable"] } [dev-dependencies] assert-json-diff = "2.0" +proptest = "1" rstest = "0.18" [features] default = ["cloudevents"] +# provide cloudevents helpers and extensions cloudevents = ["dep:cloudevents-sdk"] +# provide test helpers (proptest'strategies and arbitraries for struct generation) +testkit = ["dep:proptest", "dep:proptest-derive"] diff --git a/cdevents-sdk/src/cdevent.rs b/cdevents-sdk/src/cdevent.rs index 258bff3..885da56 100644 --- a/cdevents-sdk/src/cdevent.rs +++ b/cdevents-sdk/src/cdevent.rs @@ -189,3 +189,40 @@ impl<'de> Deserialize<'de> for CDEvent { deserializer.deserialize_struct("CDEvent", FIELDS, CDEventVisitor) } } + +#[cfg(feature = "testkit")] +impl<> proptest::arbitrary::Arbitrary for CDEvent { + type Parameters = (); + type Strategy = proptest::strategy::BoxedStrategy; + + fn arbitrary_with(_args: Self::Parameters) -> Self::Strategy { + use proptest::prelude::*; + ( + any::(), + "\\PC*", + any::>(), + ).prop_map(|(subject, id, source)| { + let mut cdevent = CDEvent::from(subject).with_id(id); + if let Some(source) = source { + cdevent = cdevent.with_source(source); + } + cdevent + }).boxed() + } +} + +#[cfg(test)] +mod tests { + use crate::CDEvent; + use proptest::prelude::*; + + proptest! { + #[test] + #[cfg(feature = "testkit")] + fn arbitraries_are_json_valid(s in any::()) { + let json_str = serde_json::to_string(&s).unwrap(); + let actual = serde_json::from_str::(&json_str).unwrap(); + assert_eq!(s, actual); + } + } +} \ No newline at end of file diff --git a/cdevents-sdk/src/generated/artifact_packaged.rs b/cdevents-sdk/src/generated/artifact_packaged.rs index 0466685..3900f77 100644 --- a/cdevents-sdk/src/generated/artifact_packaged.rs +++ b/cdevents-sdk/src/generated/artifact_packaged.rs @@ -1,9 +1,11 @@ // @generated // by cdevents/sdk-rust/generator (subject.hbs) +#[cfg(feature = "testkit")] use proptest_derive::Arbitrary; use serde::{Serialize, Deserialize}; #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct Content { #[serde(rename = "change",)] @@ -11,6 +13,7 @@ pub struct Content { } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct ContentChange { #[serde(rename = "id",)] @@ -18,3 +21,19 @@ pub struct ContentChange { #[serde(rename = "source", default, skip_serializing_if = "Option::is_none",)] pub source: Option, } + +#[cfg(test)] +mod tests { + use proptest::prelude::*; + use super::*; + + proptest! { + #[test] + #[cfg(feature = "testkit")] + fn arbitraries_are_json_valid(s in any::()) { + let json_str = serde_json::to_string(&s).unwrap(); + let actual = serde_json::from_str::(&json_str).unwrap(); + assert_eq!(s, actual); + } + } +} diff --git a/cdevents-sdk/src/generated/artifact_published.rs b/cdevents-sdk/src/generated/artifact_published.rs index 5aed7a4..c1162a8 100644 --- a/cdevents-sdk/src/generated/artifact_published.rs +++ b/cdevents-sdk/src/generated/artifact_published.rs @@ -1,9 +1,27 @@ // @generated // by cdevents/sdk-rust/generator (subject.hbs) +#[cfg(feature = "testkit")] use proptest_derive::Arbitrary; use serde::{Serialize, Deserialize}; #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct Content { } + +#[cfg(test)] +mod tests { + use proptest::prelude::*; + use super::*; + + proptest! { + #[test] + #[cfg(feature = "testkit")] + fn arbitraries_are_json_valid(s in any::()) { + let json_str = serde_json::to_string(&s).unwrap(); + let actual = serde_json::from_str::(&json_str).unwrap(); + assert_eq!(s, actual); + } + } +} diff --git a/cdevents-sdk/src/generated/artifact_signed.rs b/cdevents-sdk/src/generated/artifact_signed.rs index 2026353..b7b700e 100644 --- a/cdevents-sdk/src/generated/artifact_signed.rs +++ b/cdevents-sdk/src/generated/artifact_signed.rs @@ -1,11 +1,29 @@ // @generated // by cdevents/sdk-rust/generator (subject.hbs) +#[cfg(feature = "testkit")] use proptest_derive::Arbitrary; use serde::{Serialize, Deserialize}; #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct Content { #[serde(rename = "signature",)] pub signature: String, } + +#[cfg(test)] +mod tests { + use proptest::prelude::*; + use super::*; + + proptest! { + #[test] + #[cfg(feature = "testkit")] + fn arbitraries_are_json_valid(s in any::()) { + let json_str = serde_json::to_string(&s).unwrap(); + let actual = serde_json::from_str::(&json_str).unwrap(); + assert_eq!(s, actual); + } + } +} diff --git a/cdevents-sdk/src/generated/branch_created.rs b/cdevents-sdk/src/generated/branch_created.rs index 8576819..8c479f9 100644 --- a/cdevents-sdk/src/generated/branch_created.rs +++ b/cdevents-sdk/src/generated/branch_created.rs @@ -1,9 +1,11 @@ // @generated // by cdevents/sdk-rust/generator (subject.hbs) +#[cfg(feature = "testkit")] use proptest_derive::Arbitrary; use serde::{Serialize, Deserialize}; #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct Content { #[serde(rename = "repository", default, skip_serializing_if = "Option::is_none",)] @@ -11,6 +13,7 @@ pub struct Content { } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct ContentRepository { #[serde(rename = "id",)] @@ -18,3 +21,19 @@ pub struct ContentRepository { #[serde(rename = "source", default, skip_serializing_if = "Option::is_none",)] pub source: Option, } + +#[cfg(test)] +mod tests { + use proptest::prelude::*; + use super::*; + + proptest! { + #[test] + #[cfg(feature = "testkit")] + fn arbitraries_are_json_valid(s in any::()) { + let json_str = serde_json::to_string(&s).unwrap(); + let actual = serde_json::from_str::(&json_str).unwrap(); + assert_eq!(s, actual); + } + } +} diff --git a/cdevents-sdk/src/generated/branch_deleted.rs b/cdevents-sdk/src/generated/branch_deleted.rs index 8576819..8c479f9 100644 --- a/cdevents-sdk/src/generated/branch_deleted.rs +++ b/cdevents-sdk/src/generated/branch_deleted.rs @@ -1,9 +1,11 @@ // @generated // by cdevents/sdk-rust/generator (subject.hbs) +#[cfg(feature = "testkit")] use proptest_derive::Arbitrary; use serde::{Serialize, Deserialize}; #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct Content { #[serde(rename = "repository", default, skip_serializing_if = "Option::is_none",)] @@ -11,6 +13,7 @@ pub struct Content { } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct ContentRepository { #[serde(rename = "id",)] @@ -18,3 +21,19 @@ pub struct ContentRepository { #[serde(rename = "source", default, skip_serializing_if = "Option::is_none",)] pub source: Option, } + +#[cfg(test)] +mod tests { + use proptest::prelude::*; + use super::*; + + proptest! { + #[test] + #[cfg(feature = "testkit")] + fn arbitraries_are_json_valid(s in any::()) { + let json_str = serde_json::to_string(&s).unwrap(); + let actual = serde_json::from_str::(&json_str).unwrap(); + assert_eq!(s, actual); + } + } +} diff --git a/cdevents-sdk/src/generated/build_finished.rs b/cdevents-sdk/src/generated/build_finished.rs index caad769..ed7d960 100644 --- a/cdevents-sdk/src/generated/build_finished.rs +++ b/cdevents-sdk/src/generated/build_finished.rs @@ -1,11 +1,29 @@ // @generated // by cdevents/sdk-rust/generator (subject.hbs) +#[cfg(feature = "testkit")] use proptest_derive::Arbitrary; use serde::{Serialize, Deserialize}; #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct Content { #[serde(rename = "artifactId", default, skip_serializing_if = "Option::is_none",)] pub artifact_id: Option, } + +#[cfg(test)] +mod tests { + use proptest::prelude::*; + use super::*; + + proptest! { + #[test] + #[cfg(feature = "testkit")] + fn arbitraries_are_json_valid(s in any::()) { + let json_str = serde_json::to_string(&s).unwrap(); + let actual = serde_json::from_str::(&json_str).unwrap(); + assert_eq!(s, actual); + } + } +} diff --git a/cdevents-sdk/src/generated/build_queued.rs b/cdevents-sdk/src/generated/build_queued.rs index 5aed7a4..c1162a8 100644 --- a/cdevents-sdk/src/generated/build_queued.rs +++ b/cdevents-sdk/src/generated/build_queued.rs @@ -1,9 +1,27 @@ // @generated // by cdevents/sdk-rust/generator (subject.hbs) +#[cfg(feature = "testkit")] use proptest_derive::Arbitrary; use serde::{Serialize, Deserialize}; #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct Content { } + +#[cfg(test)] +mod tests { + use proptest::prelude::*; + use super::*; + + proptest! { + #[test] + #[cfg(feature = "testkit")] + fn arbitraries_are_json_valid(s in any::()) { + let json_str = serde_json::to_string(&s).unwrap(); + let actual = serde_json::from_str::(&json_str).unwrap(); + assert_eq!(s, actual); + } + } +} diff --git a/cdevents-sdk/src/generated/build_started.rs b/cdevents-sdk/src/generated/build_started.rs index 5aed7a4..c1162a8 100644 --- a/cdevents-sdk/src/generated/build_started.rs +++ b/cdevents-sdk/src/generated/build_started.rs @@ -1,9 +1,27 @@ // @generated // by cdevents/sdk-rust/generator (subject.hbs) +#[cfg(feature = "testkit")] use proptest_derive::Arbitrary; use serde::{Serialize, Deserialize}; #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct Content { } + +#[cfg(test)] +mod tests { + use proptest::prelude::*; + use super::*; + + proptest! { + #[test] + #[cfg(feature = "testkit")] + fn arbitraries_are_json_valid(s in any::()) { + let json_str = serde_json::to_string(&s).unwrap(); + let actual = serde_json::from_str::(&json_str).unwrap(); + assert_eq!(s, actual); + } + } +} diff --git a/cdevents-sdk/src/generated/change_abandoned.rs b/cdevents-sdk/src/generated/change_abandoned.rs index 8576819..8c479f9 100644 --- a/cdevents-sdk/src/generated/change_abandoned.rs +++ b/cdevents-sdk/src/generated/change_abandoned.rs @@ -1,9 +1,11 @@ // @generated // by cdevents/sdk-rust/generator (subject.hbs) +#[cfg(feature = "testkit")] use proptest_derive::Arbitrary; use serde::{Serialize, Deserialize}; #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct Content { #[serde(rename = "repository", default, skip_serializing_if = "Option::is_none",)] @@ -11,6 +13,7 @@ pub struct Content { } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct ContentRepository { #[serde(rename = "id",)] @@ -18,3 +21,19 @@ pub struct ContentRepository { #[serde(rename = "source", default, skip_serializing_if = "Option::is_none",)] pub source: Option, } + +#[cfg(test)] +mod tests { + use proptest::prelude::*; + use super::*; + + proptest! { + #[test] + #[cfg(feature = "testkit")] + fn arbitraries_are_json_valid(s in any::()) { + let json_str = serde_json::to_string(&s).unwrap(); + let actual = serde_json::from_str::(&json_str).unwrap(); + assert_eq!(s, actual); + } + } +} diff --git a/cdevents-sdk/src/generated/change_created.rs b/cdevents-sdk/src/generated/change_created.rs index 8576819..8c479f9 100644 --- a/cdevents-sdk/src/generated/change_created.rs +++ b/cdevents-sdk/src/generated/change_created.rs @@ -1,9 +1,11 @@ // @generated // by cdevents/sdk-rust/generator (subject.hbs) +#[cfg(feature = "testkit")] use proptest_derive::Arbitrary; use serde::{Serialize, Deserialize}; #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct Content { #[serde(rename = "repository", default, skip_serializing_if = "Option::is_none",)] @@ -11,6 +13,7 @@ pub struct Content { } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct ContentRepository { #[serde(rename = "id",)] @@ -18,3 +21,19 @@ pub struct ContentRepository { #[serde(rename = "source", default, skip_serializing_if = "Option::is_none",)] pub source: Option, } + +#[cfg(test)] +mod tests { + use proptest::prelude::*; + use super::*; + + proptest! { + #[test] + #[cfg(feature = "testkit")] + fn arbitraries_are_json_valid(s in any::()) { + let json_str = serde_json::to_string(&s).unwrap(); + let actual = serde_json::from_str::(&json_str).unwrap(); + assert_eq!(s, actual); + } + } +} diff --git a/cdevents-sdk/src/generated/change_merged.rs b/cdevents-sdk/src/generated/change_merged.rs index 8576819..8c479f9 100644 --- a/cdevents-sdk/src/generated/change_merged.rs +++ b/cdevents-sdk/src/generated/change_merged.rs @@ -1,9 +1,11 @@ // @generated // by cdevents/sdk-rust/generator (subject.hbs) +#[cfg(feature = "testkit")] use proptest_derive::Arbitrary; use serde::{Serialize, Deserialize}; #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct Content { #[serde(rename = "repository", default, skip_serializing_if = "Option::is_none",)] @@ -11,6 +13,7 @@ pub struct Content { } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct ContentRepository { #[serde(rename = "id",)] @@ -18,3 +21,19 @@ pub struct ContentRepository { #[serde(rename = "source", default, skip_serializing_if = "Option::is_none",)] pub source: Option, } + +#[cfg(test)] +mod tests { + use proptest::prelude::*; + use super::*; + + proptest! { + #[test] + #[cfg(feature = "testkit")] + fn arbitraries_are_json_valid(s in any::()) { + let json_str = serde_json::to_string(&s).unwrap(); + let actual = serde_json::from_str::(&json_str).unwrap(); + assert_eq!(s, actual); + } + } +} diff --git a/cdevents-sdk/src/generated/change_reviewed.rs b/cdevents-sdk/src/generated/change_reviewed.rs index 8576819..8c479f9 100644 --- a/cdevents-sdk/src/generated/change_reviewed.rs +++ b/cdevents-sdk/src/generated/change_reviewed.rs @@ -1,9 +1,11 @@ // @generated // by cdevents/sdk-rust/generator (subject.hbs) +#[cfg(feature = "testkit")] use proptest_derive::Arbitrary; use serde::{Serialize, Deserialize}; #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct Content { #[serde(rename = "repository", default, skip_serializing_if = "Option::is_none",)] @@ -11,6 +13,7 @@ pub struct Content { } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct ContentRepository { #[serde(rename = "id",)] @@ -18,3 +21,19 @@ pub struct ContentRepository { #[serde(rename = "source", default, skip_serializing_if = "Option::is_none",)] pub source: Option, } + +#[cfg(test)] +mod tests { + use proptest::prelude::*; + use super::*; + + proptest! { + #[test] + #[cfg(feature = "testkit")] + fn arbitraries_are_json_valid(s in any::()) { + let json_str = serde_json::to_string(&s).unwrap(); + let actual = serde_json::from_str::(&json_str).unwrap(); + assert_eq!(s, actual); + } + } +} diff --git a/cdevents-sdk/src/generated/change_updated.rs b/cdevents-sdk/src/generated/change_updated.rs index 8576819..8c479f9 100644 --- a/cdevents-sdk/src/generated/change_updated.rs +++ b/cdevents-sdk/src/generated/change_updated.rs @@ -1,9 +1,11 @@ // @generated // by cdevents/sdk-rust/generator (subject.hbs) +#[cfg(feature = "testkit")] use proptest_derive::Arbitrary; use serde::{Serialize, Deserialize}; #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct Content { #[serde(rename = "repository", default, skip_serializing_if = "Option::is_none",)] @@ -11,6 +13,7 @@ pub struct Content { } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct ContentRepository { #[serde(rename = "id",)] @@ -18,3 +21,19 @@ pub struct ContentRepository { #[serde(rename = "source", default, skip_serializing_if = "Option::is_none",)] pub source: Option, } + +#[cfg(test)] +mod tests { + use proptest::prelude::*; + use super::*; + + proptest! { + #[test] + #[cfg(feature = "testkit")] + fn arbitraries_are_json_valid(s in any::()) { + let json_str = serde_json::to_string(&s).unwrap(); + let actual = serde_json::from_str::(&json_str).unwrap(); + assert_eq!(s, actual); + } + } +} diff --git a/cdevents-sdk/src/generated/environment_created.rs b/cdevents-sdk/src/generated/environment_created.rs index 1ac2d85..804f4be 100644 --- a/cdevents-sdk/src/generated/environment_created.rs +++ b/cdevents-sdk/src/generated/environment_created.rs @@ -1,9 +1,11 @@ // @generated // by cdevents/sdk-rust/generator (subject.hbs) +#[cfg(feature = "testkit")] use proptest_derive::Arbitrary; use serde::{Serialize, Deserialize}; #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct Content { #[serde(rename = "name", default, skip_serializing_if = "Option::is_none",)] @@ -11,3 +13,19 @@ pub struct Content { #[serde(rename = "url", default, skip_serializing_if = "Option::is_none",)] pub url: Option, } + +#[cfg(test)] +mod tests { + use proptest::prelude::*; + use super::*; + + proptest! { + #[test] + #[cfg(feature = "testkit")] + fn arbitraries_are_json_valid(s in any::()) { + let json_str = serde_json::to_string(&s).unwrap(); + let actual = serde_json::from_str::(&json_str).unwrap(); + assert_eq!(s, actual); + } + } +} diff --git a/cdevents-sdk/src/generated/environment_deleted.rs b/cdevents-sdk/src/generated/environment_deleted.rs index c21a2fa..a10c7d6 100644 --- a/cdevents-sdk/src/generated/environment_deleted.rs +++ b/cdevents-sdk/src/generated/environment_deleted.rs @@ -1,11 +1,29 @@ // @generated // by cdevents/sdk-rust/generator (subject.hbs) +#[cfg(feature = "testkit")] use proptest_derive::Arbitrary; use serde::{Serialize, Deserialize}; #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct Content { #[serde(rename = "name", default, skip_serializing_if = "Option::is_none",)] pub name: Option, } + +#[cfg(test)] +mod tests { + use proptest::prelude::*; + use super::*; + + proptest! { + #[test] + #[cfg(feature = "testkit")] + fn arbitraries_are_json_valid(s in any::()) { + let json_str = serde_json::to_string(&s).unwrap(); + let actual = serde_json::from_str::(&json_str).unwrap(); + assert_eq!(s, actual); + } + } +} diff --git a/cdevents-sdk/src/generated/environment_modified.rs b/cdevents-sdk/src/generated/environment_modified.rs index 1ac2d85..804f4be 100644 --- a/cdevents-sdk/src/generated/environment_modified.rs +++ b/cdevents-sdk/src/generated/environment_modified.rs @@ -1,9 +1,11 @@ // @generated // by cdevents/sdk-rust/generator (subject.hbs) +#[cfg(feature = "testkit")] use proptest_derive::Arbitrary; use serde::{Serialize, Deserialize}; #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct Content { #[serde(rename = "name", default, skip_serializing_if = "Option::is_none",)] @@ -11,3 +13,19 @@ pub struct Content { #[serde(rename = "url", default, skip_serializing_if = "Option::is_none",)] pub url: Option, } + +#[cfg(test)] +mod tests { + use proptest::prelude::*; + use super::*; + + proptest! { + #[test] + #[cfg(feature = "testkit")] + fn arbitraries_are_json_valid(s in any::()) { + let json_str = serde_json::to_string(&s).unwrap(); + let actual = serde_json::from_str::(&json_str).unwrap(); + assert_eq!(s, actual); + } + } +} diff --git a/cdevents-sdk/src/generated/incident_detected.rs b/cdevents-sdk/src/generated/incident_detected.rs index 5a91da9..6d0c62a 100644 --- a/cdevents-sdk/src/generated/incident_detected.rs +++ b/cdevents-sdk/src/generated/incident_detected.rs @@ -1,9 +1,11 @@ // @generated // by cdevents/sdk-rust/generator (subject.hbs) +#[cfg(feature = "testkit")] use proptest_derive::Arbitrary; use serde::{Serialize, Deserialize}; #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct Content { #[serde(rename = "artifactId", default, skip_serializing_if = "Option::is_none",)] @@ -17,6 +19,7 @@ pub struct Content { } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct ContentService { #[serde(rename = "id",)] @@ -26,6 +29,7 @@ pub struct ContentService { } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct ContentEnvironment { #[serde(rename = "id",)] @@ -33,3 +37,19 @@ pub struct ContentEnvironment { #[serde(rename = "source", default, skip_serializing_if = "Option::is_none",)] pub source: Option, } + +#[cfg(test)] +mod tests { + use proptest::prelude::*; + use super::*; + + proptest! { + #[test] + #[cfg(feature = "testkit")] + fn arbitraries_are_json_valid(s in any::()) { + let json_str = serde_json::to_string(&s).unwrap(); + let actual = serde_json::from_str::(&json_str).unwrap(); + assert_eq!(s, actual); + } + } +} diff --git a/cdevents-sdk/src/generated/incident_reported.rs b/cdevents-sdk/src/generated/incident_reported.rs index ec30ed6..ee90dae 100644 --- a/cdevents-sdk/src/generated/incident_reported.rs +++ b/cdevents-sdk/src/generated/incident_reported.rs @@ -1,9 +1,11 @@ // @generated // by cdevents/sdk-rust/generator (subject.hbs) +#[cfg(feature = "testkit")] use proptest_derive::Arbitrary; use serde::{Serialize, Deserialize}; #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct Content { #[serde(rename = "artifactId", default, skip_serializing_if = "Option::is_none",)] @@ -19,6 +21,7 @@ pub struct Content { } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct ContentService { #[serde(rename = "id",)] @@ -28,6 +31,7 @@ pub struct ContentService { } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct ContentEnvironment { #[serde(rename = "id",)] @@ -35,3 +39,19 @@ pub struct ContentEnvironment { #[serde(rename = "source", default, skip_serializing_if = "Option::is_none",)] pub source: Option, } + +#[cfg(test)] +mod tests { + use proptest::prelude::*; + use super::*; + + proptest! { + #[test] + #[cfg(feature = "testkit")] + fn arbitraries_are_json_valid(s in any::()) { + let json_str = serde_json::to_string(&s).unwrap(); + let actual = serde_json::from_str::(&json_str).unwrap(); + assert_eq!(s, actual); + } + } +} diff --git a/cdevents-sdk/src/generated/incident_resolved.rs b/cdevents-sdk/src/generated/incident_resolved.rs index 5a91da9..6d0c62a 100644 --- a/cdevents-sdk/src/generated/incident_resolved.rs +++ b/cdevents-sdk/src/generated/incident_resolved.rs @@ -1,9 +1,11 @@ // @generated // by cdevents/sdk-rust/generator (subject.hbs) +#[cfg(feature = "testkit")] use proptest_derive::Arbitrary; use serde::{Serialize, Deserialize}; #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct Content { #[serde(rename = "artifactId", default, skip_serializing_if = "Option::is_none",)] @@ -17,6 +19,7 @@ pub struct Content { } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct ContentService { #[serde(rename = "id",)] @@ -26,6 +29,7 @@ pub struct ContentService { } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct ContentEnvironment { #[serde(rename = "id",)] @@ -33,3 +37,19 @@ pub struct ContentEnvironment { #[serde(rename = "source", default, skip_serializing_if = "Option::is_none",)] pub source: Option, } + +#[cfg(test)] +mod tests { + use proptest::prelude::*; + use super::*; + + proptest! { + #[test] + #[cfg(feature = "testkit")] + fn arbitraries_are_json_valid(s in any::()) { + let json_str = serde_json::to_string(&s).unwrap(); + let actual = serde_json::from_str::(&json_str).unwrap(); + assert_eq!(s, actual); + } + } +} diff --git a/cdevents-sdk/src/generated/mod.rs b/cdevents-sdk/src/generated/mod.rs index 0cd19d9..c64f14e 100644 --- a/cdevents-sdk/src/generated/mod.rs +++ b/cdevents-sdk/src/generated/mod.rs @@ -544,3 +544,54 @@ impl From for Content { Self::TestsuiterunStarted(value) } } + +#[cfg(feature = "testkit")] +impl<> proptest::arbitrary::Arbitrary for Content { + type Parameters = (); + type Strategy = proptest::strategy::BoxedStrategy; + + fn arbitrary_with(_args: Self::Parameters) -> Self::Strategy { + use proptest::prelude::*; + prop_oneof![ + any::().prop_map(Content::from), + any::().prop_map(Content::from), + any::().prop_map(Content::from), + any::().prop_map(Content::from), + any::().prop_map(Content::from), + any::().prop_map(Content::from), + any::().prop_map(Content::from), + any::().prop_map(Content::from), + any::().prop_map(Content::from), + any::().prop_map(Content::from), + any::().prop_map(Content::from), + any::().prop_map(Content::from), + any::().prop_map(Content::from), + any::().prop_map(Content::from), + any::().prop_map(Content::from), + any::().prop_map(Content::from), + any::().prop_map(Content::from), + any::().prop_map(Content::from), + any::().prop_map(Content::from), + any::().prop_map(Content::from), + any::().prop_map(Content::from), + any::().prop_map(Content::from), + any::().prop_map(Content::from), + any::().prop_map(Content::from), + any::().prop_map(Content::from), + any::().prop_map(Content::from), + any::().prop_map(Content::from), + any::().prop_map(Content::from), + any::().prop_map(Content::from), + any::().prop_map(Content::from), + any::().prop_map(Content::from), + any::().prop_map(Content::from), + any::().prop_map(Content::from), + any::().prop_map(Content::from), + any::().prop_map(Content::from), + any::().prop_map(Content::from), + any::().prop_map(Content::from), + any::().prop_map(Content::from), + any::().prop_map(Content::from), + ].boxed() + } +} diff --git a/cdevents-sdk/src/generated/pipelinerun_finished.rs b/cdevents-sdk/src/generated/pipelinerun_finished.rs index bbad121..7839d5e 100644 --- a/cdevents-sdk/src/generated/pipelinerun_finished.rs +++ b/cdevents-sdk/src/generated/pipelinerun_finished.rs @@ -1,9 +1,11 @@ // @generated // by cdevents/sdk-rust/generator (subject.hbs) +#[cfg(feature = "testkit")] use proptest_derive::Arbitrary; use serde::{Serialize, Deserialize}; #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct Content { #[serde(rename = "errors", default, skip_serializing_if = "Option::is_none",)] @@ -15,3 +17,19 @@ pub struct Content { #[serde(rename = "url", default, skip_serializing_if = "Option::is_none",)] pub url: Option, } + +#[cfg(test)] +mod tests { + use proptest::prelude::*; + use super::*; + + proptest! { + #[test] + #[cfg(feature = "testkit")] + fn arbitraries_are_json_valid(s in any::()) { + let json_str = serde_json::to_string(&s).unwrap(); + let actual = serde_json::from_str::(&json_str).unwrap(); + assert_eq!(s, actual); + } + } +} diff --git a/cdevents-sdk/src/generated/pipelinerun_queued.rs b/cdevents-sdk/src/generated/pipelinerun_queued.rs index 45a82fc..5f42f00 100644 --- a/cdevents-sdk/src/generated/pipelinerun_queued.rs +++ b/cdevents-sdk/src/generated/pipelinerun_queued.rs @@ -1,9 +1,11 @@ // @generated // by cdevents/sdk-rust/generator (subject.hbs) +#[cfg(feature = "testkit")] use proptest_derive::Arbitrary; use serde::{Serialize, Deserialize}; #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct Content { #[serde(rename = "pipelineName", default, skip_serializing_if = "Option::is_none",)] @@ -11,3 +13,19 @@ pub struct Content { #[serde(rename = "url", default, skip_serializing_if = "Option::is_none",)] pub url: Option, } + +#[cfg(test)] +mod tests { + use proptest::prelude::*; + use super::*; + + proptest! { + #[test] + #[cfg(feature = "testkit")] + fn arbitraries_are_json_valid(s in any::()) { + let json_str = serde_json::to_string(&s).unwrap(); + let actual = serde_json::from_str::(&json_str).unwrap(); + assert_eq!(s, actual); + } + } +} diff --git a/cdevents-sdk/src/generated/pipelinerun_started.rs b/cdevents-sdk/src/generated/pipelinerun_started.rs index d69896d..3270b0a 100644 --- a/cdevents-sdk/src/generated/pipelinerun_started.rs +++ b/cdevents-sdk/src/generated/pipelinerun_started.rs @@ -1,9 +1,11 @@ // @generated // by cdevents/sdk-rust/generator (subject.hbs) +#[cfg(feature = "testkit")] use proptest_derive::Arbitrary; use serde::{Serialize, Deserialize}; #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct Content { #[serde(rename = "pipelineName",)] @@ -11,3 +13,19 @@ pub struct Content { #[serde(rename = "url",)] pub url: String, } + +#[cfg(test)] +mod tests { + use proptest::prelude::*; + use super::*; + + proptest! { + #[test] + #[cfg(feature = "testkit")] + fn arbitraries_are_json_valid(s in any::()) { + let json_str = serde_json::to_string(&s).unwrap(); + let actual = serde_json::from_str::(&json_str).unwrap(); + assert_eq!(s, actual); + } + } +} diff --git a/cdevents-sdk/src/generated/repository_created.rs b/cdevents-sdk/src/generated/repository_created.rs index 5523ece..7f2ed30 100644 --- a/cdevents-sdk/src/generated/repository_created.rs +++ b/cdevents-sdk/src/generated/repository_created.rs @@ -1,9 +1,11 @@ // @generated // by cdevents/sdk-rust/generator (subject.hbs) +#[cfg(feature = "testkit")] use proptest_derive::Arbitrary; use serde::{Serialize, Deserialize}; #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct Content { #[serde(rename = "name",)] @@ -15,3 +17,19 @@ pub struct Content { #[serde(rename = "viewUrl", default, skip_serializing_if = "Option::is_none",)] pub view_url: Option, } + +#[cfg(test)] +mod tests { + use proptest::prelude::*; + use super::*; + + proptest! { + #[test] + #[cfg(feature = "testkit")] + fn arbitraries_are_json_valid(s in any::()) { + let json_str = serde_json::to_string(&s).unwrap(); + let actual = serde_json::from_str::(&json_str).unwrap(); + assert_eq!(s, actual); + } + } +} diff --git a/cdevents-sdk/src/generated/repository_deleted.rs b/cdevents-sdk/src/generated/repository_deleted.rs index e02fea0..0fa5c4d 100644 --- a/cdevents-sdk/src/generated/repository_deleted.rs +++ b/cdevents-sdk/src/generated/repository_deleted.rs @@ -1,9 +1,11 @@ // @generated // by cdevents/sdk-rust/generator (subject.hbs) +#[cfg(feature = "testkit")] use proptest_derive::Arbitrary; use serde::{Serialize, Deserialize}; #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct Content { #[serde(rename = "name", default, skip_serializing_if = "Option::is_none",)] @@ -15,3 +17,19 @@ pub struct Content { #[serde(rename = "viewUrl", default, skip_serializing_if = "Option::is_none",)] pub view_url: Option, } + +#[cfg(test)] +mod tests { + use proptest::prelude::*; + use super::*; + + proptest! { + #[test] + #[cfg(feature = "testkit")] + fn arbitraries_are_json_valid(s in any::()) { + let json_str = serde_json::to_string(&s).unwrap(); + let actual = serde_json::from_str::(&json_str).unwrap(); + assert_eq!(s, actual); + } + } +} diff --git a/cdevents-sdk/src/generated/repository_modified.rs b/cdevents-sdk/src/generated/repository_modified.rs index e02fea0..0fa5c4d 100644 --- a/cdevents-sdk/src/generated/repository_modified.rs +++ b/cdevents-sdk/src/generated/repository_modified.rs @@ -1,9 +1,11 @@ // @generated // by cdevents/sdk-rust/generator (subject.hbs) +#[cfg(feature = "testkit")] use proptest_derive::Arbitrary; use serde::{Serialize, Deserialize}; #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct Content { #[serde(rename = "name", default, skip_serializing_if = "Option::is_none",)] @@ -15,3 +17,19 @@ pub struct Content { #[serde(rename = "viewUrl", default, skip_serializing_if = "Option::is_none",)] pub view_url: Option, } + +#[cfg(test)] +mod tests { + use proptest::prelude::*; + use super::*; + + proptest! { + #[test] + #[cfg(feature = "testkit")] + fn arbitraries_are_json_valid(s in any::()) { + let json_str = serde_json::to_string(&s).unwrap(); + let actual = serde_json::from_str::(&json_str).unwrap(); + assert_eq!(s, actual); + } + } +} diff --git a/cdevents-sdk/src/generated/service_deployed.rs b/cdevents-sdk/src/generated/service_deployed.rs index 0f6dc2c..1499d5c 100644 --- a/cdevents-sdk/src/generated/service_deployed.rs +++ b/cdevents-sdk/src/generated/service_deployed.rs @@ -1,9 +1,11 @@ // @generated // by cdevents/sdk-rust/generator (subject.hbs) +#[cfg(feature = "testkit")] use proptest_derive::Arbitrary; use serde::{Serialize, Deserialize}; #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct Content { #[serde(rename = "artifactId",)] @@ -13,6 +15,7 @@ pub struct Content { } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct ContentEnvironment { #[serde(rename = "id",)] @@ -20,3 +23,19 @@ pub struct ContentEnvironment { #[serde(rename = "source", default, skip_serializing_if = "Option::is_none",)] pub source: Option, } + +#[cfg(test)] +mod tests { + use proptest::prelude::*; + use super::*; + + proptest! { + #[test] + #[cfg(feature = "testkit")] + fn arbitraries_are_json_valid(s in any::()) { + let json_str = serde_json::to_string(&s).unwrap(); + let actual = serde_json::from_str::(&json_str).unwrap(); + assert_eq!(s, actual); + } + } +} diff --git a/cdevents-sdk/src/generated/service_published.rs b/cdevents-sdk/src/generated/service_published.rs index 02e23c7..2740c04 100644 --- a/cdevents-sdk/src/generated/service_published.rs +++ b/cdevents-sdk/src/generated/service_published.rs @@ -1,9 +1,11 @@ // @generated // by cdevents/sdk-rust/generator (subject.hbs) +#[cfg(feature = "testkit")] use proptest_derive::Arbitrary; use serde::{Serialize, Deserialize}; #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct Content { #[serde(rename = "environment", default, skip_serializing_if = "Option::is_none",)] @@ -11,6 +13,7 @@ pub struct Content { } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct ContentEnvironment { #[serde(rename = "id",)] @@ -18,3 +21,19 @@ pub struct ContentEnvironment { #[serde(rename = "source", default, skip_serializing_if = "Option::is_none",)] pub source: Option, } + +#[cfg(test)] +mod tests { + use proptest::prelude::*; + use super::*; + + proptest! { + #[test] + #[cfg(feature = "testkit")] + fn arbitraries_are_json_valid(s in any::()) { + let json_str = serde_json::to_string(&s).unwrap(); + let actual = serde_json::from_str::(&json_str).unwrap(); + assert_eq!(s, actual); + } + } +} diff --git a/cdevents-sdk/src/generated/service_removed.rs b/cdevents-sdk/src/generated/service_removed.rs index 02e23c7..2740c04 100644 --- a/cdevents-sdk/src/generated/service_removed.rs +++ b/cdevents-sdk/src/generated/service_removed.rs @@ -1,9 +1,11 @@ // @generated // by cdevents/sdk-rust/generator (subject.hbs) +#[cfg(feature = "testkit")] use proptest_derive::Arbitrary; use serde::{Serialize, Deserialize}; #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct Content { #[serde(rename = "environment", default, skip_serializing_if = "Option::is_none",)] @@ -11,6 +13,7 @@ pub struct Content { } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct ContentEnvironment { #[serde(rename = "id",)] @@ -18,3 +21,19 @@ pub struct ContentEnvironment { #[serde(rename = "source", default, skip_serializing_if = "Option::is_none",)] pub source: Option, } + +#[cfg(test)] +mod tests { + use proptest::prelude::*; + use super::*; + + proptest! { + #[test] + #[cfg(feature = "testkit")] + fn arbitraries_are_json_valid(s in any::()) { + let json_str = serde_json::to_string(&s).unwrap(); + let actual = serde_json::from_str::(&json_str).unwrap(); + assert_eq!(s, actual); + } + } +} diff --git a/cdevents-sdk/src/generated/service_rolledback.rs b/cdevents-sdk/src/generated/service_rolledback.rs index 0f6dc2c..1499d5c 100644 --- a/cdevents-sdk/src/generated/service_rolledback.rs +++ b/cdevents-sdk/src/generated/service_rolledback.rs @@ -1,9 +1,11 @@ // @generated // by cdevents/sdk-rust/generator (subject.hbs) +#[cfg(feature = "testkit")] use proptest_derive::Arbitrary; use serde::{Serialize, Deserialize}; #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct Content { #[serde(rename = "artifactId",)] @@ -13,6 +15,7 @@ pub struct Content { } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct ContentEnvironment { #[serde(rename = "id",)] @@ -20,3 +23,19 @@ pub struct ContentEnvironment { #[serde(rename = "source", default, skip_serializing_if = "Option::is_none",)] pub source: Option, } + +#[cfg(test)] +mod tests { + use proptest::prelude::*; + use super::*; + + proptest! { + #[test] + #[cfg(feature = "testkit")] + fn arbitraries_are_json_valid(s in any::()) { + let json_str = serde_json::to_string(&s).unwrap(); + let actual = serde_json::from_str::(&json_str).unwrap(); + assert_eq!(s, actual); + } + } +} diff --git a/cdevents-sdk/src/generated/service_upgraded.rs b/cdevents-sdk/src/generated/service_upgraded.rs index 0f6dc2c..1499d5c 100644 --- a/cdevents-sdk/src/generated/service_upgraded.rs +++ b/cdevents-sdk/src/generated/service_upgraded.rs @@ -1,9 +1,11 @@ // @generated // by cdevents/sdk-rust/generator (subject.hbs) +#[cfg(feature = "testkit")] use proptest_derive::Arbitrary; use serde::{Serialize, Deserialize}; #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct Content { #[serde(rename = "artifactId",)] @@ -13,6 +15,7 @@ pub struct Content { } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct ContentEnvironment { #[serde(rename = "id",)] @@ -20,3 +23,19 @@ pub struct ContentEnvironment { #[serde(rename = "source", default, skip_serializing_if = "Option::is_none",)] pub source: Option, } + +#[cfg(test)] +mod tests { + use proptest::prelude::*; + use super::*; + + proptest! { + #[test] + #[cfg(feature = "testkit")] + fn arbitraries_are_json_valid(s in any::()) { + let json_str = serde_json::to_string(&s).unwrap(); + let actual = serde_json::from_str::(&json_str).unwrap(); + assert_eq!(s, actual); + } + } +} diff --git a/cdevents-sdk/src/generated/taskrun_finished.rs b/cdevents-sdk/src/generated/taskrun_finished.rs index 27b4338..8603566 100644 --- a/cdevents-sdk/src/generated/taskrun_finished.rs +++ b/cdevents-sdk/src/generated/taskrun_finished.rs @@ -1,9 +1,11 @@ // @generated // by cdevents/sdk-rust/generator (subject.hbs) +#[cfg(feature = "testkit")] use proptest_derive::Arbitrary; use serde::{Serialize, Deserialize}; #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct Content { #[serde(rename = "errors", default, skip_serializing_if = "Option::is_none",)] @@ -19,6 +21,7 @@ pub struct Content { } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct ContentPipelineRun { #[serde(rename = "id",)] @@ -26,3 +29,19 @@ pub struct ContentPipelineRun { #[serde(rename = "source", default, skip_serializing_if = "Option::is_none",)] pub source: Option, } + +#[cfg(test)] +mod tests { + use proptest::prelude::*; + use super::*; + + proptest! { + #[test] + #[cfg(feature = "testkit")] + fn arbitraries_are_json_valid(s in any::()) { + let json_str = serde_json::to_string(&s).unwrap(); + let actual = serde_json::from_str::(&json_str).unwrap(); + assert_eq!(s, actual); + } + } +} diff --git a/cdevents-sdk/src/generated/taskrun_started.rs b/cdevents-sdk/src/generated/taskrun_started.rs index 13cba66..3edb228 100644 --- a/cdevents-sdk/src/generated/taskrun_started.rs +++ b/cdevents-sdk/src/generated/taskrun_started.rs @@ -1,9 +1,11 @@ // @generated // by cdevents/sdk-rust/generator (subject.hbs) +#[cfg(feature = "testkit")] use proptest_derive::Arbitrary; use serde::{Serialize, Deserialize}; #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct Content { #[serde(rename = "pipelineRun", default, skip_serializing_if = "Option::is_none",)] @@ -15,6 +17,7 @@ pub struct Content { } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct ContentPipelineRun { #[serde(rename = "id",)] @@ -22,3 +25,19 @@ pub struct ContentPipelineRun { #[serde(rename = "source", default, skip_serializing_if = "Option::is_none",)] pub source: Option, } + +#[cfg(test)] +mod tests { + use proptest::prelude::*; + use super::*; + + proptest! { + #[test] + #[cfg(feature = "testkit")] + fn arbitraries_are_json_valid(s in any::()) { + let json_str = serde_json::to_string(&s).unwrap(); + let actual = serde_json::from_str::(&json_str).unwrap(); + assert_eq!(s, actual); + } + } +} diff --git a/cdevents-sdk/src/generated/testcaserun_finished.rs b/cdevents-sdk/src/generated/testcaserun_finished.rs index 46656e1..6d2051b 100644 --- a/cdevents-sdk/src/generated/testcaserun_finished.rs +++ b/cdevents-sdk/src/generated/testcaserun_finished.rs @@ -1,9 +1,11 @@ // @generated // by cdevents/sdk-rust/generator (subject.hbs) +#[cfg(feature = "testkit")] use proptest_derive::Arbitrary; use serde::{Serialize, Deserialize}; #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct Content { #[serde(rename = "environment",)] @@ -21,6 +23,7 @@ pub struct Content { } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct ContentTestSuiteRun { #[serde(rename = "id",)] @@ -30,6 +33,7 @@ pub struct ContentTestSuiteRun { } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct ContentTestCase { #[serde(rename = "id",)] @@ -45,6 +49,7 @@ pub struct ContentTestCase { } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct ContentEnvironment { #[serde(rename = "id",)] @@ -54,6 +59,7 @@ pub struct ContentEnvironment { } #[derive(Debug, Clone, Serialize, Deserialize, Eq, PartialEq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] pub enum ContentOutcome { #[serde(rename = "pass")] Pass, @@ -66,6 +72,7 @@ pub enum ContentOutcome { } #[derive(Debug, Clone, Serialize, Deserialize, Eq, PartialEq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] pub enum ContentSeverity { #[serde(rename = "low")] Low, @@ -78,6 +85,7 @@ pub enum ContentSeverity { } #[derive(Debug, Clone, Serialize, Deserialize, Eq, PartialEq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] pub enum ContentTestCaseType { #[serde(rename = "performance")] Performance, @@ -96,3 +104,19 @@ pub enum ContentTestCaseType { #[serde(rename = "other")] Other, } + +#[cfg(test)] +mod tests { + use proptest::prelude::*; + use super::*; + + proptest! { + #[test] + #[cfg(feature = "testkit")] + fn arbitraries_are_json_valid(s in any::()) { + let json_str = serde_json::to_string(&s).unwrap(); + let actual = serde_json::from_str::(&json_str).unwrap(); + assert_eq!(s, actual); + } + } +} diff --git a/cdevents-sdk/src/generated/testcaserun_queued.rs b/cdevents-sdk/src/generated/testcaserun_queued.rs index 1c65fdb..c42dfb2 100644 --- a/cdevents-sdk/src/generated/testcaserun_queued.rs +++ b/cdevents-sdk/src/generated/testcaserun_queued.rs @@ -1,9 +1,11 @@ // @generated // by cdevents/sdk-rust/generator (subject.hbs) +#[cfg(feature = "testkit")] use proptest_derive::Arbitrary; use serde::{Serialize, Deserialize}; #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct Content { #[serde(rename = "environment",)] @@ -17,6 +19,7 @@ pub struct Content { } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct ContentTrigger { #[serde(rename = "type", default, skip_serializing_if = "Option::is_none",)] @@ -26,6 +29,7 @@ pub struct ContentTrigger { } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct ContentTestSuiteRun { #[serde(rename = "id",)] @@ -35,6 +39,7 @@ pub struct ContentTestSuiteRun { } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct ContentTestCase { #[serde(rename = "id",)] @@ -50,6 +55,7 @@ pub struct ContentTestCase { } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct ContentEnvironment { #[serde(rename = "id",)] @@ -59,6 +65,7 @@ pub struct ContentEnvironment { } #[derive(Debug, Clone, Serialize, Deserialize, Eq, PartialEq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] pub enum ContentTestCaseType { #[serde(rename = "performance")] Performance, @@ -79,6 +86,7 @@ pub enum ContentTestCaseType { } #[derive(Debug, Clone, Serialize, Deserialize, Eq, PartialEq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] pub enum ContentTriggerType { #[serde(rename = "manual")] Manual, @@ -91,3 +99,19 @@ pub enum ContentTriggerType { #[serde(rename = "other")] Other, } + +#[cfg(test)] +mod tests { + use proptest::prelude::*; + use super::*; + + proptest! { + #[test] + #[cfg(feature = "testkit")] + fn arbitraries_are_json_valid(s in any::()) { + let json_str = serde_json::to_string(&s).unwrap(); + let actual = serde_json::from_str::(&json_str).unwrap(); + assert_eq!(s, actual); + } + } +} diff --git a/cdevents-sdk/src/generated/testcaserun_started.rs b/cdevents-sdk/src/generated/testcaserun_started.rs index 1c65fdb..c42dfb2 100644 --- a/cdevents-sdk/src/generated/testcaserun_started.rs +++ b/cdevents-sdk/src/generated/testcaserun_started.rs @@ -1,9 +1,11 @@ // @generated // by cdevents/sdk-rust/generator (subject.hbs) +#[cfg(feature = "testkit")] use proptest_derive::Arbitrary; use serde::{Serialize, Deserialize}; #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct Content { #[serde(rename = "environment",)] @@ -17,6 +19,7 @@ pub struct Content { } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct ContentTrigger { #[serde(rename = "type", default, skip_serializing_if = "Option::is_none",)] @@ -26,6 +29,7 @@ pub struct ContentTrigger { } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct ContentTestSuiteRun { #[serde(rename = "id",)] @@ -35,6 +39,7 @@ pub struct ContentTestSuiteRun { } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct ContentTestCase { #[serde(rename = "id",)] @@ -50,6 +55,7 @@ pub struct ContentTestCase { } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct ContentEnvironment { #[serde(rename = "id",)] @@ -59,6 +65,7 @@ pub struct ContentEnvironment { } #[derive(Debug, Clone, Serialize, Deserialize, Eq, PartialEq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] pub enum ContentTestCaseType { #[serde(rename = "performance")] Performance, @@ -79,6 +86,7 @@ pub enum ContentTestCaseType { } #[derive(Debug, Clone, Serialize, Deserialize, Eq, PartialEq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] pub enum ContentTriggerType { #[serde(rename = "manual")] Manual, @@ -91,3 +99,19 @@ pub enum ContentTriggerType { #[serde(rename = "other")] Other, } + +#[cfg(test)] +mod tests { + use proptest::prelude::*; + use super::*; + + proptest! { + #[test] + #[cfg(feature = "testkit")] + fn arbitraries_are_json_valid(s in any::()) { + let json_str = serde_json::to_string(&s).unwrap(); + let actual = serde_json::from_str::(&json_str).unwrap(); + assert_eq!(s, actual); + } + } +} diff --git a/cdevents-sdk/src/generated/testoutput_published.rs b/cdevents-sdk/src/generated/testoutput_published.rs index e673427..675acbc 100644 --- a/cdevents-sdk/src/generated/testoutput_published.rs +++ b/cdevents-sdk/src/generated/testoutput_published.rs @@ -1,9 +1,11 @@ // @generated // by cdevents/sdk-rust/generator (subject.hbs) +#[cfg(feature = "testkit")] use proptest_derive::Arbitrary; use serde::{Serialize, Deserialize}; #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct Content { #[serde(rename = "format",)] @@ -17,6 +19,7 @@ pub struct Content { } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct ContentTestCaseRun { #[serde(rename = "id",)] @@ -26,6 +29,7 @@ pub struct ContentTestCaseRun { } #[derive(Debug, Clone, Serialize, Deserialize, Eq, PartialEq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] pub enum ContentOutputType { #[serde(rename = "report")] Report, @@ -38,3 +42,19 @@ pub enum ContentOutputType { #[serde(rename = "other")] Other, } + +#[cfg(test)] +mod tests { + use proptest::prelude::*; + use super::*; + + proptest! { + #[test] + #[cfg(feature = "testkit")] + fn arbitraries_are_json_valid(s in any::()) { + let json_str = serde_json::to_string(&s).unwrap(); + let actual = serde_json::from_str::(&json_str).unwrap(); + assert_eq!(s, actual); + } + } +} diff --git a/cdevents-sdk/src/generated/testsuiterun_finished.rs b/cdevents-sdk/src/generated/testsuiterun_finished.rs index 40496ef..a59e593 100644 --- a/cdevents-sdk/src/generated/testsuiterun_finished.rs +++ b/cdevents-sdk/src/generated/testsuiterun_finished.rs @@ -1,9 +1,11 @@ // @generated // by cdevents/sdk-rust/generator (subject.hbs) +#[cfg(feature = "testkit")] use proptest_derive::Arbitrary; use serde::{Serialize, Deserialize}; #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct Content { #[serde(rename = "environment",)] @@ -19,6 +21,7 @@ pub struct Content { } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct ContentTestSuite { #[serde(rename = "id",)] @@ -32,6 +35,7 @@ pub struct ContentTestSuite { } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct ContentEnvironment { #[serde(rename = "id",)] @@ -41,6 +45,7 @@ pub struct ContentEnvironment { } #[derive(Debug, Clone, Serialize, Deserialize, Eq, PartialEq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] pub enum ContentOutcome { #[serde(rename = "pass")] Pass, @@ -53,6 +58,7 @@ pub enum ContentOutcome { } #[derive(Debug, Clone, Serialize, Deserialize, Eq, PartialEq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] pub enum ContentSeverity { #[serde(rename = "low")] Low, @@ -63,3 +69,19 @@ pub enum ContentSeverity { #[serde(rename = "critical")] Critical, } + +#[cfg(test)] +mod tests { + use proptest::prelude::*; + use super::*; + + proptest! { + #[test] + #[cfg(feature = "testkit")] + fn arbitraries_are_json_valid(s in any::()) { + let json_str = serde_json::to_string(&s).unwrap(); + let actual = serde_json::from_str::(&json_str).unwrap(); + assert_eq!(s, actual); + } + } +} diff --git a/cdevents-sdk/src/generated/testsuiterun_queued.rs b/cdevents-sdk/src/generated/testsuiterun_queued.rs index 1b2e244..5fc5ac1 100644 --- a/cdevents-sdk/src/generated/testsuiterun_queued.rs +++ b/cdevents-sdk/src/generated/testsuiterun_queued.rs @@ -1,9 +1,11 @@ // @generated // by cdevents/sdk-rust/generator (subject.hbs) +#[cfg(feature = "testkit")] use proptest_derive::Arbitrary; use serde::{Serialize, Deserialize}; #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct Content { #[serde(rename = "environment",)] @@ -15,6 +17,7 @@ pub struct Content { } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct ContentTrigger { #[serde(rename = "type", default, skip_serializing_if = "Option::is_none",)] @@ -24,6 +27,7 @@ pub struct ContentTrigger { } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct ContentTestSuite { #[serde(rename = "id",)] @@ -37,6 +41,7 @@ pub struct ContentTestSuite { } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct ContentEnvironment { #[serde(rename = "id",)] @@ -46,6 +51,7 @@ pub struct ContentEnvironment { } #[derive(Debug, Clone, Serialize, Deserialize, Eq, PartialEq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] pub enum ContentTriggerType { #[serde(rename = "manual")] Manual, @@ -58,3 +64,19 @@ pub enum ContentTriggerType { #[serde(rename = "other")] Other, } + +#[cfg(test)] +mod tests { + use proptest::prelude::*; + use super::*; + + proptest! { + #[test] + #[cfg(feature = "testkit")] + fn arbitraries_are_json_valid(s in any::()) { + let json_str = serde_json::to_string(&s).unwrap(); + let actual = serde_json::from_str::(&json_str).unwrap(); + assert_eq!(s, actual); + } + } +} diff --git a/cdevents-sdk/src/generated/testsuiterun_started.rs b/cdevents-sdk/src/generated/testsuiterun_started.rs index 3591ca1..f735c42 100644 --- a/cdevents-sdk/src/generated/testsuiterun_started.rs +++ b/cdevents-sdk/src/generated/testsuiterun_started.rs @@ -1,9 +1,11 @@ // @generated // by cdevents/sdk-rust/generator (subject.hbs) +#[cfg(feature = "testkit")] use proptest_derive::Arbitrary; use serde::{Serialize, Deserialize}; #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct Content { #[serde(rename = "environment",)] @@ -15,6 +17,7 @@ pub struct Content { } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct ContentTrigger { #[serde(rename = "type", default, skip_serializing_if = "Option::is_none",)] @@ -24,6 +27,7 @@ pub struct ContentTrigger { } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct ContentTestSuite { #[serde(rename = "id",)] @@ -37,6 +41,7 @@ pub struct ContentTestSuite { } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct ContentEnvironment { #[serde(rename = "id",)] @@ -46,6 +51,7 @@ pub struct ContentEnvironment { } #[derive(Debug, Clone, Serialize, Deserialize, Eq, PartialEq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] pub enum ContentTriggerType { #[serde(rename = "manual")] Manual, @@ -58,3 +64,19 @@ pub enum ContentTriggerType { #[serde(rename = "other")] Other, } + +#[cfg(test)] +mod tests { + use proptest::prelude::*; + use super::*; + + proptest! { + #[test] + #[cfg(feature = "testkit")] + fn arbitraries_are_json_valid(s in any::()) { + let json_str = serde_json::to_string(&s).unwrap(); + let actual = serde_json::from_str::(&json_str).unwrap(); + assert_eq!(s, actual); + } + } +} diff --git a/cdevents-sdk/src/subject.rs b/cdevents-sdk/src/subject.rs index 887b156..c58f0f0 100644 --- a/cdevents-sdk/src/subject.rs +++ b/cdevents-sdk/src/subject.rs @@ -88,3 +88,40 @@ impl From for Subject where T: Into{ } } } + +#[cfg(feature = "testkit")] +impl<> proptest::arbitrary::Arbitrary for Subject { + type Parameters = (); + type Strategy = proptest::strategy::BoxedStrategy; + fn arbitrary_with(_args: Self::Parameters) -> Self::Strategy { + use proptest::prelude::*; + ( + any::(), + "\\PC*", + any::>(), + ).prop_map(|(content, id, source)| { + let mut subject = Subject::from(content).with_id(id); + if let Some(source) = source { + subject = subject.with_source(source); + } + subject + }).boxed() + } +} + + +#[cfg(test)] +mod tests { + use proptest::prelude::*; + use super::*; + + proptest! { + #[test] + #[cfg(feature = "testkit")] + fn jsonify_arbitraries(s in any::()) { + // Not enough information into json of subject to deserialize into the same sut content + // so only check that it could be serialized + serde_json::to_string(&s).unwrap(); + } + } +} \ No newline at end of file diff --git a/cdevents-sdk/src/uri.rs b/cdevents-sdk/src/uri.rs index bf65638..73cad0a 100644 --- a/cdevents-sdk/src/uri.rs +++ b/cdevents-sdk/src/uri.rs @@ -8,11 +8,16 @@ use std::str::FromStr; use serde::{Serialize, Deserialize}; - +#[cfg(feature = "testkit")] use proptest_derive::Arbitrary; use crate::UriReference; #[derive(Debug, Clone, Default, Serialize, Deserialize)] -pub struct Uri(#[serde(with = "crate::serde::fluent_uri")] pub(crate) fluent_uri::Uri); +#[cfg_attr(feature = "testkit", derive(Arbitrary))] +pub struct Uri( + #[cfg_attr(feature = "testkit", proptest(value = "fluent_uri::Uri::parse_from(\"https://example.com/\".to_owned()).unwrap()"))] //TODO generate random value + #[serde(with = "crate::serde::fluent_uri")] + pub(crate) fluent_uri::Uri +); impl PartialEq for Uri { fn eq(&self, other: &Self) -> bool { @@ -72,3 +77,19 @@ impl Uri { // uri.0 // } // } + +#[cfg(test)] +mod tests { + use proptest::prelude::*; + use super::*; + + proptest! { + #[test] + #[cfg(feature = "testkit")] + fn arbitraries_are_json_valid(s in any::()) { + let json_str = serde_json::to_string(&s).unwrap(); + let actual = serde_json::from_str::(&json_str).unwrap(); + assert_eq!(s, actual); + } + } +} diff --git a/cdevents-sdk/src/uri_reference.rs b/cdevents-sdk/src/uri_reference.rs index 4e910ba..0af5fb9 100644 --- a/cdevents-sdk/src/uri_reference.rs +++ b/cdevents-sdk/src/uri_reference.rs @@ -1,11 +1,13 @@ use std::str::FromStr; use serde::{Serialize, Deserialize}; - use crate::Uri; #[derive(Debug, Clone, Default, Serialize, Deserialize)] -pub struct UriReference(#[serde(with = "crate::serde::fluent_uri")] pub(crate) fluent_uri::Uri); +pub struct UriReference( + #[serde(with = "crate::serde::fluent_uri")] + pub(crate) fluent_uri::Uri +); impl PartialEq for UriReference { fn eq(&self, other: &Self) -> bool { @@ -64,3 +66,33 @@ impl UriReference { // uri.0 // } // } + +#[cfg(feature = "testkit")] +impl<> proptest::arbitrary::Arbitrary for UriReference { + type Parameters = (); + type Strategy = proptest::strategy::BoxedStrategy; + + fn arbitrary_with(_args: Self::Parameters) -> Self::Strategy { + use proptest::prelude::*; + (prop_oneof![ + "/[a-z_\\-/]*".prop_map(|s| UriReference::from_str(&s).unwrap()), + Just("https://example.com/").prop_map(|s| UriReference::from_str(&s).unwrap()), + ]).boxed() + } +} + +#[cfg(test)] +mod tests { + use proptest::prelude::*; + use super::*; + + proptest! { + #[test] + #[cfg(feature = "testkit")] + fn arbitraries_are_json_valid(s in any::()) { + let json_str = serde_json::to_string(&s).unwrap(); + let actual = serde_json::from_str::(&json_str).unwrap(); + assert_eq!(s, actual); + } + } +} diff --git a/generator/templates/mod.hbs b/generator/templates/mod.hbs index 5d3ef83..e8b2625 100644 --- a/generator/templates/mod.hbs +++ b/generator/templates/mod.hbs @@ -62,3 +62,18 @@ impl From<{{this.rust_module}}::Content> for Content { } } {{/each}} + +#[cfg(feature = "testkit")] +impl<> proptest::arbitrary::Arbitrary for Content { + type Parameters = (); + type Strategy = proptest::strategy::BoxedStrategy; + + fn arbitrary_with(_args: Self::Parameters) -> Self::Strategy { + use proptest::prelude::*; + prop_oneof![ +{{#each variants }} + any::<{{this.rust_module}}::Content>().prop_map(Content::from), +{{/each}} + ].boxed() + } +} diff --git a/generator/templates/variant.hbs b/generator/templates/variant.hbs index 1cddc8b..8726957 100644 --- a/generator/templates/variant.hbs +++ b/generator/templates/variant.hbs @@ -1,10 +1,12 @@ // @generated // by cdevents/sdk-rust/generator (subject.hbs) +#[cfg(feature = "testkit")] use proptest_derive::Arbitrary; use serde::{Serialize, Deserialize}; {{#each structs }} #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] #[serde(deny_unknown_fields)] pub struct {{ this.type_info.type_declaration }} { {{#each this.fields }} @@ -19,6 +21,7 @@ pub struct {{ this.type_info.type_declaration }} { {{#each enums }} #[derive(Debug, Clone, Serialize, Deserialize, Eq, PartialEq)] +#[cfg_attr(feature = "testkit", derive(Arbitrary))] pub enum {{ this.type_info.type_declaration }} { {{#each this.values }} #[serde(rename = "{{this.1}}")]{{#if this.0}} @@ -27,3 +30,19 @@ pub enum {{ this.type_info.type_declaration }} { {{/each}} } {{/each}} + +#[cfg(test)] +mod tests { + use proptest::prelude::*; + use super::*; + + proptest! { + #[test] + #[cfg(feature = "testkit")] + fn arbitraries_are_json_valid(s in any::()) { + let json_str = serde_json::to_string(&s).unwrap(); + let actual = serde_json::from_str::(&json_str).unwrap(); + assert_eq!(s, actual); + } + } +}