11package filter
22
33import (
4+ "fmt"
45 "slices"
56 "testing"
67
@@ -16,6 +17,7 @@ import (
1617 ocv1 "github.com/operator-framework/operator-controller/api/v1"
1718 "github.com/operator-framework/operator-controller/internal/operator-controller/bundleutil"
1819 "github.com/operator-framework/operator-controller/internal/operator-controller/catalogmetadata/compare"
20+ "github.com/operator-framework/operator-controller/internal/operator-controller/features"
1921 "github.com/operator-framework/operator-controller/internal/shared/util/filter"
2022)
2123
@@ -242,8 +244,7 @@ func TestLegacySuccessor(t *testing.T) {
242244}
243245
244246// TestSuccessorsOf_WithReleaseVersionPriority_FeatureGateDisabled verifies higher releases
245- // are NOT successors when ReleaseVersionPriority gate is disabled (default).
246- // TODO: Feature gate enabled behavior must be tested in E2E tests.
247+ // are NOT successors when ReleaseVersionPriority gate is disabled (testing the default behavior).
247248func TestSuccessorsOf_WithReleaseVersionPriority_FeatureGateDisabled (t * testing.T ) {
248249 channel := declcfg.Channel {
249250 Entries : []declcfg.ChannelEntry {
@@ -273,3 +274,41 @@ func TestSuccessorsOf_WithReleaseVersionPriority_FeatureGateDisabled(t *testing.
273274 // Higher release should NOT match without feature gate
274275 assert .False (t , predicate (higherRelease ))
275276}
277+
278+ // TestSuccessorsOf_WithReleaseVersionPriority_FeatureGateEnabled verifies higher releases
279+ // as valid successors when ReleaseVersionPriority gate is enabled.
280+ func TestSuccessorsOf_WithReleaseVersionPriority_FeatureGateEnabled (t * testing.T ) {
281+ // Enable the feature gate for this test
282+ require .NoError (t , features .OperatorControllerFeatureGate .Set (fmt .Sprintf ("%s=true" , features .ReleaseVersionPriority )))
283+ t .Cleanup (func () {
284+ require .NoError (t , features .OperatorControllerFeatureGate .Set (fmt .Sprintf ("%s=false" , features .ReleaseVersionPriority )))
285+ })
286+
287+ channel := declcfg.Channel {
288+ Entries : []declcfg.ChannelEntry {
289+ {Name : "test-package.v1.0.0+1" },
290+ {
291+ Name : "test-package.v2.0.0" ,
292+ Replaces : "test-package.v1.0.0+1" ,
293+ },
294+ },
295+ }
296+ installedBundle := ocv1.BundleMetadata {
297+ Name : "test-package.v1.0.0+1" ,
298+ Version : "1.0.0+1" ,
299+ }
300+
301+ higherRelease := declcfg.Bundle {
302+ Name : "test-package.v1.0.0+2" ,
303+ Package : "test-package" ,
304+ Properties : []property.Property {
305+ property .MustBuildPackage ("test-package" , "1.0.0+2" ),
306+ },
307+ }
308+
309+ predicate , err := SuccessorsOf (installedBundle , channel )
310+ require .NoError (t , err )
311+
312+ // Higher release should match when feature gate is enabled
313+ assert .True (t , predicate (higherRelease ))
314+ }
0 commit comments