using MiniSkeletonAPI.Application.Common.Exceptions; using FluentAssertions; using FluentValidation.Results; using NUnit.Framework; namespace Application.UnitTests.Common.Exceptions; public class ValidationExceptionTests { [Test] public void DefaultConstructorCreatesAnEmptyErrorDictionary() { var actual = new ValidationException().Errors; actual.Keys.Should().BeEquivalentTo(Array.Empty()); } [Test] public void SingleValidationFailureCreatesASingleElementErrorDictionary() { var failures = new List { new ValidationFailure("Password", "must contain at least 8 characters"), }; var actual = new ValidationException(failures).Errors; actual.Keys.Should().BeEquivalentTo(new string[] { "Password" }); actual["Password"].Should().BeEquivalentTo(new string[] { "must contain at least 8 characters" }); } [Test] public void MulitpleValidationFailureForMultiplePropertiesCreatesAMultipleElementErrorDictionaryEachWithMultipleValues() { var failures = new List { new ValidationFailure("Password", "must contain at least 8 characters"), new ValidationFailure("Password", "must contain a digit"), new ValidationFailure("Password", "must contain upper case letter"), new ValidationFailure("Password", "must contain lower case letter"), }; var actual = new ValidationException(failures).Errors; actual.Keys.Should().BeEquivalentTo(new string[] { "Password" }); actual["Password"].Should().BeEquivalentTo(new string[] { "must contain lower case letter", "must contain upper case letter", "must contain at least 8 characters", "must contain a digit", }); } }