Skip to content

Commit 76930b7

Browse files
committed
f
1 parent ecfa497 commit 76930b7

File tree

2 files changed

+199
-4
lines changed

2 files changed

+199
-4
lines changed

api/internal/managers/app/config/config.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@ func (m *appConfigManager) ValidateConfigValues(config kotsv1beta1.Config, confi
3232

3333
// first check required items
3434
for _, group := range config.Spec.Groups {
35+
if !isItemEnabled(group.When) {
36+
continue
37+
}
3538
for _, item := range group.Items {
3639
configItems[item.Name] = item
3740

@@ -187,8 +190,11 @@ func isRequiredItem(item kotsv1beta1.ConfigItem) bool {
187190
if !item.Required {
188191
return false
189192
}
193+
if !isItemEnabled(item.When) {
194+
return false
195+
}
190196
// TODO: should an item really not be required if it's hidden?
191-
if item.Hidden || item.When == "false" {
197+
if item.Hidden {
192198
return false
193199
}
194200
return true

api/internal/managers/app/config/config_test.go

Lines changed: 192 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -389,7 +389,7 @@ func TestAppConfigManager_SetConfigValues(t *testing.T) {
389389
wantErr: false,
390390
},
391391
{
392-
name: "disabled group keeps original values",
392+
name: "disabled group with enabled items - items should be filtered out",
393393
config: kotsv1beta1.Config{
394394
Spec: kotsv1beta1.ConfigSpec{
395395
Groups: []kotsv1beta1.ConfigGroup{
@@ -436,7 +436,46 @@ func TestAppConfigManager_SetConfigValues(t *testing.T) {
436436
wantErr: false,
437437
},
438438
{
439-
name: "disabled item keeps original value",
439+
name: "disabled group with disabled items - items should be filtered out",
440+
config: kotsv1beta1.Config{
441+
Spec: kotsv1beta1.ConfigSpec{
442+
Groups: []kotsv1beta1.ConfigGroup{
443+
{
444+
Name: "disabled-group",
445+
Title: "Disabled Group",
446+
When: "false",
447+
Items: []kotsv1beta1.ConfigItem{
448+
{
449+
Name: "disabled-item-in-disabled-group",
450+
Title: "Disabled Item in Disabled Group",
451+
Type: "text",
452+
Value: multitype.BoolOrString{StrVal: "original-value"},
453+
When: "false",
454+
},
455+
{
456+
Name: "enabled-item-in-disabled-group",
457+
Title: "Enabled Item in Disabled Group",
458+
Type: "text",
459+
Value: multitype.BoolOrString{StrVal: "original-enabled-value"},
460+
When: "true",
461+
},
462+
},
463+
},
464+
},
465+
},
466+
},
467+
configValues: map[string]string{
468+
"disabled-item-in-disabled-group": "new-disabled-value",
469+
"enabled-item-in-disabled-group": "new-enabled-value",
470+
},
471+
setupMock: func(mockStore *config.MockStore) {
472+
expectedValues := map[string]string{}
473+
mockStore.On("SetConfigValues", expectedValues).Return(nil)
474+
},
475+
wantErr: false,
476+
},
477+
{
478+
name: "enabled group with disabled item - disabled item should be filtered out",
440479
config: kotsv1beta1.Config{
441480
Spec: kotsv1beta1.ConfigSpec{
442481
Groups: []kotsv1beta1.ConfigGroup{
@@ -485,7 +524,7 @@ func TestAppConfigManager_SetConfigValues(t *testing.T) {
485524
wantErr: false,
486525
},
487526
{
488-
name: "mixed enabled and disabled items",
527+
name: "mixed enabled and disabled items in enabled group",
489528
config: kotsv1beta1.Config{
490529
Spec: kotsv1beta1.ConfigSpec{
491530
Groups: []kotsv1beta1.ConfigGroup{
@@ -544,6 +583,78 @@ func TestAppConfigManager_SetConfigValues(t *testing.T) {
544583
},
545584
wantErr: false,
546585
},
586+
{
587+
name: "multiple groups with mixed enabled/disabled states",
588+
config: kotsv1beta1.Config{
589+
Spec: kotsv1beta1.ConfigSpec{
590+
Groups: []kotsv1beta1.ConfigGroup{
591+
{
592+
Name: "enabled-group-1",
593+
Title: "Enabled Group 1",
594+
When: "true",
595+
Items: []kotsv1beta1.ConfigItem{
596+
{
597+
Name: "enabled-item-1",
598+
Title: "Enabled Item 1",
599+
Type: "text",
600+
Value: multitype.BoolOrString{StrVal: "original-1"},
601+
When: "true",
602+
},
603+
{
604+
Name: "disabled-item-1",
605+
Title: "Disabled Item 1",
606+
Type: "text",
607+
Value: multitype.BoolOrString{StrVal: "original-disabled-1"},
608+
When: "false",
609+
},
610+
},
611+
},
612+
{
613+
Name: "disabled-group",
614+
Title: "Disabled Group",
615+
When: "false",
616+
Items: []kotsv1beta1.ConfigItem{
617+
{
618+
Name: "item-in-disabled-group",
619+
Title: "Item in Disabled Group",
620+
Type: "text",
621+
Value: multitype.BoolOrString{StrVal: "original-disabled-group"},
622+
When: "true",
623+
},
624+
},
625+
},
626+
{
627+
Name: "enabled-group-2",
628+
Title: "Enabled Group 2",
629+
When: "true",
630+
Items: []kotsv1beta1.ConfigItem{
631+
{
632+
Name: "enabled-item-2",
633+
Title: "Enabled Item 2",
634+
Type: "text",
635+
Value: multitype.BoolOrString{StrVal: "original-2"},
636+
When: "true",
637+
},
638+
},
639+
},
640+
},
641+
},
642+
},
643+
configValues: map[string]string{
644+
"enabled-item-1": "new-value-1",
645+
"disabled-item-1": "new-disabled-value-1",
646+
"item-in-disabled-group": "new-disabled-group-value",
647+
"enabled-item-2": "new-value-2",
648+
},
649+
setupMock: func(mockStore *config.MockStore) {
650+
expectedValues := map[string]string{
651+
"enabled-item-1": "new-value-1",
652+
"enabled-item-2": "new-value-2",
653+
}
654+
mockStore.On("SetConfigValues", expectedValues).Return(nil)
655+
},
656+
wantErr: false,
657+
},
547658
{
548659
name: "empty config values",
549660
config: kotsv1beta1.Config{
@@ -727,6 +838,84 @@ func TestAppConfigManager_SetConfigValues(t *testing.T) {
727838
},
728839
wantErr: false,
729840
},
841+
{
842+
name: "empty config with no groups",
843+
config: kotsv1beta1.Config{
844+
Spec: kotsv1beta1.ConfigSpec{
845+
Groups: []kotsv1beta1.ConfigGroup{},
846+
},
847+
},
848+
configValues: map[string]string{
849+
"some-item": "some-value",
850+
},
851+
setupMock: func(mockStore *config.MockStore) {
852+
expectedValues := map[string]string{}
853+
mockStore.On("SetConfigValues", expectedValues).Return(nil)
854+
},
855+
wantErr: false,
856+
},
857+
{
858+
name: "enabled group with empty items",
859+
config: kotsv1beta1.Config{
860+
Spec: kotsv1beta1.ConfigSpec{
861+
Groups: []kotsv1beta1.ConfigGroup{
862+
{
863+
Name: "empty-group",
864+
Title: "Empty Group",
865+
When: "true",
866+
Items: []kotsv1beta1.ConfigItem{},
867+
},
868+
},
869+
},
870+
},
871+
configValues: map[string]string{
872+
"some-item": "some-value",
873+
},
874+
setupMock: func(mockStore *config.MockStore) {
875+
expectedValues := map[string]string{}
876+
mockStore.On("SetConfigValues", expectedValues).Return(nil)
877+
},
878+
wantErr: false,
879+
},
880+
{
881+
name: "enabled group with all disabled items",
882+
config: kotsv1beta1.Config{
883+
Spec: kotsv1beta1.ConfigSpec{
884+
Groups: []kotsv1beta1.ConfigGroup{
885+
{
886+
Name: "all-disabled-items-group",
887+
Title: "All Disabled Items Group",
888+
When: "true",
889+
Items: []kotsv1beta1.ConfigItem{
890+
{
891+
Name: "disabled-item-1",
892+
Title: "Disabled Item 1",
893+
Type: "text",
894+
Value: multitype.BoolOrString{StrVal: "original-1"},
895+
When: "false",
896+
},
897+
{
898+
Name: "disabled-item-2",
899+
Title: "Disabled Item 2",
900+
Type: "text",
901+
Value: multitype.BoolOrString{StrVal: "original-2"},
902+
When: "false",
903+
},
904+
},
905+
},
906+
},
907+
},
908+
},
909+
configValues: map[string]string{
910+
"disabled-item-1": "new-value-1",
911+
"disabled-item-2": "new-value-2",
912+
},
913+
setupMock: func(mockStore *config.MockStore) {
914+
expectedValues := map[string]string{}
915+
mockStore.On("SetConfigValues", expectedValues).Return(nil)
916+
},
917+
wantErr: false,
918+
},
730919
}
731920

732921
for _, tt := range tests {

0 commit comments

Comments
 (0)