Files
social-media/tests/Application.UnitTests/Common/Exceptions/ValidationExceptionTests.cs
2024-03-09 20:25:30 -05:00

64 lines
2.1 KiB
C#

using Hutopy.Application.Common.Exceptions;
using FluentAssertions;
using FluentValidation.Results;
using NUnit.Framework;
namespace Hutopy.Application.UnitTests.Common.Exceptions;
public class ValidationExceptionTests
{
[Test]
public void DefaultConstructorCreatesAnEmptyErrorDictionary()
{
var actual = new ValidationException().Errors;
actual.Keys.Should().BeEquivalentTo(Array.Empty<string>());
}
[Test]
public void SingleValidationFailureCreatesASingleElementErrorDictionary()
{
var failures = new List<ValidationFailure>
{
new ValidationFailure("Age", "must be over 18"),
};
var actual = new ValidationException(failures).Errors;
actual.Keys.Should().BeEquivalentTo(new string[] { "Age" });
actual["Age"].Should().BeEquivalentTo(new string[] { "must be over 18" });
}
[Test]
public void MulitpleValidationFailureForMultiplePropertiesCreatesAMultipleElementErrorDictionaryEachWithMultipleValues()
{
var failures = new List<ValidationFailure>
{
new ValidationFailure("Age", "must be 18 or older"),
new ValidationFailure("Age", "must be 25 or younger"),
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", "Age" });
actual["Age"].Should().BeEquivalentTo(new string[]
{
"must be 25 or younger",
"must be 18 or older",
});
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",
});
}
}