You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
1.7 KiB
56 lines
1.7 KiB
using Bit.Core.AdminConsole.Utilities.Errors; |
|
using Bit.Core.AdminConsole.Utilities.Validation; |
|
using Xunit; |
|
|
|
namespace Bit.Core.Test.AdminConsole.Shared; |
|
|
|
public class IValidatorTests |
|
{ |
|
public class TestClass |
|
{ |
|
public string Name { get; set; } = string.Empty; |
|
} |
|
|
|
public record InvalidRequestError<T>(T ErroredValue) : Error<T>(Code, ErroredValue) |
|
{ |
|
public const string Code = "InvalidRequest"; |
|
} |
|
|
|
public class TestClassValidator : IValidator<TestClass> |
|
{ |
|
public Task<ValidationResult<TestClass>> ValidateAsync(TestClass value) |
|
{ |
|
if (string.IsNullOrWhiteSpace(value.Name)) |
|
{ |
|
return Task.FromResult<ValidationResult<TestClass>>( |
|
new Invalid<TestClass>(new InvalidRequestError<TestClass>(value))); |
|
} |
|
|
|
return Task.FromResult<ValidationResult<TestClass>>(new Valid<TestClass>(value)); |
|
} |
|
} |
|
|
|
[Fact] |
|
public async Task ValidateAsync_WhenSomethingIsInvalid_ReturnsInvalidWithError() |
|
{ |
|
var example = new TestClass(); |
|
|
|
var result = await new TestClassValidator().ValidateAsync(example); |
|
|
|
Assert.IsType<Invalid<TestClass>>(result); |
|
var invalidResult = result as Invalid<TestClass>; |
|
Assert.Equal(InvalidRequestError<TestClass>.Code, invalidResult!.Error.Message); |
|
} |
|
|
|
[Fact] |
|
public async Task ValidateAsync_WhenIsValid_ReturnsValid() |
|
{ |
|
var example = new TestClass { Name = "Valid" }; |
|
|
|
var result = await new TestClassValidator().ValidateAsync(example); |
|
|
|
Assert.IsType<Valid<TestClass>>(result); |
|
var validResult = result as Valid<TestClass>; |
|
Assert.Equal(example.Name, validResult.Value.Name); |
|
} |
|
}
|
|
|