Skip to content

Commit aa0c466

Browse files
committed
more tests
1 parent 1c0792c commit aa0c466

3 files changed

Lines changed: 106 additions & 7 deletions

File tree

src/NuGet.Core/NuGet.CommandLine.XPlat/Commands/Package/Download/PackageDownloadRunner.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,7 @@ await ResolvePackageDownloadVersion(
240240
return (versionToDownload, downloadSourceRepository);
241241
}
242242

243-
private static IReadOnlyList<SourceRepository> GetMappedRepositories(
243+
internal static IReadOnlyList<SourceRepository> GetMappedRepositories(
244244
IReadOnlyList<string> mappedNames,
245245
IReadOnlyList<SourceRepository> allRepos,
246246
string packageId,

test/NuGet.Core.FuncTests/NuGet.XPlat.FuncTest/Package/Download/PackageDownloadRunnerTests.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -638,7 +638,7 @@ public async Task RunAsync_WhenSourceMappingMapsToInsecureSource_AndAllowInsecur
638638
exit.Should().Be(PackageDownloadRunner.ExitCodeError);
639639
logger.Verify(
640640
l => l.LogError(expectedError),
641-
Times.AtLeastOnce);
641+
Times.Once);
642642

643643
}
644644

@@ -701,7 +701,7 @@ public async Task RunAsync_WhenSourceMappingEnabled_PackageMapsToNoSource_Fails(
701701
{
702702
// Arrange
703703
using var context = new SimpleTestPathContext();
704-
PackageSource source = new("http://contoso.test/v3/index.json", "Insecure");
704+
PackageSource source = new(context.PackageSource, "source");
705705
context.Settings.AddSource(source.Name, source.SourceUri.OriginalString);
706706
context.Settings.AddPackageSourceMapping(source.Name, "Contoso.Not.*");
707707
var settings = Settings.LoadSettingsGivenConfigPaths([context.Settings.ConfigPath]);
@@ -711,10 +711,10 @@ public async Task RunAsync_WhenSourceMappingEnabled_PackageMapsToNoSource_Fails(
711711
var version = "1.0.0";
712712

713713
string expectedError = string.Format(
714-
CultureInfo.CurrentCulture,
715-
Strings.PackageDownloadCommand_PackageSourceMapping_NoSourcesMapped,
716-
id,
717-
source);
714+
CultureInfo.CurrentCulture,
715+
Strings.PackageDownloadCommand_PackageSourceMapping_NoSourcesMapped,
716+
id,
717+
source);
718718

719719
// arguments
720720
var logger = new Mock<ILoggerWithColor>(MockBehavior.Loose);

test/NuGet.Core.Tests/NuGet.CommandLine.Xplat.Tests/Commands/Package/Download/PackageDownloadRunnerTests.cs

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
#nullable disable
55

66
using System.Collections.Generic;
7+
using System.Globalization;
78
using System.IO;
89
using System.Threading;
910
using System.Threading.Tasks;
@@ -202,4 +203,102 @@ public async Task ResolvePackageDownloadVersion_UnlistedPackage_BehavesAsExpecte
202203
foundRepo.Should().BeNull();
203204
}
204205
}
206+
207+
[Theory]
208+
[InlineData("A", "a")]
209+
[InlineData("a", "A")]
210+
[InlineData("SourceA", "sourcea")]
211+
[InlineData("SOURCEA", "sourcea")]
212+
public void GetMappedRepositories_WithVariousSourceCasing_ReturnsOnlyApplicableSources(string sourceNameConfig, string sourceNameMapped)
213+
{
214+
// Arrange
215+
var packageId = "Contoso.Package";
216+
var packageSource = new PackageSource(sourceNameConfig, sourceNameConfig);
217+
var repository = new Mock<SourceRepository>();
218+
repository.Setup(r => r.PackageSource).Returns(packageSource);
219+
var allRepos = new List<SourceRepository> { repository.Object };
220+
var mappedNames = new List<string> { sourceNameMapped };
221+
var logger = new Mock<ILoggerWithColor>(MockBehavior.Loose);
222+
223+
// Act
224+
var result = PackageDownloadRunner.GetMappedRepositories(
225+
mappedNames,
226+
allRepos,
227+
packageId,
228+
logger.Object);
229+
230+
// Assert
231+
result.Should().HaveCount(1);
232+
result[0].PackageSource.Name.Should().Be(sourceNameConfig);
233+
}
234+
235+
[Fact]
236+
public void GetMappedRepositories_WhenSourceMissing_LogsVerbose()
237+
{
238+
// Arrange
239+
var packageId = "Contoso.Package";
240+
241+
var existingRepo = new Mock<SourceRepository>();
242+
existingRepo.Setup(r => r.PackageSource).Returns(new PackageSource("A", "A"));
243+
244+
var allRepos = new List<SourceRepository> { existingRepo.Object };
245+
string mappedName = "MissingSource";
246+
var mappedNames = new List<string> { mappedName };
247+
248+
string captured = "";
249+
var logger = new Mock<ILoggerWithColor>(MockBehavior.Loose);
250+
logger.Setup(l => l.LogVerbose(It.IsAny<string>()))
251+
.Callback<string>(msg => captured += msg);
252+
253+
string expectedLog = string.Format(
254+
CultureInfo.CurrentCulture,
255+
XPlat.Strings.PackageDownloadCommand_PackageSourceMapping_NoSuchSource,
256+
mappedName,
257+
packageId);
258+
259+
// Act
260+
var result = PackageDownloadRunner.GetMappedRepositories(
261+
mappedNames,
262+
allRepos,
263+
packageId,
264+
logger.Object);
265+
266+
// Assert
267+
result.Should().BeEmpty();
268+
captured.Should().Contain(expectedLog);
269+
}
270+
271+
[Fact]
272+
public void GetMappedRepositories_WhenAllMappedSourcesExist_ReturnsAllMatchedRepositories()
273+
{
274+
// Arrange
275+
var packageId = "Contoso.Package";
276+
277+
var packageSourceA = new PackageSource("Source1", "Source1");
278+
var packageSourceB = new PackageSource("Source2", "Source2");
279+
280+
var repoA = new Mock<SourceRepository>();
281+
repoA.Setup(r => r.PackageSource).Returns(packageSourceA);
282+
283+
var repoB = new Mock<SourceRepository>();
284+
repoB.Setup(r => r.PackageSource).Returns(packageSourceB);
285+
286+
var allRepos = new List<SourceRepository> { repoA.Object, repoB.Object };
287+
var mappedNames = new List<string> { "Source1", "source2" };
288+
289+
var logger = new Mock<ILoggerWithColor>(MockBehavior.Loose);
290+
291+
// Act
292+
var result = PackageDownloadRunner.GetMappedRepositories(
293+
mappedNames,
294+
allRepos,
295+
packageId,
296+
logger.Object);
297+
298+
// Assert
299+
Assert.Equal(2, result.Count);
300+
Assert.Equal(packageSourceA.Name, result[0].PackageSource.Name);
301+
Assert.Equal(packageSourceB.Name, result[1].PackageSource.Name);
302+
logger.Verify(l => l.LogVerbose(It.IsAny<string>()), Times.Never);
303+
}
205304
}

0 commit comments

Comments
 (0)