using NHIValidation; using System.Collections.Generic; using Xunit; using Xunit.Abstractions; namespace TestNhi { public class NHIValidationUnitTests { private readonly ITestOutputHelper _output; public NHIValidationUnitTests(ITestOutputHelper output) { _output = output; } [Theory] [MemberData(nameof(NHIs))] public void TestNHIsPass(string nhi) { Assert.True(NHIValidator.IsValid(nhi)); } [Theory] [MemberData(nameof(NHIs))] public void TestOtherNHIChecksumsFail(string nhi) { char checksum = nhi[6]; string baseNHI = nhi[0..6]; char[] possibleChecksums = char.IsDigit(checksum) ? new[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' } : new[] { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' }; foreach (var c in possibleChecksums) { if (c != checksum) { var n = baseNHI + c; Assert.False(NHIValidator.IsValid(n), $"NHI: {n} incorrectly found valid"); _output.WriteLine($"NHI: {n} correctly found invalid"); } } } [Theory] [InlineData("ZZZ0044")] // no digit can be added to "ZZZ004\d" [InlineData("ZZZZ000")] // 3 letters followed by either 4 numbers OR 2 numbers + 2 letters [InlineData("ZZZ?000")] public void TestNHIsFail(string nhi) { Assert.False(NHIValidator.IsValid(nhi)); } public static IEnumerable NHIs => new List { new object[] { "ZZZ0016" }, new object[] { "ZZZ0024" }, new object[] { "ZZZ00AX" }, new object[] { "ALU18KZ" } }; } }