Skip to content

Commit 7ef6c27

Browse files
committed
feat: add validations for contracts
1 parent d7a803a commit 7ef6c27

3 files changed

Lines changed: 81 additions & 0 deletions

File tree

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
<ItemGroup>
3+
<PackageReference Include="Bogus" Version="34.0.2" />
4+
<PackageReference Include="FluentAssertions" Version="6.10.0" />
5+
<PackageReference Include="xunit" Version="2.4.2" />
6+
<PackageReference Include="xunit.analyzers" Version="1.1.0" />
7+
<PackageReference Include="xunit.categories" Version="2.0.6" />
8+
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.5">
9+
<PrivateAssets>all</PrivateAssets>
10+
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
11+
</PackageReference>
12+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.4.1" />
13+
<PackageReference Include="coverlet.collector" Version="3.2.0">
14+
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
15+
<PrivateAssets>all</PrivateAssets>
16+
</PackageReference>
17+
</ItemGroup>
18+
19+
<ItemGroup>
20+
<InternalsVisibleTo Include="EvolutionaryArchitecture.Fitnet.Contracts.Api.UnitTests" />
21+
</ItemGroup>
22+
</Project>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
namespace EvolutionaryArchitecture.Fitnet.Contracts.Api.UnitTests.RequestValidator;
2+
3+
using System.Collections;
4+
using Bogus;
5+
6+
internal sealed class InvalidPrepareContractRequestTestCases : IEnumerable<object[]>
7+
{
8+
private readonly Faker _faker = new();
9+
private readonly DateTimeOffset _fakeNow = new Faker().Date.RecentOffset();
10+
11+
public IEnumerator<object[]> GetEnumerator()
12+
{
13+
var validContractParameters = PrepareContractParameters.GetValid();
14+
15+
yield return new object[] { new PrepareContractRequest(Guid.Empty, validContractParameters.MinAge, validContractParameters.MaxHeight, _fakeNow), nameof(PrepareContractRequest.CustomerId) };
16+
yield return new object[] { new PrepareContractRequest(Guid.NewGuid(), default, validContractParameters.MaxHeight, _fakeNow), nameof(PrepareContractRequest.CustomerAge) };
17+
yield return new object[] { new PrepareContractRequest(Guid.NewGuid(), _faker.Random.Number(-100, -1), validContractParameters.MaxHeight, _fakeNow), nameof(PrepareContractRequest.CustomerAge) };
18+
yield return new object[] { new PrepareContractRequest(Guid.NewGuid(), validContractParameters.MinAge, default, _fakeNow), nameof(PrepareContractRequest.CustomerHeight) };
19+
yield return new object[] { new PrepareContractRequest(Guid.NewGuid(), validContractParameters.MinAge, _faker.Random.Number(-100, -1), _fakeNow), nameof(PrepareContractRequest.CustomerHeight) };
20+
yield return new object[] { new PrepareContractRequest(Guid.NewGuid(), validContractParameters.MinAge, validContractParameters.MaxHeight, default), nameof(PrepareContractRequest.PreparedAt) };
21+
yield return new object[] { new PrepareContractRequest(Guid.NewGuid(), validContractParameters.MinAge, validContractParameters.MaxHeight, default), nameof(PrepareContractRequest.PreparedAt) };
22+
}
23+
24+
IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
25+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
namespace EvolutionaryArchitecture.Fitnet.Contracts.Api.UnitTests.RequestValidator;
2+
3+
using Bogus;
4+
5+
public sealed class PrepareContractRequestValidatorTests
6+
{
7+
private readonly PrepareContractRequestValidator _validator = new();
8+
private readonly DateTimeOffset _fakeNow = new Faker().Date.RecentOffset();
9+
10+
[Fact]
11+
internal void Given_prepare_contract_request_validation_When_request_is_valid_Then_result_should_have_no_errors()
12+
{
13+
// Arrange
14+
var validContractParameters = PrepareContractParameters.GetValid();
15+
var request = new PrepareContractRequest(Guid.NewGuid(), validContractParameters.MinAge, validContractParameters.MaxHeight, _fakeNow);
16+
17+
// Act
18+
var result = _validator.TestValidate(request);
19+
20+
// Assert
21+
result.ShouldNotHaveAnyValidationErrors();
22+
}
23+
24+
[Theory]
25+
[ClassData(typeof(InvalidPrepareContractRequestTestCases))]
26+
internal void Given_prepare_contract_request_validation_When_property_is_valid_Then_result_should_have_error(PrepareContractRequest request, string expectedInvalidPropertyName)
27+
{
28+
// Act
29+
var result = _validator.TestValidate(request);
30+
31+
// Assert
32+
result.ShouldHaveValidationErrorFor(expectedInvalidPropertyName);
33+
}
34+
}

0 commit comments

Comments
 (0)