Skip to content

Commit 7bfc2bb

Browse files
committed
test(stackable-versioned): Adjust existing integration tests
1 parent 88d9050 commit 7bfc2bb

File tree

6 files changed

+288
-76
lines changed

6 files changed

+288
-76
lines changed

crates/stackable-versioned/tests/conversions.rs

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,12 @@
1-
use std::{fs::File, path::Path};
2-
31
use insta::{assert_snapshot, glob};
4-
use kube::core::{conversion::ConversionReview, response::StatusSummary};
5-
6-
use crate::person::Person;
2+
use kube::core::response::StatusSummary;
73

84
mod person;
95

106
#[test]
117
fn pass() {
128
glob!("./inputs/conversions/pass/", "*.json", |path| {
13-
let (request, response) = convert_via_file(path);
9+
let (request, response) = person::convert_via_file(path);
1410

1511
let formatted = serde_json::to_string_pretty(&response)
1612
.expect("Failed to serialize ConversionResponse");
@@ -32,7 +28,7 @@ fn pass() {
3228
#[test]
3329
fn fail() {
3430
glob!("./inputs/conversions/fail/", "*.json", |path| {
35-
let (request, response) = convert_via_file(path);
31+
let (request, response) = person::convert_via_file(path);
3632

3733
let formatted = serde_json::to_string_pretty(&response)
3834
.expect("Failed to serialize ConversionResponse");
@@ -52,12 +48,3 @@ fn fail() {
5248
}
5349
})
5450
}
55-
56-
fn convert_via_file(path: &Path) -> (ConversionReview, ConversionReview) {
57-
let request: ConversionReview =
58-
serde_json::from_reader(File::open(path).expect("failed to open test file"))
59-
.expect("failed to parse ConversionReview from test file");
60-
let response = Person::try_convert(request.clone());
61-
62-
(request, response)
63-
}

crates/stackable-versioned/tests/inputs/conversions/pass/persons_to_v1alpha1.json

Lines changed: 34 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -9,54 +9,72 @@
99
"apiVersion": "test.stackable.tech/v1alpha1",
1010
"kind": "Person",
1111
"metadata": {
12-
"name": "sbernauer",
12+
"name": "jdoe",
1313
"namespace": "default",
1414
"uid": "d41e2019-5de3-409c-a7b2-0799ecb95e4b"
1515
},
1616
"spec": {
17-
"username": "sbernauer"
17+
"username": "jdoe",
18+
"socials": {
19+
"email": "[email protected]"
20+
}
1821
}
1922
},
2023
{
2124
"apiVersion": "test.stackable.tech/v1alpha2",
2225
"kind": "Person",
2326
"metadata": {},
2427
"spec": {
25-
"username": "sbernauer",
26-
"firstName": "Sebastian",
27-
"lastName": "Bernauer"
28+
"username": "jdoe",
29+
"firstName": "John",
30+
"lastName": "Doe",
31+
"socials": {
32+
"email": "[email protected]"
33+
}
2834
}
2935
},
3036
{
3137
"apiVersion": "test.stackable.tech/v1beta1",
3238
"kind": "Person",
3339
"metadata": {},
3440
"spec": {
35-
"username": "sbernauer",
36-
"firstName": "Sebastian",
37-
"lastName": "Bernauer"
41+
"username": "jdoe",
42+
"firstName": "John",
43+
"lastName": "Doe",
44+
"socials": {
45+
"email": "[email protected]",
46+
"mastodon": "@[email protected]"
47+
}
3848
}
3949
},
4050
{
4151
"apiVersion": "test.stackable.tech/v2",
4252
"kind": "Person",
4353
"metadata": {},
4454
"spec": {
45-
"username": "sbernauer",
46-
"firstName": "Sebastian",
47-
"lastName": "Bernauer",
48-
"gender": "Male"
55+
"username": "jdoe",
56+
"firstName": "John",
57+
"lastName": "Doe",
58+
"gender": "Male",
59+
"socials": {
60+
"email": "[email protected]",
61+
"mastodon": "@[email protected]"
62+
}
4963
}
5064
},
5165
{
5266
"apiVersion": "test.stackable.tech/v3",
5367
"kind": "Person",
5468
"metadata": {},
5569
"spec": {
56-
"username": "sbernauer",
57-
"firstName": "Sebastian",
58-
"lastName": "Bernauer",
59-
"gender": "Male"
70+
"username": "jdoe",
71+
"firstName": "John",
72+
"lastName": "Doe",
73+
"gender": "Male",
74+
"socials": {
75+
"email": "[email protected]",
76+
"mastodon": "@[email protected]"
77+
}
6078
}
6179
}
6280
]

crates/stackable-versioned/tests/inputs/conversions/pass/persons_to_v3.json

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,10 @@
1414
"uid": "d41e2019-5de3-409c-a7b2-0799ecb95e4b"
1515
},
1616
"spec": {
17-
"username": "sbernauer"
17+
"username": "sbernauer",
18+
"socials": {
19+
"email": "[email protected]"
20+
}
1821
}
1922
},
2023
{
@@ -24,7 +27,10 @@
2427
"spec": {
2528
"username": "sbernauer",
2629
"firstName": "Sebastian",
27-
"lastName": "Bernauer"
30+
"lastName": "Bernauer",
31+
"socials": {
32+
"email": "[email protected]"
33+
}
2834
}
2935
},
3036
{
@@ -34,7 +40,11 @@
3440
"spec": {
3541
"username": "sbernauer",
3642
"firstName": "Sebastian",
37-
"lastName": "Bernauer"
43+
"lastName": "Bernauer",
44+
"socials": {
45+
"email": "[email protected]",
46+
"mastodon": "@[email protected]"
47+
}
3848
}
3949
},
4050
{
@@ -45,7 +55,11 @@
4555
"username": "sbernauer",
4656
"firstName": "Sebastian",
4757
"lastName": "Bernauer",
48-
"gender": "Male"
58+
"gender": "Male",
59+
"socials": {
60+
"email": "[email protected]",
61+
"mastodon": "@[email protected]"
62+
}
4963
}
5064
},
5165
{
@@ -56,7 +70,11 @@
5670
"username": "sbernauer",
5771
"firstName": "Sebastian",
5872
"lastName": "Bernauer",
59-
"gender": "Male"
73+
"gender": "Male",
74+
"socials": {
75+
"email": "[email protected]",
76+
"mastodon": "@[email protected]"
77+
}
6078
}
6179
}
6280
]

