@@ -19,9 +19,12 @@ package v4
1919import (
2020 . "github.com/onsi/ginkgo/v2"
2121 . "github.com/onsi/gomega"
22+ "github.com/spf13/afero"
23+ "github.com/spf13/pflag"
2224
2325 "sigs.k8s.io/kubebuilder/v4/pkg/config"
2426 cfgv3 "sigs.k8s.io/kubebuilder/v4/pkg/config/v3"
27+ "sigs.k8s.io/kubebuilder/v4/pkg/machinery"
2528)
2629
2730var _ = Describe ("editSubcommand" , func () {
@@ -39,4 +42,96 @@ var _ = Describe("editSubcommand", func() {
3942 Expect (subCmd .InjectConfig (cfg )).To (Succeed ())
4043 Expect (subCmd .config ).To (Equal (cfg ))
4144 })
45+
46+ Context ("PreScaffold" , func () {
47+ var (
48+ fs * pflag.FlagSet
49+ mockFS machinery.Filesystem
50+ )
51+
52+ BeforeEach (func () {
53+ fs = pflag .NewFlagSet ("test" , pflag .ContinueOnError )
54+ subCmd .BindFlags (fs )
55+ Expect (subCmd .InjectConfig (cfg )).To (Succeed ())
56+ mockFS = machinery.Filesystem {FS : afero .NewMemMapFs ()}
57+ })
58+
59+ It ("should preserve existing multigroup setting when only namespaced flag is set" , func () {
60+ // Set multigroup in PROJECT file
61+ Expect (cfg .SetMultiGroup ()).To (Succeed ())
62+ Expect (cfg .IsMultiGroup ()).To (BeTrue ())
63+
64+ // Only set namespaced flag (multigroup not set, so it defaults to false)
65+ Expect (fs .Set ("namespaced" , "true" )).To (Succeed ())
66+
67+ // PreScaffold should preserve the existing multigroup value
68+ Expect (subCmd .PreScaffold (mockFS )).To (Succeed ())
69+
70+ // Both should be true
71+ Expect (subCmd .multigroup ).To (BeTrue (), "multigroup should be preserved from PROJECT file" )
72+ Expect (subCmd .namespaced ).To (BeTrue (), "namespaced should be set from flag" )
73+ })
74+
75+ It ("should preserve existing namespaced setting when only multigroup flag is set" , func () {
76+ // Set namespaced in PROJECT file
77+ Expect (cfg .SetNamespaced ()).To (Succeed ())
78+ Expect (cfg .IsNamespaced ()).To (BeTrue ())
79+
80+ // Only set multigroup flag (namespaced not set, so it defaults to false)
81+ Expect (fs .Set ("multigroup" , "true" )).To (Succeed ())
82+
83+ // PreScaffold should preserve the existing namespaced value
84+ Expect (subCmd .PreScaffold (mockFS )).To (Succeed ())
85+
86+ // Both should be true
87+ Expect (subCmd .multigroup ).To (BeTrue (), "multigroup should be set from flag" )
88+ Expect (subCmd .namespaced ).To (BeTrue (), "namespaced should be preserved from PROJECT file" )
89+ })
90+
91+ It ("should allow explicitly disabling a flag" , func () {
92+ // Set both in PROJECT file
93+ Expect (cfg .SetMultiGroup ()).To (Succeed ())
94+ Expect (cfg .SetNamespaced ()).To (Succeed ())
95+
96+ // Explicitly disable multigroup
97+ Expect (fs .Set ("multigroup" , "false" )).To (Succeed ())
98+
99+ // PreScaffold should respect the explicit false
100+ Expect (subCmd .PreScaffold (mockFS )).To (Succeed ())
101+
102+ // multigroup should be false (explicitly set), namespaced should be true (from PROJECT)
103+ Expect (subCmd .multigroup ).To (BeFalse (), "multigroup should be explicitly disabled" )
104+ Expect (subCmd .namespaced ).To (BeTrue (), "namespaced should be preserved from PROJECT file" )
105+ })
106+
107+ It ("should use flag values when both flags are explicitly set" , func () {
108+ // Set different values in PROJECT file
109+ Expect (cfg .SetMultiGroup ()).To (Succeed ())
110+ Expect (cfg .ClearNamespaced ()).To (Succeed ())
111+
112+ // Explicitly set both flags to opposite values
113+ Expect (fs .Set ("multigroup" , "false" )).To (Succeed ())
114+ Expect (fs .Set ("namespaced" , "true" )).To (Succeed ())
115+
116+ // PreScaffold should use the explicit flag values
117+ Expect (subCmd .PreScaffold (mockFS )).To (Succeed ())
118+
119+ Expect (subCmd .multigroup ).To (BeFalse (), "multigroup should use explicit flag value" )
120+ Expect (subCmd .namespaced ).To (BeTrue (), "namespaced should use explicit flag value" )
121+ })
122+
123+ It ("should preserve PROJECT file values when no flags are set" , func () {
124+ // Set values in PROJECT file
125+ Expect (cfg .SetMultiGroup ()).To (Succeed ())
126+ Expect (cfg .SetNamespaced ()).To (Succeed ())
127+
128+ // Don't set any flags
129+
130+ // PreScaffold should preserve both values from PROJECT file
131+ Expect (subCmd .PreScaffold (mockFS )).To (Succeed ())
132+
133+ Expect (subCmd .multigroup ).To (BeTrue (), "multigroup should be preserved from PROJECT file" )
134+ Expect (subCmd .namespaced ).To (BeTrue (), "namespaced should be preserved from PROJECT file" )
135+ })
136+ })
42137})
0 commit comments