Skip to content

Commit 1b7b56e

Browse files
Add test for required properties in clusterclass variables
Signed-off-by: killianmuldoon <[email protected]>
1 parent 1567f68 commit 1b7b56e

File tree

1 file changed

+64
-1
lines changed

1 file changed

+64
-1
lines changed

internal/topology/variables/clusterclass_variable_validation_test.go

Lines changed: 64 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -497,7 +497,8 @@ func Test_ValidateClusterClassVariable(t *testing.T) {
497497
{
498498
name: "pass on variable with required set true with a default defined",
499499
clusterClassVariable: &clusterv1.ClusterClassVariable{
500-
Name: "var",
500+
Name: "var",
501+
Required: true,
501502
Schema: clusterv1.VariableSchema{
502503
OpenAPIV3Schema: clusterv1.JSONSchemaProps{
503504
Type: "string",
@@ -631,6 +632,68 @@ func Test_ValidateClusterClassVariable(t *testing.T) {
631632
},
632633
},
633634
},
635+
{
636+
name: "fail if field is required below properties and sets a default that misses the field",
637+
clusterClassVariable: &clusterv1.ClusterClassVariable{
638+
Name: "var",
639+
Schema: clusterv1.VariableSchema{
640+
OpenAPIV3Schema: clusterv1.JSONSchemaProps{
641+
Type: "object",
642+
Properties: map[string]clusterv1.JSONSchemaProps{
643+
"spec": {
644+
Type: "object",
645+
Required: []string{"replicas"},
646+
Default: &apiextensionsv1.JSON{
647+
// replicas missing results in failure
648+
Raw: []byte(`{"value": 100}`),
649+
},
650+
Properties: map[string]clusterv1.JSONSchemaProps{
651+
"replicas": {
652+
Type: "integer",
653+
Default: &apiextensionsv1.JSON{Raw: []byte(`100`)},
654+
Minimum: pointer.Int64(1),
655+
},
656+
"value": {
657+
Type: "integer",
658+
Default: &apiextensionsv1.JSON{Raw: []byte(`100`)},
659+
Minimum: pointer.Int64(1),
660+
},
661+
},
662+
},
663+
},
664+
},
665+
},
666+
},
667+
wantErr: true,
668+
},
669+
{
670+
name: "pass if field is required below properties and sets a default",
671+
clusterClassVariable: &clusterv1.ClusterClassVariable{
672+
Name: "var",
673+
Schema: clusterv1.VariableSchema{
674+
OpenAPIV3Schema: clusterv1.JSONSchemaProps{
675+
Type: "object",
676+
Properties: map[string]clusterv1.JSONSchemaProps{
677+
"spec": {
678+
Type: "object",
679+
Required: []string{"replicas"},
680+
Default: &apiextensionsv1.JSON{
681+
// replicas is set here so the `required` property is met.
682+
Raw: []byte(`{"replicas": 100}`),
683+
},
684+
Properties: map[string]clusterv1.JSONSchemaProps{
685+
"replicas": {
686+
Type: "integer",
687+
Default: &apiextensionsv1.JSON{Raw: []byte(`100`)},
688+
Minimum: pointer.Int64(1),
689+
},
690+
},
691+
},
692+
},
693+
},
694+
},
695+
},
696+
},
634697

635698
{
636699
name: "pass on variable with an example that is valid by the given schema",

0 commit comments

Comments
 (0)