Skip to content

Commit bc8f17e

Browse files
committed
feat: update unit tests to use Shouldly assertions
1 parent f42cded commit bc8f17e

11 files changed

Lines changed: 27 additions & 41 deletions

File tree

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
1+
global using System;
12
global using Bogus;
3+
global using Shouldly;
24
global using Xunit;

Chapter-4-applying-tactical-domain-driven-design/Fitnet.Contracts/Src/Fitnet.Contracts.Api.UnitTests/SignContract/Signatures/SignatureTests.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
namespace EvolutionaryArchitecture.Fitnet.Contracts.Api.UnitTests.SignContract.Signatures;
22
using EvolutionaryArchitecture.Fitnet.Contracts.Core.SignContract.Signatures;
33
using Core.SignContract.Signatures.Exceptions;
4-
using Shouldly;
5-
using System;
64

75
public sealed class SignatureTests
86
{
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,25 @@
11
namespace EvolutionaryArchitecture.Fitnet.Contracts.Core.UnitTests.Common.Assertions.ErrorOr;
22

3-
using FluentAssertions;
4-
using FluentAssertions.Execution;
5-
using FluentAssertions.Primitives;
3+
using System.Linq;
64

7-
internal sealed class ErrorOrSuccessAssertions(ErrorOr<Success> subject)
8-
: ReferenceTypeAssertions<ErrorOr<Success>, ErrorOrSuccessAssertions>(subject)
5+
public static class ErrorOrSuccessAssertions
96
{
10-
11-
protected override string Identifier => "ErrorOr<Success>";
12-
13-
public AndConstraint<ErrorOr<Success>> BeSuccessful(string because = "", params object[] becauseArgs)
7+
public static void ShouldBeSuccessful(this ErrorOr<Success> errorOr, string? message = null)
148
{
15-
Execute.Assertion
16-
.ForCondition(!Subject.IsError)
17-
.BecauseOf(because, becauseArgs)
18-
.FailWith("Expected {context:ErrorOr<Success>} to be successful{reason}, but found {0}.", string.Join(", ", Subject.Errors.Select(x => x.Description)));
19-
20-
return new AndConstraint<ErrorOr<Success>>(Subject);
9+
if (errorOr.IsError)
10+
{
11+
var errorMessage = string.Join(", ", errorOr.Errors.Select(x => x.Description));
12+
throw new ShouldAssertException(message ?? $"ErrorOr<Success> should be successful but found errors: {errorMessage}");
13+
}
2114
}
2215

23-
public AndConstraint<ErrorOr<Success>> ContainError(Error error, string because = "", params object[] becauseArgs)
16+
public static void ShouldContainError(this ErrorOr<Success> errorOr, Error error, string? message = null)
2417
{
25-
Execute.Assertion
26-
.ForCondition(Subject.IsError && Subject.Errors.Contains(error))
27-
.BecauseOf(because, becauseArgs)
28-
.FailWith("Expected to contain error '{0}' but found errors: {1}", string.Join(", ", Subject.Errors.Select(x => x.Description)), error.Description);
29-
30-
return new AndConstraint<ErrorOr<Success>>(Subject);
18+
errorOr.IsError.ShouldBeTrue("ErrorOr<Success> should be in error state");
19+
if (!errorOr.Errors.Contains(error))
20+
{
21+
var actualErrors = string.Join(", ", errorOr.Errors.Select(x => x.Description));
22+
throw new ShouldAssertException(message ?? $"Expected to contain error '{error.Description}' but found errors: {actualErrors}");
23+
}
3124
}
3225
}

Chapter-4-applying-tactical-domain-driven-design/Fitnet.Contracts/Src/Fitnet.Contracts.Core.UnitTests/Common/Assertions/ErrorOr/ErrorOrExtensions.cs

Lines changed: 0 additions & 6 deletions
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
global using ErrorOr;
22
global using EvolutionaryArchitecture.Fitnet.Common.UnitTesting.Assertions.ErrorOr;
3+
global using Shouldly;
34
global using Xunit;

Chapter-4-applying-tactical-domain-driven-design/Fitnet.Contracts/Src/Fitnet.Contracts.Core.UnitTests/PrepareContract/BusinessRules/ContractCanBePreparedOnlyForAdultRuleTests.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
namespace EvolutionaryArchitecture.Fitnet.Contracts.Core.UnitTests.PrepareContract.BusinessRules;
22

3+
using Common.Assertions.ErrorOr;
34
using Core.PrepareContract.BusinessRules;
45
using Fitnet.Common.Core.BussinessRules;
56

@@ -16,7 +17,7 @@ internal void Given_customer_age_which_is_less_than_18_Then_validation_should_ha
1617
// Assert
1718
var expectedError = BusinessRuleError.Create(nameof(ContractCanBePreparedOnlyForAdultRule),
1819
"Contract can not be prepared for a person who is not adult");
19-
result.Should().ContainError(expectedError);
20+
result.ShouldContainError(expectedError);
2021
}
2122

