@@ -622,11 +622,16 @@ func TestApply_Upgrade(t *testing.T) {
622622
623623 t .Run ("fails during upgrade reconcile (StateUnchanged)" , func (t * testing.T ) {
624624 // make sure desired and current are the same this time
625- testDesiredRelease := * testCurrentRelease
625+ // Current release must have the same labels as storageLabels to trigger StateUnchanged
626+ testCurrentWithLabels := & release.Release {
627+ Info : & release.Info {Status : release .StatusDeployed },
628+ Labels : testStorageLabels ,
629+ }
630+ testDesiredRelease := * testCurrentWithLabels
626631
627632 mockAcg := & mockActionGetter {
628633 reconcileErr : errors .New ("failed reconciling charts" ),
629- currentRel : testCurrentRelease ,
634+ currentRel : testCurrentWithLabels ,
630635 desiredRel : & testDesiredRelease ,
631636 }
632637 mockPf := & mockPreflight {}
@@ -666,6 +671,47 @@ func TestApply_Upgrade(t *testing.T) {
666671 require .True (t , installSucceeded )
667672 require .Empty (t , installStatus )
668673 })
674+
675+ t .Run ("triggers upgrade when storage labels change but manifest is unchanged" , func (t * testing.T ) {
676+ // Current release has old labels but same manifest as desired
677+ testCurrentWithLabels := & release.Release {
678+ Info : & release.Info {Status : release .StatusDeployed },
679+ Labels : map [string ]string {"bundle-version" : "v1.0.0" },
680+ Manifest : validManifest , // Same manifest as desired - only labels differ
681+ }
682+ // Desired release has same manifest as current (no manifest change)
683+ testDesiredRelease := & release.Release {
684+ Info : & release.Info {Status : release .StatusDeployed },
685+ Manifest : validManifest ,
686+ }
687+
688+ mockAcg := & mockActionGetter {
689+ currentRel : testCurrentWithLabels ,
690+ desiredRel : testDesiredRelease ,
691+ // Set reconcileErr to ensure test fails if reconcile path is taken instead of upgrade
692+ reconcileErr : errors .New ("reconcile should not be called when labels change" ),
693+ }
694+
695+ helmApplier := applier.Helm {
696+ ActionClientGetter : mockAcg ,
697+ HelmChartProvider : DummyHelmChartProvider ,
698+ HelmReleaseToObjectsConverter : mockHelmReleaseToObjectsConverter {},
699+ Manager : & mockManagedContentCacheManager {
700+ cache : & mockManagedContentCache {},
701+ },
702+ }
703+
704+ // Use new storage labels that differ from current release labels
705+ newStorageLabels := map [string ]string {"bundle-version" : "v2.0.0" }
706+ installSucceeded , installStatus , err := helmApplier .Apply (context .TODO (), validFS , testCE , testObjectLabels , newStorageLabels )
707+
708+ // If the code correctly triggers upgrade (not reconcile) when labels change,
709+ // the test succeeds. If it incorrectly takes the reconcile path, reconcileErr
710+ // will cause the test to fail.
711+ require .NoError (t , err )
712+ require .True (t , installSucceeded )
713+ require .Empty (t , installStatus )
714+ })
669715}
670716
671717func TestApply_RegistryV1ToChartConverterIntegration (t * testing.T ) {
0 commit comments