Skip to content

Commit 76d1994

Browse files
radicalCopilot
andcommitted
Tighten localhive package channel coverage
The localhive install route added by #17105 keeps using the local channel and hive package folder layout. Make that contract explicit in the package channel tests by using PackageChannelNames.Local and covering both pinned and unpinned local hive package enumeration. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 9291dec commit 76d1994

1 file changed

Lines changed: 62 additions & 6 deletions

File tree

tests/Aspire.Cli.Tests/Packaging/PackageChannelTests.cs

Lines changed: 62 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)