2223
[Fact]
@@ -28,7 +29,7 @@ internal void Given_customer_age_which_is_equal_to_18_Then_validation_should_pas
2829
var result = BusinessRuleValidator.Validate(new ContractCanBePreparedOnlyForAdultRule(18));
2930

3031
// Assert
31-
result.Should().BeSuccessful();
32+
result.ShouldBeSuccessful();
3233
}
3334

3435
[Fact]
@@ -40,6 +41,6 @@ internal void Given_customer_age_which_is_greater_than_18_Then_validation_should
4041
var result = BusinessRuleValidator.Validate(new ContractCanBePreparedOnlyForAdultRule(19));
4142

4243
// Assert
43-
result.Should().BeSuccessful();
44+
result.ShouldBeSuccessful();
4445
}
4546
}

Chapter-4-applying-tactical-domain-driven-design/Fitnet.Contracts/Src/Fitnet.Contracts.Core.UnitTests/PrepareContract/BusinessRules/CustomerMustBeSmallerThanMaximumHeightLimitRuleTests.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,12 @@ namespace EvolutionaryArchitecture.Fitnet.Contracts.Core.UnitTests.PrepareContra
22

33
using Core.PrepareContract.BusinessRules;
44
using Fitnet.Common.Core.BussinessRules;
5+
using Common.Assertions.ErrorOr;
56

67
public sealed class CustomerMustBeSmallerThanMaximumHeightLimitRuleTests
78
{
89
[Fact]
9-
internal void Given_customer_heigth_which_is_greater_than_maximum_height_limit_Then_validation_should_have_error()
10+
internal void Given_customer_height_which_is_greater_than_maximum_height_limit_Then_validation_should_have_error()
1011
{
1112
// Arrange
1213
const int height = 211;
@@ -16,7 +17,7 @@ internal void Given_customer_heigth_which_is_greater_than_maximum_height_limit_T
1617

1718
// Assert
1819
var expectedError = BusinessRuleError.Create(nameof(CustomerMustBeSmallerThanMaximumHeightLimitRule), "Customer height must fit maximum limit for gym instruments");
19-
result.Should().ContainError(expectedError);
20+
result.ShouldContainError(expectedError);
2021
}
2122

2223
[Fact]
@@ -29,7 +30,7 @@ internal void Given_customer_height_which_is_equal_to_maximum_height_limit_Then_
2930
var result = BusinessRuleValidator.Validate(new CustomerMustBeSmallerThanMaximumHeightLimitRule(height));
3031

3132
// Assert
32-
result.Should().BeSuccessful();
33+
result.ShouldBeSuccessful();
3334
}
3435

3536
[Fact]
@@ -42,6 +43,6 @@ internal void Given_customer_height_which_is_less_than_maximum_height_limit_Then
4243
var result = BusinessRuleValidator.Validate(new CustomerMustBeSmallerThanMaximumHeightLimitRule(height));
4344

4445
// Assert
45-
result.Should().BeSuccessful();
46+
result.ShouldBeSuccessful();
4647
}
4748
}

Chapter-4-applying-tactical-domain-driven-design/Fitnet.Contracts/Src/Fitnet.Contracts.Core.UnitTests/PrepareContract/PrepareContractTests.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
using Common;
44
using Core.PrepareContract;
5-
using Shouldly;
65

76
public sealed class PrepareContractTests
87
{

Chapter-4-applying-tactical-domain-driven-design/Fitnet.Contracts/Src/Fitnet.Contracts.Core.UnitTests/SignContract/SignContractTests.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ namespace EvolutionaryArchitecture.Fitnet.Contracts.Core.UnitTests.SignContract;
44
using Common.Builders;
55
using Core.SignContract;
66
using Core.SignContract.Signatures;
7-
using Shouldly;
87

98
public sealed class SignContractTests
109
{

Chapter-4-applying-tactical-domain-driven-design/Fitnet.Contracts/Src/Fitnet.Contracts.Core.UnitTests/TerminateBindingContract/BusinessRules/TerminationIsPossibleOnlyAfterThreeMonthsHavePassedTests.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
using Core.TerminateBindingContract.BusinessRules;
44
using Fitnet.Common.Core.BussinessRules;
55
using TerminationIsPossibleOnlyAfterThreeMonthsHavePassed.TestData;
6-
using Shouldly;
76

87
public sealed class TerminationIsPossibleOnlyAfterThreeMonthsHavePassedTests
98
{

0 commit comments

Comments
 (0)