@@ -735,6 +735,65 @@ public void NativeWinGetHelperUsesSystemCliFallbackForUpdatesWhenCompositeCatalo
735735 Assert . Equal ( "2.0.0" , package . NewVersionString ) ;
736736 }
737737
738+ [ Fact ]
739+ public void NativeWinGetHelperTakesANewCatalogSnapshotAfterTheSourceIndexIsRefreshed ( )
740+ {
741+ WinGet . MarkSourceIndexRefreshed ( ) ;
742+ int snapshots = 0 ;
743+ var helper = new NativeWinGetHelper (
744+ new TestableWinGet ( ) ,
745+ systemCliHelperFactory : null ,
746+ skipInitialization : true ,
747+ localPackagesProvider : ( ) =>
748+ {
749+ snapshots ++ ;
750+ return [ ] ;
751+ }
752+ ) ;
753+
754+ helper . GetInstalledPackages_UnSafe ( ) ;
755+ Assert . Equal ( 1 , snapshots ) ;
756+
757+ WinGet . MarkSourceIndexRefreshed ( ) ;
758+ helper . GetAvailableUpdates_UnSafe ( ) ;
759+
760+ Assert . Equal ( 2 , snapshots ) ;
761+ }
762+
763+ [ Fact ]
764+ public void NativeWinGetHelperReusesTheCatalogSnapshotWhileTheSourceIndexIsUnchanged ( )
765+ {
766+ WinGet . MarkSourceIndexRefreshed ( ) ;
767+ int snapshots = 0 ;
768+ var helper = new NativeWinGetHelper (
769+ new TestableWinGet ( ) ,
770+ systemCliHelperFactory : null ,
771+ skipInitialization : true ,
772+ localPackagesProvider : ( ) =>
773+ {
774+ snapshots ++ ;
775+ return [ ] ;
776+ }
777+ ) ;
778+
779+ helper . GetInstalledPackages_UnSafe ( ) ;
780+ helper . GetAvailableUpdates_UnSafe ( ) ;
781+ helper . GetAvailableUpdates_UnSafe ( ) ;
782+
783+ Assert . Equal ( 1 , snapshots ) ;
784+ }
785+
786+ [ Fact ]
787+ public void RefreshPackageIndexesAdvancesTheSourceIndexGenerationWhenTheCliCallFails ( )
788+ {
789+ var manager = new TestableWinGet ( ) ;
790+ long generationBefore = WinGet . SourceIndexGeneration ;
791+
792+ Assert . ThrowsAny < Exception > ( manager . RefreshPackageIndexes ) ;
793+
794+ Assert . NotEqual ( generationBefore , WinGet . SourceIndexGeneration ) ;
795+ }
796+
738797 [ Fact ]
739798 public void NativeWinGetHelperSelectReachableCatalogsSkipsUnavailableSources ( )
740799 {
0 commit comments