Skip to content

Commit e6aca56

Browse files
committed
test(stackable-versioned): Add integration test for merged_crd
1 parent 8943ff7 commit e6aca56

File tree

3 files changed

+103
-79
lines changed

3 files changed

+103
-79
lines changed

crates/stackable-versioned/tests/conversions.rs

Lines changed: 3 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -1,87 +1,11 @@
11
use std::{fs::File, path::Path};
22

33
use insta::{assert_snapshot, glob};
4-
use kube::{
5-
CustomResource,
6-
core::{conversion::ConversionReview, response::StatusSummary},
7-
};
8-
use schemars::JsonSchema;
9-
use serde::{Deserialize, Serialize};
10-
use stackable_versioned::versioned;
4+
use kube::core::{conversion::ConversionReview, response::StatusSummary};
115

12-
#[versioned(
13-
k8s(group = "test.stackable.tech",),
14-
version(name = "v1alpha1"),
15-
version(name = "v1alpha2"),
16-
version(name = "v1beta1"),
17-
version(name = "v2"),
18-
version(name = "v3")
19-
)]
20-
#[derive(
21-
Clone,
22-
Debug,
23-
Eq,
24-
Hash,
25-
Ord,
26-
PartialEq,
27-
PartialOrd,
28-
CustomResource,
29-
Deserialize,
30-
JsonSchema,
31-
Serialize,
32-
)]
33-
#[serde(rename_all = "camelCase")]
34-
struct PersonSpec {
35-
username: String,
6+
use crate::person::Person;
367

37-
// In v1alpha2 first and last name have been added
38-
#[versioned(added(since = "v1alpha2"))]
39-
first_name: String,
40-
#[versioned(added(since = "v1alpha2"))]
41-
last_name: String,
42-
43-
// We started out with a enum. As we *need* to provide a default, we have a Unknown variant.
44-
// Afterwards we figured let's be more flexible and accept any arbitrary String.
45-
#[versioned(
46-
added(since = "v2", default = "default_gender"),
47-
changed(since = "v3", from_type = "Gender")
48-
)]
49-
gender: String,
50-
}
51-
52-
fn default_gender() -> Gender {
53-
Gender::Unknown
54-
}
55-
56-
#[derive(
57-
Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd, Deserialize, JsonSchema, Serialize,
58-
)]
59-
#[serde(rename_all = "PascalCase")]
60-
pub enum Gender {
61-
Unknown,
62-
Male,
63-
Female,
64-
}
65-
66-
impl From<Gender> for String {
67-
fn from(value: Gender) -> Self {
68-
match value {
69-
Gender::Unknown => "Unknown".to_owned(),
70-
Gender::Male => "Male".to_owned(),
71-
Gender::Female => "Female".to_owned(),
72-
}
73-
}
74-
}
75-
76-
impl From<String> for Gender {
77-
fn from(value: String) -> Self {
78-
match value.as_str() {
79-
"Male" => Self::Male,
80-
"Female" => Self::Female,
81-
_ => Self::Unknown,
82-
}
83-
}
84-
}
8+
mod person;
859

8610
#[test]
8711
fn pass() {
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
use crate::person::{Person, PersonVersion};
2+
3+
mod person;
4+
5+
#[test]
6+
fn stored_apiversion() {
7+
let merged_crd = Person::merged_crd(PersonVersion::V2).expect("the CRDs must be mergeable");
8+
9+
let all_storage_fields_correct =
10+
merged_crd
11+
.spec
12+
.versions
13+
.iter()
14+
.enumerate()
15+
.all(
16+
|(idx, crd)| {
17+
if idx == 0 { crd.storage } else { !crd.storage }
18+
},
19+
);
20+
21+
assert!(all_storage_fields_correct);
22+
}
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
use kube::CustomResource;
2+
use schemars::JsonSchema;
3+
use serde::{Deserialize, Serialize};
4+
use stackable_versioned::versioned;
5+
6+
#[versioned(
7+
k8s(group = "test.stackable.tech",),
8+
version(name = "v1alpha1"),
9+
version(name = "v1alpha2"),
10+
version(name = "v1beta1"),
11+
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+
)]
27+
#[serde(rename_all = "camelCase")]
28+
pub struct PersonSpec {
29+
username: String,
30+
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,
36+
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")
42+
)]
43+
gender: String,
44+
}
45+
46+
fn default_gender() -> Gender {
47+
Gender::Unknown
48+
}
49+
50+
#[derive(
51+
Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd, Deserialize, JsonSchema, Serialize,
52+
)]
53+
#[serde(rename_all = "PascalCase")]
54+
pub enum Gender {
55+
Unknown,
56+
Male,
57+
Female,
58+
}
59+
60+
impl From<Gender> for String {
61+
fn from(value: Gender) -> Self {
62+
match value {
63+
Gender::Unknown => "Unknown".to_owned(),
64+
Gender::Male => "Male".to_owned(),
65+
Gender::Female => "Female".to_owned(),
66+
}
67+
}
68+
}
69+
70+
impl From<String> for Gender {
71+
fn from(value: String) -> Self {
72+
match value.as_str() {
73+
"Male" => Self::Male,
74+
"Female" => Self::Female,
75+
_ => Self::Unknown,
76+
}
77+
}
78+
}

0 commit comments

Comments
 (0)