From dbd8a229294800f67b5e86ab0304772b2a50069f Mon Sep 17 00:00:00 2001 From: Graham Esau Date: Wed, 11 Sep 2024 13:23:35 +0100 Subject: [PATCH] Port inline_subschemas tests to new integration test style --- schemars/tests/inline_subschemas.rs | 43 ------------ .../tests/integration/inline_subschemas.rs | 61 ++++++++++++++++ schemars/tests/integration/main.rs | 1 + ...nline_subschemas.rs~struct_normal.de.json} | 0 ...nline_subschemas.rs~struct_normal.ser.json | 23 ++++++ ...ne_subschemas.rs~struct_recursive.de.json} | 0 ...ne_subschemas.rs~struct_recursive.ser.json | 70 +++++++++++++++++++ 7 files changed, 155 insertions(+), 43 deletions(-) delete mode 100644 schemars/tests/inline_subschemas.rs create mode 100644 schemars/tests/integration/inline_subschemas.rs rename schemars/tests/{expected/inline-subschemas.json => integration/snapshots/schemars/tests/integration/inline_subschemas.rs~struct_normal.de.json} (100%) create mode 100644 schemars/tests/integration/snapshots/schemars/tests/integration/inline_subschemas.rs~struct_normal.ser.json rename schemars/tests/{expected/inline-subschemas-recursive.json => integration/snapshots/schemars/tests/integration/inline_subschemas.rs~struct_recursive.de.json} (100%) create mode 100644 schemars/tests/integration/snapshots/schemars/tests/integration/inline_subschemas.rs~struct_recursive.ser.json diff --git a/schemars/tests/inline_subschemas.rs b/schemars/tests/inline_subschemas.rs deleted file mode 100644 index a377847f..00000000 --- a/schemars/tests/inline_subschemas.rs +++ /dev/null @@ -1,43 +0,0 @@ -mod util; -use schemars::generate::SchemaSettings; -use schemars::JsonSchema; -use util::*; - -#[allow(dead_code)] -#[derive(JsonSchema)] -struct MyJob { - spec: MyJobSpec, -} - -#[allow(dead_code)] -#[derive(JsonSchema)] -struct MyJobSpec { - replicas: u32, -} - -#[test] -fn struct_normal() -> TestResult { - let mut settings = SchemaSettings::default(); - settings.inline_subschemas = true; - test_generated_schema::("inline-subschemas", settings) -} - -#[allow(dead_code)] -#[derive(JsonSchema)] -struct RecursiveOuter { - direct: Option>, - indirect: Option>, -} - -#[allow(dead_code)] -#[derive(JsonSchema)] -struct RecursiveInner { - recursive: RecursiveOuter, -} - -#[test] -fn struct_recursive() -> TestResult { - let mut settings = SchemaSettings::default(); - settings.inline_subschemas = true; - test_generated_schema::("inline-subschemas-recursive", settings) -} diff --git a/schemars/tests/integration/inline_subschemas.rs b/schemars/tests/integration/inline_subschemas.rs new file mode 100644 index 00000000..214a758d --- /dev/null +++ b/schemars/tests/integration/inline_subschemas.rs @@ -0,0 +1,61 @@ +use crate::prelude::*; +use schemars::generate::SchemaSettings; + +#[derive(JsonSchema, Deserialize, Serialize, Default)] +struct MyJob { + spec: MyJobSpec, +} + +#[derive(JsonSchema, Deserialize, Serialize, Default)] +struct MyJobSpec { + replicas: u32, +} + +#[test] +fn struct_normal() { + let settings = SchemaSettings::default().with(|s| s.inline_subschemas = true); + test!(MyJob, settings) + .assert_snapshot() + .assert_allows_ser_roundtrip_default() + .assert_matches_de_roundtrip(arbitrary_values()); +} + +#[derive(JsonSchema, Deserialize, Serialize)] +struct RecursiveOuter { + direct: Option>, + indirect: Option>, +} + +#[derive(JsonSchema, Deserialize, Serialize)] +struct RecursiveInner { + recursive: RecursiveOuter, +} + +#[test] +fn struct_recursive() { + let settings = SchemaSettings::default().with(|s| s.inline_subschemas = true); + test!(RecursiveOuter, settings) + .assert_snapshot() + .assert_allows_ser_roundtrip([ + RecursiveOuter { + direct: None, + indirect: None, + }, + RecursiveOuter { + direct: Some(Box::new(RecursiveOuter { + direct: None, + indirect: None, + })), + indirect: Some(Box::new(RecursiveInner { + recursive: RecursiveOuter { + direct: Some(Box::new(RecursiveOuter { + direct: None, + indirect: None, + })), + indirect: None, + }, + })), + }, + ]) + .assert_matches_de_roundtrip(arbitrary_values()); +} diff --git a/schemars/tests/integration/main.rs b/schemars/tests/integration/main.rs index 622d6d5b..9e7b6d61 100644 --- a/schemars/tests/integration/main.rs +++ b/schemars/tests/integration/main.rs @@ -26,6 +26,7 @@ mod from_value; mod garde; #[cfg(feature = "indexmap2")] mod indexmap; +mod inline_subschemas; mod std_types; mod prelude { diff --git a/schemars/tests/expected/inline-subschemas.json b/schemars/tests/integration/snapshots/schemars/tests/integration/inline_subschemas.rs~struct_normal.de.json similarity index 100% rename from schemars/tests/expected/inline-subschemas.json rename to schemars/tests/integration/snapshots/schemars/tests/integration/inline_subschemas.rs~struct_normal.de.json diff --git a/schemars/tests/integration/snapshots/schemars/tests/integration/inline_subschemas.rs~struct_normal.ser.json b/schemars/tests/integration/snapshots/schemars/tests/integration/inline_subschemas.rs~struct_normal.ser.json new file mode 100644 index 00000000..cbee457a --- /dev/null +++ b/schemars/tests/integration/snapshots/schemars/tests/integration/inline_subschemas.rs~struct_normal.ser.json @@ -0,0 +1,23 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "MyJob", + "type": "object", + "properties": { + "spec": { + "type": "object", + "properties": { + "replicas": { + "type": "integer", + "format": "uint32", + "minimum": 0 + } + }, + "required": [ + "replicas" + ] + } + }, + "required": [ + "spec" + ] +} \ No newline at end of file diff --git a/schemars/tests/expected/inline-subschemas-recursive.json b/schemars/tests/integration/snapshots/schemars/tests/integration/inline_subschemas.rs~struct_recursive.de.json similarity index 100% rename from schemars/tests/expected/inline-subschemas-recursive.json rename to schemars/tests/integration/snapshots/schemars/tests/integration/inline_subschemas.rs~struct_recursive.de.json diff --git a/schemars/tests/integration/snapshots/schemars/tests/integration/inline_subschemas.rs~struct_recursive.ser.json b/schemars/tests/integration/snapshots/schemars/tests/integration/inline_subschemas.rs~struct_recursive.ser.json new file mode 100644 index 00000000..584ee369 --- /dev/null +++ b/schemars/tests/integration/snapshots/schemars/tests/integration/inline_subschemas.rs~struct_recursive.ser.json @@ -0,0 +1,70 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "RecursiveOuter", + "type": "object", + "properties": { + "direct": { + "anyOf": [ + { + "$ref": "#/$defs/RecursiveOuter" + }, + { + "type": "null" + } + ] + }, + "indirect": { + "type": [ + "object", + "null" + ], + "properties": { + "recursive": { + "$ref": "#/$defs/RecursiveOuter" + } + }, + "required": [ + "recursive" + ] + } + }, + "required": [ + "direct", + "indirect" + ], + "$defs": { + "RecursiveOuter": { + "type": "object", + "properties": { + "direct": { + "anyOf": [ + { + "$ref": "#/$defs/RecursiveOuter" + }, + { + "type": "null" + } + ] + }, + "indirect": { + "type": [ + "object", + "null" + ], + "properties": { + "recursive": { + "$ref": "#/$defs/RecursiveOuter" + } + }, + "required": [ + "recursive" + ] + } + }, + "required": [ + "direct", + "indirect" + ] + } + } +} \ No newline at end of file