diff --git a/EssentialCSharp.Web.Tests/SiteMappingTests.cs b/EssentialCSharp.Web.Tests/SiteMappingTests.cs index 91b4e7d9..457b2e9d 100644 --- a/EssentialCSharp.Web.Tests/SiteMappingTests.cs +++ b/EssentialCSharp.Web.Tests/SiteMappingTests.cs @@ -59,6 +59,13 @@ public async Task FindHelloWorldWithAnchorSlugReturnsCorrectSiteMap() await Assert.That(foundSiteMap).IsEquivalentTo(HelloWorldSiteMapping); } + [Test] + public async Task Find_NullSiteMappings_ThrowsArgumentNullException() + { + await Assert.That(() => ((IList)null!).Find("hello-world")) + .Throws(); + } + [Test] public async Task FindCSyntaxFundamentalsWithSpacesReturnsCorrectSiteMap() { @@ -95,6 +102,13 @@ public async Task FindPercentComplete_KeyIsNull_ReturnsNull() await Assert.That(percent).IsNull(); } + [Test] + public async Task FindPercentComplete_NullSiteMappings_ThrowsArgumentNullException() + { + await Assert.That(() => ((IList)null!).FindPercentComplete("hello-world")) + .Throws(); + } + [Test] [Arguments(" ")] [Arguments("")] diff --git a/EssentialCSharp.Web/Extensions/SiteMappingListExtensions.cs b/EssentialCSharp.Web/Extensions/SiteMappingListExtensions.cs index 3e50d4e5..90ba2e37 100644 --- a/EssentialCSharp.Web/Extensions/SiteMappingListExtensions.cs +++ b/EssentialCSharp.Web/Extensions/SiteMappingListExtensions.cs @@ -12,6 +12,8 @@ public static class SiteMappingListExtensions /// If found, the site mapping that matches the key, otherwise null. public static SiteMapping? Find(this IList siteMappings, string? key) { + ArgumentNullException.ThrowIfNull(siteMappings); + if (string.IsNullOrWhiteSpace(key)) { return siteMappings.FirstOrDefault(); @@ -28,6 +30,8 @@ public static class SiteMappingListExtensions /// Returns a formatted double for use as the percent complete. public static string? FindPercentComplete(this IList siteMappings, string? key) { + ArgumentNullException.ThrowIfNull(siteMappings); + if (key is null) { return null;