@@ -661,6 +661,56 @@ public async Task GetPackageDownloaderAsync_ReturnsPackageDownloader()
661661 }
662662 }
663663
664+ [ Fact ]
665+ public async Task GetAllVersionsAsync_EnsuresResourceIsInitialized_ReturnsVersions ( )
666+ {
667+ // Arrange
668+ // This test verifies that GetAllVersionsAsync properly calls EnsureResource
669+ // to initialize _findPackagesByIdResource. Previously, EnsureResource was not called
670+ // and GetAllVersionsInternalAsync would see _findPackagesByIdResource as null,
671+ // silently returning null instead of the actual versions.
672+ var testLogger = new TestLogger ( ) ;
673+ var cacheContext = new SourceCacheContext ( ) ;
674+ var expectedVersions = new [ ] { NuGetVersion . Parse ( "1.0.0" ) , NuGetVersion . Parse ( "2.0.0" ) } ;
675+
676+ var findResource = new Mock < FindPackageByIdResource > ( ) ;
677+ findResource . Setup ( s => s . GetAllVersionsAsync (
678+ It . IsAny < string > ( ) ,
679+ It . IsAny < SourceCacheContext > ( ) ,
680+ It . IsAny < ILogger > ( ) ,
681+ It . IsAny < CancellationToken > ( ) ) )
682+ . ReturnsAsync ( expectedVersions ) ;
683+
684+ var source = new Mock < SourceRepository > ( ) ;
685+ source . Setup ( s => s . GetResourceAsync < FindPackageByIdResource > ( CancellationToken . None ) )
686+ . ReturnsAsync ( findResource . Object ) ;
687+ source . SetupGet ( s => s . PackageSource )
688+ . Returns ( new PackageSource ( "http://test/index.json" ) ) ;
689+
690+ var provider = new SourceRepositoryDependencyProvider (
691+ source . Object ,
692+ testLogger ,
693+ cacheContext ,
694+ ignoreFailedSources : true ,
695+ ignoreWarning : true ) ;
696+
697+ // Act
698+ var versions = await provider . GetAllVersionsAsync (
699+ "x" ,
700+ cacheContext ,
701+ testLogger ,
702+ CancellationToken . None ) ;
703+
704+ // Assert
705+ versions . Should ( ) . BeEquivalentTo ( expectedVersions ) ;
706+ source . Verify ( s => s . GetResourceAsync < FindPackageByIdResource > ( CancellationToken . None ) , Times . Once ) ;
707+ findResource . Verify ( s => s . GetAllVersionsAsync (
708+ "x" ,
709+ It . IsAny < SourceCacheContext > ( ) ,
710+ It . IsAny < ILogger > ( ) ,
711+ It . IsAny < CancellationToken > ( ) ) , Times . Once ) ;
712+ }
713+
664714 [ Fact ]
665715 public async Task FindLibraryAsync_WhenASourceIsInaccessible_AndFailuresAreNotIgnored_EveryCallLogsAnErrorMessage ( )
666716 {
0 commit comments