@@ -151,6 +151,18 @@ func TestGetVersionAndRelease_WithBundleReleaseSupport(t *testing.T) {
151151 },
152152 wantErr : true ,
153153 },
154+ {
155+ name : "explicit empty release - preserves build metadata in version" ,
156+ pkgProperty : & property.Property {
157+ Type : property .TypePackage ,
158+ Value : json .RawMessage (`{"version": "1.0.0+2", "release": ""}` ),
159+ },
160+ wantVersionRelease : & bundle.VersionRelease {
161+ Version : bsemver .MustParse ("1.0.0+2" ), // Build metadata preserved (not extracted as release)
162+ Release : bundle .Release ([]bsemver.PRVersion {}), // Explicit empty release
163+ },
164+ wantErr : false ,
165+ },
154166 }
155167
156168 for _ , tc := range tests {
@@ -205,38 +217,76 @@ func TestGetVersionAndRelease_WithBundleReleaseSupport(t *testing.T) {
205217}
206218
207219func TestMetadataFor (t * testing.T ) {
208- t .Run ("with release" , func (t * testing.T ) {
209- vr := bundle.VersionRelease {
210- Version : bsemver .MustParse ("1.0.0" ),
211- Release : bundle .Release ([]bsemver.PRVersion {{VersionNum : 2 , IsNum : true }}),
212- }
213- result := bundleutil .MetadataFor ("test-bundle" , vr )
214- require .Equal (t , "test-bundle" , result .Name )
215- require .Equal (t , "1.0.0" , result .Version )
216- require .NotNil (t , result .Release )
217- require .Equal (t , "2" , * result .Release )
218- })
220+ t .Run ("with feature gate enabled" , func (t * testing.T ) {
221+ prevEnabled := features .OperatorControllerFeatureGate .Enabled (features .BundleReleaseSupport )
222+ require .NoError (t , features .OperatorControllerFeatureGate .Set ("BundleReleaseSupport=true" ))
223+ t .Cleanup (func () {
224+ require .NoError (t , features .OperatorControllerFeatureGate .Set (fmt .Sprintf ("BundleReleaseSupport=%t" , prevEnabled )))
225+ })
219226
220- t .Run ("without release" , func (t * testing.T ) {
221- vr := bundle.VersionRelease {
222- Version : bsemver .MustParse ("1.0.0" ),
223- Release : nil ,
224- }
225- result := bundleutil .MetadataFor ("test-bundle" , vr )
226- require .Equal (t , "test-bundle" , result .Name )
227- require .Equal (t , "1.0.0" , result .Version )
228- require .Nil (t , result .Release )
227+ t .Run ("with release" , func (t * testing.T ) {
228+ vr := bundle.VersionRelease {
229+ Version : bsemver .MustParse ("1.0.0" ),
230+ Release : bundle .Release ([]bsemver.PRVersion {{VersionNum : 2 , IsNum : true }}),
231+ }
232+ result := bundleutil .MetadataFor ("test-bundle" , vr )
233+ require .Equal (t , "test-bundle" , result .Name )
234+ require .Equal (t , "1.0.0" , result .Version )
235+ require .NotNil (t , result .Release )
236+ require .Equal (t , "2" , * result .Release )
237+ })
238+
239+ t .Run ("without release" , func (t * testing.T ) {
240+ vr := bundle.VersionRelease {
241+ Version : bsemver .MustParse ("1.0.0" ),
242+ Release : nil ,
243+ }
244+ result := bundleutil .MetadataFor ("test-bundle" , vr )
245+ require .Equal (t , "test-bundle" , result .Name )
246+ require .Equal (t , "1.0.0" , result .Version )
247+ require .Nil (t , result .Release )
248+ })
249+
250+ t .Run ("with explicit empty release" , func (t * testing.T ) {
251+ vr := bundle.VersionRelease {
252+ Version : bsemver .MustParse ("1.0.0" ),
253+ Release : bundle .Release ([]bsemver.PRVersion {}),
254+ }
255+ result := bundleutil .MetadataFor ("test-bundle" , vr )
256+ require .Equal (t , "test-bundle" , result .Name )
257+ require .Equal (t , "1.0.0" , result .Version )
258+ require .NotNil (t , result .Release )
259+ require .Empty (t , * result .Release )
260+ })
229261 })
230262
231- t .Run ("with explicit empty release" , func (t * testing.T ) {
232- vr := bundle.VersionRelease {
233- Version : bsemver .MustParse ("1.0.0" ),
234- Release : bundle .Release ([]bsemver.PRVersion {}),
235- }
236- result := bundleutil .MetadataFor ("test-bundle" , vr )
237- require .Equal (t , "test-bundle" , result .Name )
238- require .Equal (t , "1.0.0" , result .Version )
239- require .NotNil (t , result .Release )
240- require .Empty (t , * result .Release )
263+ t .Run ("with feature gate disabled (legacy mode)" , func (t * testing.T ) {
264+ prevEnabled := features .OperatorControllerFeatureGate .Enabled (features .BundleReleaseSupport )
265+ require .NoError (t , features .OperatorControllerFeatureGate .Set ("BundleReleaseSupport=false" ))
266+ t .Cleanup (func () {
267+ require .NoError (t , features .OperatorControllerFeatureGate .Set (fmt .Sprintf ("BundleReleaseSupport=%t" , prevEnabled )))
268+ })
269+
270+ t .Run ("reconstitutes build metadata in version" , func (t * testing.T ) {
271+ vr := bundle.VersionRelease {
272+ Version : bsemver .MustParse ("1.0.0" ),
273+ Release : bundle .Release ([]bsemver.PRVersion {{VersionNum : 2 , IsNum : true }}),
274+ }
275+ result := bundleutil .MetadataFor ("test-bundle" , vr )
276+ require .Equal (t , "test-bundle" , result .Name )
277+ require .Equal (t , "1.0.0+2" , result .Version ) // Build metadata reconstituted
278+ require .Nil (t , result .Release ) // Release field not used in legacy mode
279+ })
280+
281+ t .Run ("preserves original build metadata when no release" , func (t * testing.T ) {
282+ vr := bundle.VersionRelease {
283+ Version : bsemver .MustParse ("1.0.0" ),
284+ Release : nil ,
285+ }
286+ result := bundleutil .MetadataFor ("test-bundle" , vr )
287+ require .Equal (t , "test-bundle" , result .Name )
288+ require .Equal (t , "1.0.0" , result .Version )
289+ require .Nil (t , result .Release )
290+ })
241291 })
242292}
0 commit comments