@@ -102,16 +102,17 @@ public void SourceDetails_EmptyMappingsArray_ReturnsBasedOnNuGetConfig()
102102 }
103103
104104 [ Fact ]
105- public async Task GetIntegrationPackagesAsync_WithPinnedLocalSource_ReturnsOnlyPinnedLocalPackages ( )
105+ public async Task GetIntegrationPackagesAsync_WithLocalHiveSource_ReturnsOnlyPinnedLocalIntegrationPackages ( )
106106 {
107107 using var workspace = TemporaryWorkspace . Create ( outputHelper ) ;
108108 var packagesDirectory = workspace . CreateDirectory ( "packages" ) ;
109109 const string pinnedVersion = "13.4.0-pr.16820.gabcdef" ;
110110
111- File . WriteAllText ( Path . Combine ( packagesDirectory . FullName , $ "Aspire.Hosting.Redis.{ pinnedVersion } .nupkg") , string . Empty ) ;
112- File . WriteAllText ( Path . Combine ( packagesDirectory . FullName , $ "Aspire.Hosting.PostgreSQL.{ pinnedVersion } .nupkg") , string . Empty ) ;
113- File . WriteAllText ( Path . Combine ( packagesDirectory . FullName , "Aspire.Hosting.SqlServer.13.3.0.nupkg" ) , string . Empty ) ;
114- File . WriteAllText ( Path . Combine ( packagesDirectory . FullName , $ "Aspire.ProjectTemplates.{ pinnedVersion } .nupkg") , string . Empty ) ;
111+ CreatePackageFile ( packagesDirectory , "Aspire.Hosting.Redis" , pinnedVersion ) ;
112+ CreatePackageFile ( packagesDirectory , "Aspire.Hosting.PostgreSQL" , pinnedVersion ) ;
113+ CreatePackageFile ( packagesDirectory , "Aspire.Hosting.SqlServer" , "13.3.0" ) ;
114+ CreatePackageFile ( packagesDirectory , "Aspire.Hosting.Testing" , pinnedVersion ) ;
115+ CreatePackageFile ( packagesDirectory , "Aspire.ProjectTemplates" , pinnedVersion ) ;
115116
116117 var cache = new FakeNuGetPackageCache
117118 {
@@ -123,7 +124,7 @@ public async Task GetIntegrationPackagesAsync_WithPinnedLocalSource_ReturnsOnlyP
123124 new PackageMapping ( "Aspire*" , packageSource ) ,
124125 new PackageMapping ( PackageMapping . AllPackages , "https://api.nuget.org/v3/index.json" )
125126 } ;
126- var channel = PackageChannel . CreateExplicitChannel ( "local" , PackageChannelQuality . Both , mappings , cache , pinnedVersion : pinnedVersion ) ;
127+ var channel = PackageChannel . CreateExplicitChannel ( PackageChannelNames . Local , PackageChannelQuality . Both , mappings , cache , pinnedVersion : pinnedVersion ) ;
127128
128129 var packages = ( await channel . GetIntegrationPackagesAsync ( workspace . WorkspaceRoot , CancellationToken . None ) . DefaultTimeout ( ) ) . ToArray ( ) ;
129130
@@ -142,4 +143,59 @@ public async Task GetIntegrationPackagesAsync_WithPinnedLocalSource_ReturnsOnlyP
142143 Assert . Equal ( packageSource , package . Source ) ;
143144 } ) ;
144145 }
146+
147+ [ Fact ]
148+ public async Task GetIntegrationPackagesAsync_WithUnpinnedLocalHiveSource_ReturnsLatestLocalIntegrationPackages ( )
149+ {
150+ using var workspace = TemporaryWorkspace . Create ( outputHelper ) ;
151+ var packagesDirectory = workspace . CreateDirectory ( "packages" ) ;
152+ const string oldVersion = "13.4.0-local.1" ;
153+ const string newVersion = "13.4.0-local.2" ;
154+
155+ CreatePackageFile ( packagesDirectory , "Aspire.Hosting.Redis" , oldVersion ) ;
156+ CreatePackageFile ( packagesDirectory , "Aspire.Hosting.Redis" , newVersion ) ;
157+ CreatePackageFile ( packagesDirectory , "Aspire.Hosting.PostgreSQL" , oldVersion ) ;
158+ CreatePackageFile ( packagesDirectory , "CommunityToolkit.Aspire.Hosting.Dapr" , newVersion ) ;
159+ CreatePackageFile ( packagesDirectory , "Aspire.Hosting.AppHost" , newVersion ) ;
160+
161+ var cache = new FakeNuGetPackageCache
162+ {
163+ GetIntegrationPackagesAsyncCallback = ( _ , _ , _ , _ ) => throw new InvalidOperationException ( "Local package sources should be enumerated directly." )
164+ } ;
165+ var packageSource = packagesDirectory . FullName . Replace ( '\\ ' , '/' ) ;
166+ var mappings = new [ ]
167+ {
168+ new PackageMapping ( "Aspire*" , packageSource ) ,
169+ new PackageMapping ( PackageMapping . AllPackages , "https://api.nuget.org/v3/index.json" )
170+ } ;
171+ var channel = PackageChannel . CreateExplicitChannel ( PackageChannelNames . Local , PackageChannelQuality . Both , mappings , cache ) ;
172+
173+ var packages = ( await channel . GetIntegrationPackagesAsync ( workspace . WorkspaceRoot , CancellationToken . None ) . DefaultTimeout ( ) ) . ToArray ( ) ;
174+
175+ Assert . Collection (
176+ packages ,
177+ package =>
178+ {
179+ Assert . Equal ( "Aspire.Hosting.PostgreSQL" , package . Id ) ;
180+ Assert . Equal ( oldVersion , package . Version ) ;
181+ Assert . Equal ( packageSource , package . Source ) ;
182+ } ,
183+ package =>
184+ {
185+ Assert . Equal ( "Aspire.Hosting.Redis" , package . Id ) ;
186+ Assert . Equal ( newVersion , package . Version ) ;
187+ Assert . Equal ( packageSource , package . Source ) ;
188+ } ,
189+ package =>
190+ {
191+ Assert . Equal ( "CommunityToolkit.Aspire.Hosting.Dapr" , package . Id ) ;
192+ Assert . Equal ( newVersion , package . Version ) ;
193+ Assert . Equal ( packageSource , package . Source ) ;
194+ } ) ;
195+ }
196+
197+ private static void CreatePackageFile ( DirectoryInfo directory , string packageId , string version )
198+ {
199+ File . WriteAllText ( Path . Combine ( directory . FullName , $ "{ packageId } .{ version } .nupkg") , string . Empty ) ;
200+ }
145201}
0 commit comments