diff --git a/NuKeeper.Inspection.Tests/NuGetApi/ApiPackageLookupTests.cs b/NuKeeper.Inspection.Tests/NuGetApi/ApiPackageLookupTests.cs index 7da1ef855..829b3fc16 100644 --- a/NuKeeper.Inspection.Tests/NuGetApi/ApiPackageLookupTests.cs +++ b/NuKeeper.Inspection.Tests/NuGetApi/ApiPackageLookupTests.cs @@ -4,6 +4,7 @@ using NSubstitute; using NuGet.Packaging.Core; using NuGet.Versioning; +using NuKeeper.Abstractions; using NuKeeper.Abstractions.Configuration; using NuKeeper.Abstractions.NuGet; using NuKeeper.Abstractions.NuGetApi; @@ -16,20 +17,18 @@ namespace NuKeeper.Inspection.Tests.NuGetApi public class ApiPackageLookupTests { [Test] - public async Task WhenNoPackagesAreFound() + public void WhenNoPackagesAreFound() { var allVersionsLookup = MockVersionLookup(new List()); IApiPackageLookup lookup = new ApiPackageLookup(allVersionsLookup); - var updates = await lookup.FindVersionUpdate( - CurrentVersion123("TestPackage"), - NuGetSources.GlobalFeed, - VersionChange.Major, - UsePrerelease.FromPrerelease); - - Assert.That(updates, Is.Not.Null); - Assert.That(updates.Major, Is.Null); - Assert.That(updates.Selected(), Is.Null); + var exception = Assert.ThrowsAsync(async () => + await lookup.FindVersionUpdate( + CurrentVersion123("TestPackage"), + NuGetSources.GlobalFeed, + VersionChange.Major, + UsePrerelease.FromPrerelease)); + Assert.That(exception.Message, Is.EqualTo("Could not find package TestPackage.1.2.3 in these sources: https://api.nuget.org/v3/index.json")); } [Test] diff --git a/NuKeeper.Inspection/NuGetApi/ApiPackageLookup.cs b/NuKeeper.Inspection/NuGetApi/ApiPackageLookup.cs index ba4768da1..efe69ac81 100644 --- a/NuKeeper.Inspection/NuGetApi/ApiPackageLookup.cs +++ b/NuKeeper.Inspection/NuGetApi/ApiPackageLookup.cs @@ -1,4 +1,5 @@ using System; +using System.Linq; using System.Threading.Tasks; using NuGet.Packaging.Core; using NuKeeper.Abstractions; @@ -31,6 +32,10 @@ public async Task FindVersionUpdate( var includePrerelease = ShouldAllowPrerelease(package, usePrerelease); var foundVersions = await _packageVersionsLookup.Lookup(package.Id, includePrerelease, sources); + + if (!foundVersions.Any()) + throw new NuKeeperException($"Could not find package {package} in these sources: {sources}"); + return VersionChanges.MakeVersions(package.Version, foundVersions, allowedChange); } diff --git a/NuKeeper.Integration.Tests/NuGet/Api/ApiPackageLookupTests.cs b/NuKeeper.Integration.Tests/NuGet/Api/ApiPackageLookupTests.cs index 413ffd0e8..a8421282c 100644 --- a/NuKeeper.Integration.Tests/NuGet/Api/ApiPackageLookupTests.cs +++ b/NuKeeper.Integration.Tests/NuGet/Api/ApiPackageLookupTests.cs @@ -1,5 +1,6 @@ using NuGet.Packaging.Core; using NuGet.Versioning; +using NuKeeper.Abstractions; using NuKeeper.Abstractions.Configuration; using NuKeeper.Abstractions.NuGet; using NuKeeper.Inspection.NuGetApi; @@ -33,19 +34,17 @@ public async Task AmbiguousPackageName_ShouldReturnCorrectResult() } [Test] - public async Task UnknownPackageName_ShouldNotReturnResult() + public void UnknownPackageName_ShouldNotReturnResult() { var lookup = BuildPackageLookup(); - var package = await lookup.FindVersionUpdate( - Current(Guid.NewGuid().ToString()), - NuGetSources.GlobalFeed, - VersionChange.Major, - UsePrerelease.FromPrerelease); - - Assert.That(package, Is.Not.Null); - Assert.That(package.Major, Is.Null); - Assert.That(package.Selected(), Is.Null); + var exception = Assert.ThrowsAsync(async () => + await lookup.FindVersionUpdate( + Current(Guid.NewGuid().ToString()), + NuGetSources.GlobalFeed, + VersionChange.Major, + UsePrerelease.FromPrerelease)); + Assert.That(exception.Message, Does.Match("Could not find package (.+?) in these sources: https://api.nuget.org/v3/index.json")); } [Test] diff --git a/NuKeeper.Integration.Tests/NuGet/Api/BulkPackageLookupTests.cs b/NuKeeper.Integration.Tests/NuGet/Api/BulkPackageLookupTests.cs index 60313b968..6c4270a99 100644 --- a/NuKeeper.Integration.Tests/NuGet/Api/BulkPackageLookupTests.cs +++ b/NuKeeper.Integration.Tests/NuGet/Api/BulkPackageLookupTests.cs @@ -1,5 +1,6 @@ using NuGet.Packaging.Core; using NuGet.Versioning; +using NuKeeper.Abstractions; using NuKeeper.Abstractions.Configuration; using NuKeeper.Abstractions.NuGet; using NuKeeper.Inspection.NuGetApi; @@ -73,7 +74,7 @@ public async Task FindsSingleUpdateForPackageDifferingOnlyByCase() } [Test] - public async Task InvalidPackageIsIgnored() + public void InvalidPackageThrows() { var packages = new List { @@ -82,12 +83,11 @@ public async Task InvalidPackageIsIgnored() var lookup = BuildBulkPackageLookup(); - var results = await lookup.FindVersionUpdates( - packages, NuGetSources.GlobalFeed, VersionChange.Major, - UsePrerelease.FromPrerelease); - - Assert.That(results, Is.Not.Null); - Assert.That(results, Is.Empty); + var exception = Assert.ThrowsAsync(async () => + await lookup.FindVersionUpdates( + packages, NuGetSources.GlobalFeed, VersionChange.Major, + UsePrerelease.FromPrerelease)); + Assert.That(exception.Message, Does.Match("Could not find package (.+?) in these sources: https://api.nuget.org/v3/index.json")); } [Test] @@ -103,30 +103,6 @@ public async Task TestEmptyList() Assert.That(results, Is.Empty); } - [Test] - public async Task ValidPackagesWorkDespiteInvalidPackages() - { - var packages = new List - { - Current("Moq"), - Current(Guid.NewGuid().ToString()), - Current("Newtonsoft.Json"), - Current(Guid.NewGuid().ToString()) - }; - - var lookup = BuildBulkPackageLookup(); - - var results = await lookup.FindVersionUpdates( - packages, NuGetSources.GlobalFeed, VersionChange.Major, - UsePrerelease.FromPrerelease); - - var updatedPackages = results.Select(p => p.Key); - Assert.That(results, Is.Not.Null); - Assert.That(results.Count, Is.EqualTo(2)); - Assert.That(updatedPackages, Has.Some.Matches(p => p.Id == "Moq")); - Assert.That(updatedPackages, Has.Some.Matches(p => p.Id == "Newtonsoft.Json")); - } - private BulkPackageLookup BuildBulkPackageLookup() { var lookup = new ApiPackageLookup(new PackageVersionsLookup(NugetLogger, NukeeperLogger)); diff --git a/NuKeeper/ExitCodes.cs b/NuKeeper/ExitCodes.cs index c257bed2a..34b21f2a5 100644 --- a/NuKeeper/ExitCodes.cs +++ b/NuKeeper/ExitCodes.cs @@ -8,5 +8,6 @@ enum ExitCodes Success = 0, UnknownError = 1 << 0, InvalidArguments = 1 << 1, + OtherError = 1 << 2, } } diff --git a/NuKeeper/Program.cs b/NuKeeper/Program.cs index 2d7dadd3a..81f58117d 100644 --- a/NuKeeper/Program.cs +++ b/NuKeeper/Program.cs @@ -1,4 +1,5 @@ using McMaster.Extensions.CommandLineUtils; +using NuKeeper.Abstractions; using NuKeeper.Commands; using System; using System.Reflection; @@ -39,6 +40,11 @@ public static async Task Main(string[] args) Console.WriteLine(cpe.Message); return (int)ExitCodes.InvalidArguments; } + catch (NuKeeperException nke) + { + Console.WriteLine(nke.Message); + return (int)ExitCodes.OtherError; + } catch (Exception ex) { Console.WriteLine(ex.ToString());