crates/stackable-versioned/tests/person.rs

Lines changed: 65 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,78 @@
1-
use kube::CustomResource;
1+
use std::{fs::File, path::Path};
2+
3+
use kube::{CustomResource, core::conversion::ConversionReview};
24
use schemars::JsonSchema;
35
use serde::{Deserialize, Serialize};
46
use stackable_versioned::versioned;
57

8+
// Fixes an error with this function being marked as unused. See
9+
// - https://stackoverflow.com/a/67902444
10+
// - https://github.com/rust-lang/rust/issues/46379
11+
#[allow(dead_code)]
12+
pub fn convert_via_file(path: &Path) -> (ConversionReview, ConversionReview) {
13+
let request: ConversionReview =
14+
serde_json::from_reader(File::open(path).expect("failed to open test file"))
15+
.expect("failed to parse ConversionReview from test file");
16+
let response = Person::try_convert(request.clone());
17+
18+
(request, response)
19+
}
20+
621
#[versioned(
7-
k8s(group = "test.stackable.tech",),
822
version(name = "v1alpha1"),
923
version(name = "v1alpha2"),
1024
version(name = "v1beta1"),
1125
version(name = "v2"),
12-
version(name = "v3")
13-
)]
14-
#[derive(
15-
Clone,
16-
Debug,
17-
Eq,
18-
Hash,
19-
Ord,
20-
PartialEq,
21-
PartialOrd,
22-
CustomResource,
23-
Deserialize,
24-
JsonSchema,
25-
Serialize,
26+
version(name = "v3"),
27+
options(k8s(experimental_conversion_tracking))
2628
)]
27-
#[serde(rename_all = "camelCase")]
28-
pub struct PersonSpec {
29-
username: String,
29+
pub mod versioned {
30+
#[versioned(crd(group = "test.stackable.tech"))]
31+
#[derive(
32+
Clone,
33+
Debug,
34+
Eq,
35+
Hash,
36+
Ord,
37+
PartialEq,
38+
PartialOrd,
39+
CustomResource,
40+
Deserialize,
41+
JsonSchema,
42+
Serialize,
43+
)]
44+
#[serde(rename_all = "camelCase")]
45+
pub struct PersonSpec {
46+
username: String,
47+
48+
// In v1alpha2 first and last name have been added
49+
#[versioned(added(since = "v1alpha2"))]
50+
first_name: String,
3051

31-
// In v1alpha2 first and last name have been added
32-
#[versioned(added(since = "v1alpha2"))]
33-
first_name: String,
34-
#[versioned(added(since = "v1alpha2"))]
35-
last_name: String,
52+
#[versioned(added(since = "v1alpha2"))]
53+
last_name: String,
3654

37-
// We started out with a enum. As we *need* to provide a default, we have a Unknown variant.
38-
// Afterwards we figured let's be more flexible and accept any arbitrary String.
39-
#[versioned(
40-
added(since = "v2", default = "default_gender"),
41-
changed(since = "v3", from_type = "Gender")
55+
// We started out with a enum. As we *need* to provide a default, we have a Unknown variant.
56+
// Afterwards we figured let's be more flexible and accept any arbitrary String.
57+
#[versioned(
58+
added(since = "v2", default = "default_gender"),
59+
changed(since = "v3", from_type = "Gender")
60+
)]
61+
gender: String,
62+
63+
#[versioned(nested)]
64+
socials: Socials,
65+
}
66+
67+
#[derive(
68+
Clone, Debug, Eq, PartialEq, Hash, PartialOrd, Ord, Deserialize, Serialize, JsonSchema,
4269
)]
43-
gender: String,
44-
}
70+
pub struct Socials {
71+
email: String,
4572

46-
fn default_gender() -> Gender {
47-
Gender::Unknown
73+
#[versioned(added(since = "v1beta1"))]
74+
mastodon: String,
75+
}
4876
}
4977

5078
#[derive(
@@ -57,6 +85,10 @@ pub enum Gender {
5785
Female,
5886
}
5987

88+
fn default_gender() -> Gender {
89+
Gender::Unknown
90+
}
91+
6092
impl From<Gender> for String {
6193
fn from(value: Gender) -> Self {
6294
match value {

0 commit comments

Comments
 (0)