mirror of
https://github.com/alex289/CleanArchitecture.git
synced 2025-06-29 18:21:08 +00:00
feat: Replace FluentAssertions with Shouldy (#86)
This commit is contained in:
commit
6c4eb2140e
2
.github/workflows/dotnet.yml
vendored
2
.github/workflows/dotnet.yml
vendored
@ -36,7 +36,7 @@ jobs:
|
||||
run: dotnet build --no-restore
|
||||
|
||||
- name: Test
|
||||
run: dotnet test --no-build --verbosity normal
|
||||
run: dotnet test --no-build --verbosity normal --logger "GitHubActions;summary.includePassedTests=true;summary.includeSkippedTests=true" -- RunConfiguration.CollectSourceInformation=true
|
||||
|
||||
cd:
|
||||
runs-on: ubuntu-latest
|
||||
|
@ -9,10 +9,14 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="FluentAssertions" Version="7.0.0" />
|
||||
<PackageReference Include="GitHubActionsTestLogger" Version="2.4.1">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.12.0" />
|
||||
<PackageReference Include="MockQueryable.NSubstitute" Version="7.0.3" />
|
||||
<PackageReference Include="NSubstitute" Version="5.3.0" />
|
||||
<PackageReference Include="Shouldly" Version="4.2.1" />
|
||||
<PackageReference Include="xunit" Version="2.9.2" />
|
||||
<PackageReference Include="xunit.runner.visualstudio" Version="3.0.0">
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
|
@ -3,7 +3,7 @@ using System.Threading.Tasks;
|
||||
using CleanArchitecture.Application.Queries.Tenants.GetAll;
|
||||
using CleanArchitecture.Application.Tests.Fixtures.Queries.Tenants;
|
||||
using CleanArchitecture.Application.ViewModels;
|
||||
using FluentAssertions;
|
||||
using Shouldly;
|
||||
using Xunit;
|
||||
|
||||
namespace CleanArchitecture.Application.Tests.Queries.Tenants;
|
||||
@ -29,11 +29,15 @@ public sealed class GetAllTenantsQueryHandlerTests
|
||||
|
||||
_fixture.VerifyNoDomainNotification();
|
||||
|
||||
result.PageSize.Should().Be(query.PageSize);
|
||||
result.Page.Should().Be(query.Page);
|
||||
result.Count.Should().Be(1);
|
||||
result.PageSize.ShouldBe(query.PageSize);
|
||||
result.Page.ShouldBe(query.Page);
|
||||
result.Count.ShouldBe(1);
|
||||
|
||||
tenant.Should().BeEquivalentTo(result.Items.First());
|
||||
var checkingTenant = result.Items.First();
|
||||
|
||||
tenant.Id.ShouldBe(checkingTenant.Id);
|
||||
tenant.Name.ShouldBe(checkingTenant.Name);
|
||||
tenant.Users.Count.ShouldBe(checkingTenant.Users.Count());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@ -51,10 +55,10 @@ public sealed class GetAllTenantsQueryHandlerTests
|
||||
new GetAllTenantsQuery(query, false),
|
||||
default);
|
||||
|
||||
result.PageSize.Should().Be(query.PageSize);
|
||||
result.Page.Should().Be(query.Page);
|
||||
result.Count.Should().Be(0);
|
||||
result.PageSize.ShouldBe(query.PageSize);
|
||||
result.Page.ShouldBe(query.Page);
|
||||
result.Count.ShouldBe(0);
|
||||
|
||||
result.Items.Should().HaveCount(0);
|
||||
result.Items.Count.ShouldBe(0);
|
||||
}
|
||||
}
|
@ -1,8 +1,9 @@
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using CleanArchitecture.Application.Queries.Tenants.GetTenantById;
|
||||
using CleanArchitecture.Application.Tests.Fixtures.Queries.Tenants;
|
||||
using CleanArchitecture.Domain.Errors;
|
||||
using FluentAssertions;
|
||||
using Shouldly;
|
||||
using Xunit;
|
||||
|
||||
namespace CleanArchitecture.Application.Tests.Queries.Tenants;
|
||||
@ -22,7 +23,9 @@ public sealed class GetTenantByIdQueryHandlerTests
|
||||
|
||||
_fixture.VerifyNoDomainNotification();
|
||||
|
||||
tenant.Should().BeEquivalentTo(result);
|
||||
tenant.Id.ShouldBe(result!.Id);
|
||||
tenant.Name.ShouldBe(result.Name);
|
||||
tenant.Users.Count.ShouldBe(result.Users.Count());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@ -38,6 +41,6 @@ public sealed class GetTenantByIdQueryHandlerTests
|
||||
nameof(GetTenantByIdQuery),
|
||||
ErrorCodes.ObjectNotFound,
|
||||
$"Tenant with id {tenant.Id} could not be found");
|
||||
result.Should().BeNull();
|
||||
result.ShouldBeNull();
|
||||
}
|
||||
}
|
@ -3,7 +3,7 @@ using System.Threading.Tasks;
|
||||
using CleanArchitecture.Application.Queries.Users.GetAll;
|
||||
using CleanArchitecture.Application.Tests.Fixtures.Queries.Users;
|
||||
using CleanArchitecture.Application.ViewModels;
|
||||
using FluentAssertions;
|
||||
using Shouldly;
|
||||
using Xunit;
|
||||
|
||||
namespace CleanArchitecture.Application.Tests.Queries.Users;
|
||||
@ -29,14 +29,14 @@ public sealed class GetAllUsersQueryHandlerTests
|
||||
|
||||
_fixture.VerifyNoDomainNotification();
|
||||
|
||||
result.PageSize.Should().Be(query.PageSize);
|
||||
result.Page.Should().Be(query.Page);
|
||||
result.Count.Should().Be(1);
|
||||
result.PageSize.ShouldBe(query.PageSize);
|
||||
result.Page.ShouldBe(query.Page);
|
||||
result.Count.ShouldBe(1);
|
||||
|
||||
var userViewModels = result.Items.ToArray();
|
||||
userViewModels.Should().NotBeNull();
|
||||
userViewModels.Should().ContainSingle();
|
||||
userViewModels.FirstOrDefault()!.Id.Should().Be(_fixture.ExistingUserId);
|
||||
userViewModels.ShouldNotBeNull();
|
||||
userViewModels.ShouldHaveSingleItem();
|
||||
userViewModels.FirstOrDefault()!.Id.ShouldBe(_fixture.ExistingUserId);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@ -56,10 +56,10 @@ public sealed class GetAllUsersQueryHandlerTests
|
||||
|
||||
_fixture.VerifyNoDomainNotification();
|
||||
|
||||
result.PageSize.Should().Be(query.PageSize);
|
||||
result.Page.Should().Be(query.Page);
|
||||
result.Count.Should().Be(0);
|
||||
result.PageSize.ShouldBe(query.PageSize);
|
||||
result.Page.ShouldBe(query.Page);
|
||||
result.Count.ShouldBe(0);
|
||||
|
||||
result.Items.Should().BeEmpty();
|
||||
result.Items.ShouldBeEmpty();
|
||||
}
|
||||
}
|
@ -3,7 +3,7 @@ using System.Threading.Tasks;
|
||||
using CleanArchitecture.Application.Queries.Users.GetUserById;
|
||||
using CleanArchitecture.Application.Tests.Fixtures.Queries.Users;
|
||||
using CleanArchitecture.Domain.Errors;
|
||||
using FluentAssertions;
|
||||
using Shouldly;
|
||||
using Xunit;
|
||||
|
||||
namespace CleanArchitecture.Application.Tests.Queries.Users;
|
||||
@ -23,8 +23,8 @@ public sealed class GetUserByIdQueryHandlerTests
|
||||
|
||||
_fixture.VerifyNoDomainNotification();
|
||||
|
||||
result.Should().NotBeNull();
|
||||
result!.Id.Should().Be(_fixture.ExistingUserId);
|
||||
result.ShouldNotBeNull();
|
||||
result!.Id.ShouldBe(_fixture.ExistingUserId);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@ -42,7 +42,7 @@ public sealed class GetUserByIdQueryHandlerTests
|
||||
ErrorCodes.ObjectNotFound,
|
||||
$"User with id {request.Id} could not be found");
|
||||
|
||||
result.Should().BeNull();
|
||||
result.ShouldBeNull();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@ -59,6 +59,6 @@ public sealed class GetUserByIdQueryHandlerTests
|
||||
ErrorCodes.ObjectNotFound,
|
||||
$"User with id {_fixture.ExistingUserId} could not be found");
|
||||
|
||||
result.Should().BeNull();
|
||||
result.ShouldBeNull();
|
||||
}
|
||||
}
|
@ -10,9 +10,13 @@
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="BCrypt.Net-Next" Version="4.0.3" />
|
||||
<PackageReference Include="FluentAssertions" Version="7.0.0" />
|
||||
<PackageReference Include="GitHubActionsTestLogger" Version="2.4.1">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.12.0" />
|
||||
<PackageReference Include="NSubstitute" Version="5.3.0" />
|
||||
<PackageReference Include="Shouldly" Version="4.2.1" />
|
||||
<PackageReference Include="xunit" Version="2.9.2" />
|
||||
<PackageReference Include="xunit.runner.visualstudio" Version="3.0.0">
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
|
@ -5,7 +5,7 @@ using System.Security.Claims;
|
||||
using System.Threading.Tasks;
|
||||
using CleanArchitecture.Domain.Commands.Users.LoginUser;
|
||||
using CleanArchitecture.Domain.Errors;
|
||||
using FluentAssertions;
|
||||
using Shouldly;
|
||||
using Xunit;
|
||||
|
||||
namespace CleanArchitecture.Domain.Tests.CommandHandler.User.LoginUser;
|
||||
@ -25,7 +25,7 @@ public sealed class LoginUserCommandHandlerTests
|
||||
|
||||
_fixture.VerifyNoDomainNotification();
|
||||
|
||||
token.Should().NotBeNullOrEmpty();
|
||||
token.ShouldNotBeNullOrEmpty();
|
||||
|
||||
var handler = new JwtSecurityTokenHandler();
|
||||
var decodedToken = handler.ReadToken(token) as JwtSecurityToken;
|
||||
@ -33,17 +33,17 @@ public sealed class LoginUserCommandHandlerTests
|
||||
var userIdClaim = decodedToken!.Claims
|
||||
.FirstOrDefault(x => string.Equals(x.Type, ClaimTypes.NameIdentifier));
|
||||
|
||||
Guid.Parse(userIdClaim!.Value).Should().Be(user.Id);
|
||||
Guid.Parse(userIdClaim!.Value).ShouldBe(user.Id);
|
||||
|
||||
var userEmailClaim = decodedToken.Claims
|
||||
.FirstOrDefault(x => string.Equals(x.Type, ClaimTypes.Email));
|
||||
|
||||
userEmailClaim!.Value.Should().Be(user.Email);
|
||||
userEmailClaim!.Value.ShouldBe(user.Email);
|
||||
|
||||
var userRoleClaim = decodedToken.Claims
|
||||
.FirstOrDefault(x => string.Equals(x.Type, ClaimTypes.Role));
|
||||
|
||||
userRoleClaim!.Value.Should().Be(user.Role.ToString());
|
||||
userRoleClaim!.Value.ShouldBe(user.Role.ToString());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@ -59,7 +59,7 @@ public sealed class LoginUserCommandHandlerTests
|
||||
ErrorCodes.ObjectNotFound,
|
||||
$"There is no user with email {command.Email}");
|
||||
|
||||
token.Should().BeEmpty();
|
||||
token.ShouldBeEmpty();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@ -77,6 +77,6 @@ public sealed class LoginUserCommandHandlerTests
|
||||
DomainErrorCodes.User.PasswordIncorrect,
|
||||
"The password is incorrect");
|
||||
|
||||
token.Should().BeEmpty();
|
||||
token.ShouldBeEmpty();
|
||||
}
|
||||
}
|
@ -1,8 +1,8 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using CleanArchitecture.Domain.Commands;
|
||||
using FluentAssertions;
|
||||
using FluentValidation;
|
||||
using Shouldly;
|
||||
|
||||
namespace CleanArchitecture.Domain.Tests;
|
||||
|
||||
@ -21,8 +21,8 @@ public class ValidationTestBase<TCommand, TValidation>
|
||||
{
|
||||
var result = _validation.Validate(command);
|
||||
|
||||
result.IsValid.Should().BeTrue();
|
||||
result.Errors.Should().BeEmpty();
|
||||
result.IsValid.ShouldBeTrue();
|
||||
result.Errors.ShouldBeEmpty();
|
||||
}
|
||||
|
||||
protected void ShouldHaveSingleError(
|
||||
@ -31,11 +31,11 @@ public class ValidationTestBase<TCommand, TValidation>
|
||||
{
|
||||
var result = _validation.Validate(command);
|
||||
|
||||
result.IsValid.Should().BeFalse();
|
||||
result.IsValid.ShouldBeFalse();
|
||||
|
||||
result.Errors.Count.Should().Be(1);
|
||||
result.Errors.Count.ShouldBe(1);
|
||||
|
||||
result.Errors.First().ErrorCode.Should().Be(expectedCode);
|
||||
result.Errors.First().ErrorCode.ShouldBe(expectedCode);
|
||||
}
|
||||
|
||||
protected void ShouldHaveSingleError(
|
||||
@ -45,12 +45,12 @@ public class ValidationTestBase<TCommand, TValidation>
|
||||
{
|
||||
var result = _validation.Validate(command);
|
||||
|
||||
result.IsValid.Should().BeFalse();
|
||||
result.IsValid.ShouldBeFalse();
|
||||
|
||||
result.Errors.Count.Should().Be(1);
|
||||
result.Errors.Count.ShouldBe(1);
|
||||
|
||||
result.Errors.First().ErrorCode.Should().Be(expectedCode);
|
||||
result.Errors.First().ErrorMessage.Should().Be(expectedMessage);
|
||||
result.Errors.First().ErrorCode.ShouldBe(expectedCode);
|
||||
result.Errors.First().ErrorMessage.ShouldBe(expectedMessage);
|
||||
}
|
||||
|
||||
protected void ShouldHaveExpectedErrors(
|
||||
@ -59,15 +59,14 @@ public class ValidationTestBase<TCommand, TValidation>
|
||||
{
|
||||
var result = _validation.Validate(command);
|
||||
|
||||
result.IsValid.Should().BeFalse();
|
||||
result.Errors.Count.Should().Be(expectedErrors.Length);
|
||||
result.IsValid.ShouldBeFalse();
|
||||
result.Errors.Count.ShouldBe(expectedErrors.Length);
|
||||
|
||||
foreach (var error in expectedErrors)
|
||||
{
|
||||
result.Errors
|
||||
.Count(validation => validation.ErrorCode == error.Key && validation.ErrorMessage == error.Value)
|
||||
.Should()
|
||||
.Be(1);
|
||||
.ShouldBe(1);
|
||||
}
|
||||
}
|
||||
|
||||
@ -77,15 +76,14 @@ public class ValidationTestBase<TCommand, TValidation>
|
||||
{
|
||||
var result = _validation.Validate(command);
|
||||
|
||||
result.IsValid.Should().BeFalse();
|
||||
result.Errors.Count.Should().Be(expectedErrors.Length);
|
||||
result.IsValid.ShouldBeFalse();
|
||||
result.Errors.Count.ShouldBe(expectedErrors.Length);
|
||||
|
||||
foreach (var error in expectedErrors)
|
||||
{
|
||||
result.Errors
|
||||
.Count(validation => validation.ErrorCode == error)
|
||||
.Should()
|
||||
.Be(1);
|
||||
.ShouldBe(1);
|
||||
}
|
||||
}
|
||||
}
|
@ -9,9 +9,13 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="FluentAssertions" Version="7.0.0" />
|
||||
<PackageReference Include="GitHubActionsTestLogger" Version="2.4.1">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.12.0" />
|
||||
<PackageReference Include="NSubstitute" Version="5.3.0" />
|
||||
<PackageReference Include="Shouldly" Version="4.2.1" />
|
||||
<PackageReference Include="xunit" Version="2.9.2" />
|
||||
<PackageReference Include="xunit.runner.visualstudio" Version="3.0.0">
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
|
@ -1,5 +1,5 @@
|
||||
using CleanArchitecture.Domain.Notifications;
|
||||
using FluentAssertions;
|
||||
using Shouldly;
|
||||
using Xunit;
|
||||
|
||||
namespace CleanArchitecture.Infrastructure.Tests;
|
||||
@ -10,7 +10,7 @@ public sealed class DomainNotificationHandlerTests
|
||||
public void Should_Create_DomainNotificationHandler_Instance()
|
||||
{
|
||||
var domainNotificationHandler = new DomainNotificationHandler();
|
||||
domainNotificationHandler.GetNotifications().Should().BeEmpty();
|
||||
domainNotificationHandler.GetNotifications().ShouldBeEmpty();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@ -23,7 +23,7 @@ public sealed class DomainNotificationHandlerTests
|
||||
var domainNotification = new DomainNotification(key, value, code);
|
||||
var domainNotificationHandler = new DomainNotificationHandler();
|
||||
domainNotificationHandler.Handle(domainNotification);
|
||||
domainNotificationHandler.GetNotifications().Should().HaveCount(1);
|
||||
domainNotificationHandler.GetNotifications().Count.ShouldBe(1);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@ -36,7 +36,7 @@ public sealed class DomainNotificationHandlerTests
|
||||
var domainNotification = new DomainNotification(key, value, code);
|
||||
var domainNotificationHandler = new DomainNotificationHandler();
|
||||
domainNotificationHandler.Handle(domainNotification);
|
||||
domainNotificationHandler.GetNotifications().Should().HaveCount(1);
|
||||
domainNotificationHandler.GetNotifications().Count.ShouldBe(1);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@ -50,7 +50,7 @@ public sealed class DomainNotificationHandlerTests
|
||||
var domainNotificationHandler = new DomainNotificationHandler();
|
||||
domainNotificationHandler.Handle(domainNotification);
|
||||
|
||||
domainNotificationHandler.HasNotifications().Should().BeTrue();
|
||||
domainNotificationHandler.HasNotifications().ShouldBeTrue();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@ -58,6 +58,6 @@ public sealed class DomainNotificationHandlerTests
|
||||
{
|
||||
var domainNotificationHandler = new DomainNotificationHandler();
|
||||
|
||||
domainNotificationHandler.HasNotifications().Should().BeFalse();
|
||||
domainNotificationHandler.HasNotifications().ShouldBeFalse();
|
||||
}
|
||||
}
|
@ -1,41 +0,0 @@
|
||||
using System;
|
||||
using CleanArchitecture.Domain.Notifications;
|
||||
using FluentAssertions;
|
||||
using Xunit;
|
||||
|
||||
namespace CleanArchitecture.Infrastructure.Tests;
|
||||
|
||||
public sealed class DomainNotificationTests
|
||||
{
|
||||
[Fact]
|
||||
public void Should_Create_DomainNotification_Instance()
|
||||
{
|
||||
const string key = "Key";
|
||||
const string value = "Value";
|
||||
const string code = "Code";
|
||||
|
||||
var domainNotification = new DomainNotification(
|
||||
key, value, code);
|
||||
|
||||
domainNotification.Key.Should().Be(key);
|
||||
domainNotification.Value.Should().Be(value);
|
||||
domainNotification.Should().NotBe(default(Guid));
|
||||
domainNotification.Code.Should().Be(code);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Should_Create_DomainNotification_Overload_Instance()
|
||||
{
|
||||
const string key = "Key";
|
||||
const string value = "Value";
|
||||
const string code = "Code";
|
||||
|
||||
var domainNotification = new DomainNotification(
|
||||
key, value, code);
|
||||
|
||||
domainNotification.Key.Should().Be(key);
|
||||
domainNotification.Value.Should().Be(value);
|
||||
domainNotification.Code.Should().Be(code);
|
||||
domainNotification.Should().NotBe(default(Guid));
|
||||
}
|
||||
}
|
@ -3,10 +3,10 @@ using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using CleanArchitecture.Infrastructure.Database;
|
||||
using CleanArchitecture.Infrastructure.Tests.Fixtures;
|
||||
using FluentAssertions;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using NSubstitute;
|
||||
using Shouldly;
|
||||
using Xunit;
|
||||
|
||||
namespace CleanArchitecture.Infrastructure.Tests;
|
||||
@ -26,7 +26,7 @@ public sealed class UnitOfWorkTests
|
||||
|
||||
var result = await unitOfWork.CommitAsync();
|
||||
|
||||
result.Should().BeTrue();
|
||||
result.ShouldBeTrue();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@ -44,7 +44,7 @@ public sealed class UnitOfWorkTests
|
||||
|
||||
var result = await unitOfWork.CommitAsync();
|
||||
|
||||
result.Should().BeFalse();
|
||||
result.ShouldBeFalse();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@ -59,9 +59,9 @@ public sealed class UnitOfWorkTests
|
||||
.Do(_ => throw new Exception("Boom"));
|
||||
|
||||
var unitOfWork = UnitOfWorkTestFixture.GetUnitOfWork(dbContextMock, loggerMock);
|
||||
|
||||
|
||||
Func<Task> throwsAction = async () => await unitOfWork.CommitAsync();
|
||||
|
||||
await throwsAction.Should().ThrowAsync<Exception>();
|
||||
await throwsAction.ShouldThrowAsync<Exception>();
|
||||
}
|
||||
}
|
@ -9,7 +9,10 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="FluentAssertions" Version="7.0.0" />
|
||||
<PackageReference Include="GitHubActionsTestLogger" Version="2.4.1">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="9.0.0" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Proxies" Version="9.0.0" />
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.12.0" />
|
||||
@ -20,6 +23,7 @@
|
||||
</PackageReference>
|
||||
<PackageReference Include="NUnit3TestAdapter" Version="4.6.0" />
|
||||
<PackageReference Include="Respawn" Version="6.2.1" />
|
||||
<PackageReference Include="Shouldly" Version="4.2.1" />
|
||||
<PackageReference Include="Testcontainers" Version="4.1.0" />
|
||||
<PackageReference Include="Testcontainers.MsSql" Version="4.1.0" />
|
||||
<PackageReference Include="Testcontainers.RabbitMq" Version="4.1.0" />
|
||||
|
@ -6,7 +6,7 @@ using CleanArchitecture.Application.ViewModels;
|
||||
using CleanArchitecture.Application.ViewModels.Tenants;
|
||||
using CleanArchitecture.IntegrationTests.Extensions;
|
||||
using CleanArchitecture.IntegrationTests.Fixtures;
|
||||
using FluentAssertions;
|
||||
using Shouldly;
|
||||
|
||||
namespace CleanArchitecture.IntegrationTests.Controller;
|
||||
|
||||
@ -22,16 +22,16 @@ public sealed class TenantControllerTests
|
||||
{
|
||||
var response = await _fixture.ServerClient.GetAsync($"/api/v1/Tenant/{_fixture.CreatedTenantId}");
|
||||
|
||||
response.StatusCode.Should().Be(HttpStatusCode.OK);
|
||||
response.StatusCode.ShouldBe(HttpStatusCode.OK);
|
||||
|
||||
var message = await response.Content.ReadAsJsonAsync<TenantViewModel>();
|
||||
|
||||
message?.Data.Should().NotBeNull();
|
||||
message?.Data.ShouldNotBeNull();
|
||||
|
||||
message!.Data!.Id.Should().Be(_fixture.CreatedTenantId);
|
||||
message.Data.Name.Should().Be("Test Tenant");
|
||||
message!.Data!.Id.ShouldBe(_fixture.CreatedTenantId);
|
||||
message.Data.Name.ShouldBe("Test Tenant");
|
||||
|
||||
message.Data.Users.Count().Should().Be(1);
|
||||
message.Data.Users.Count().ShouldBe(1);
|
||||
}
|
||||
|
||||
[Test, Order(1)]
|
||||
@ -40,19 +40,19 @@ public sealed class TenantControllerTests
|
||||
var response = await _fixture.ServerClient.GetAsync(
|
||||
"api/v1/Tenant?searchTerm=Test&pageSize=5&page=1");
|
||||
|
||||
response.StatusCode.Should().Be(HttpStatusCode.OK);
|
||||
response.StatusCode.ShouldBe(HttpStatusCode.OK);
|
||||
|
||||
var message = await response.Content.ReadAsJsonAsync<PagedResult<TenantViewModel>>();
|
||||
|
||||
message?.Data!.Items.Should().NotBeEmpty();
|
||||
message!.Data!.Items.Should().HaveCount(1);
|
||||
message?.Data!.Items.ShouldNotBeEmpty();
|
||||
message!.Data!.Items.ShouldHaveSingleItem();
|
||||
message.Data!.Items
|
||||
.FirstOrDefault(x => x.Id == _fixture.CreatedTenantId)
|
||||
.Should().NotBeNull();
|
||||
.ShouldNotBeNull();
|
||||
|
||||
message.Data.Items
|
||||
.FirstOrDefault(x => x.Id == _fixture.CreatedTenantId)!
|
||||
.Users.Count().Should().Be(1);
|
||||
.Users.Count().ShouldBe(1);
|
||||
}
|
||||
|
||||
[Test, Order(2)]
|
||||
@ -60,11 +60,11 @@ public sealed class TenantControllerTests
|
||||
{
|
||||
var response = await _fixture.ServerClient.GetAsync($"/api/v1/Tenant/{_fixture.DeletedTenantId}");
|
||||
|
||||
response.StatusCode.Should().Be(HttpStatusCode.NotFound);
|
||||
response.StatusCode.ShouldBe(HttpStatusCode.NotFound);
|
||||
|
||||
var message = await response.Content.ReadAsJsonAsync<TenantViewModel>();
|
||||
|
||||
message?.Data.Should().BeNull();
|
||||
message?.Data.ShouldBeNull();
|
||||
}
|
||||
|
||||
[Test, Order(3)]
|
||||
@ -73,15 +73,15 @@ public sealed class TenantControllerTests
|
||||
var response = await _fixture.ServerClient.GetAsync(
|
||||
"api/v1/Tenant?searchTerm=Test&pageSize=5&page=1&includeDeleted=true");
|
||||
|
||||
response.StatusCode.Should().Be(HttpStatusCode.OK);
|
||||
response.StatusCode.ShouldBe(HttpStatusCode.OK);
|
||||
|
||||
var message = await response.Content.ReadAsJsonAsync<PagedResult<TenantViewModel>>();
|
||||
|
||||
message?.Data!.Items.Should().NotBeEmpty();
|
||||
message!.Data!.Items.Should().HaveCount(2);
|
||||
message?.Data!.Items.ShouldNotBeEmpty();
|
||||
message!.Data!.Items.Count.ShouldBe(2);
|
||||
message.Data!.Items
|
||||
.FirstOrDefault(x => x.Id == _fixture.DeletedTenantId)
|
||||
.Should().NotBeNull();
|
||||
.ShouldNotBeNull();
|
||||
}
|
||||
|
||||
[Test, Order(4)]
|
||||
@ -91,7 +91,7 @@ public sealed class TenantControllerTests
|
||||
|
||||
var response = await _fixture.ServerClient.PostAsJsonAsync("/api/v1/Tenant", request);
|
||||
|
||||
response.StatusCode.Should().Be(HttpStatusCode.OK);
|
||||
response.StatusCode.ShouldBe(HttpStatusCode.OK);
|
||||
|
||||
var message = await response.Content.ReadAsJsonAsync<Guid>();
|
||||
var tenantId = message?.Data;
|
||||
@ -99,14 +99,14 @@ public sealed class TenantControllerTests
|
||||
// Check if tenant exists
|
||||
var tenantResponse = await _fixture.ServerClient.GetAsync($"/api/v1/Tenant/{tenantId}");
|
||||
|
||||
tenantResponse.StatusCode.Should().Be(HttpStatusCode.OK);
|
||||
tenantResponse.StatusCode.ShouldBe(HttpStatusCode.OK);
|
||||
|
||||
var tenantMessage = await tenantResponse.Content.ReadAsJsonAsync<TenantViewModel>();
|
||||
|
||||
tenantMessage?.Data.Should().NotBeNull();
|
||||
tenantMessage?.Data.ShouldNotBeNull();
|
||||
|
||||
tenantMessage!.Data!.Id.Should().Be(tenantId!.Value);
|
||||
tenantMessage.Data.Name.Should().Be(request.Name);
|
||||
tenantMessage!.Data!.Id.ShouldBe(tenantId!.Value);
|
||||
tenantMessage.Data.Name.ShouldBe(request.Name);
|
||||
}
|
||||
|
||||
[Test, Order(5)]
|
||||
@ -116,24 +116,24 @@ public sealed class TenantControllerTests
|
||||
|
||||
var response = await _fixture.ServerClient.PutAsJsonAsync("/api/v1/Tenant", request);
|
||||
|
||||
response.StatusCode.Should().Be(HttpStatusCode.OK);
|
||||
response.StatusCode.ShouldBe(HttpStatusCode.OK);
|
||||
|
||||
var message = await response.Content.ReadAsJsonAsync<UpdateTenantViewModel>();
|
||||
|
||||
message?.Data.Should().NotBeNull();
|
||||
message!.Data.Should().BeEquivalentTo(request);
|
||||
message?.Data.ShouldNotBeNull();
|
||||
message!.Data.ShouldBeEquivalentTo(request);
|
||||
|
||||
// Check if tenant is updated
|
||||
var tenantResponse = await _fixture.ServerClient.GetAsync($"/api/v1/Tenant/{_fixture.CreatedTenantId}");
|
||||
|
||||
tenantResponse.StatusCode.Should().Be(HttpStatusCode.OK);
|
||||
tenantResponse.StatusCode.ShouldBe(HttpStatusCode.OK);
|
||||
|
||||
var tenantMessage = await response.Content.ReadAsJsonAsync<TenantViewModel>();
|
||||
|
||||
tenantMessage?.Data.Should().NotBeNull();
|
||||
tenantMessage?.Data.ShouldNotBeNull();
|
||||
|
||||
tenantMessage!.Data!.Id.Should().Be(_fixture.CreatedTenantId);
|
||||
tenantMessage.Data.Name.Should().Be(request.Name);
|
||||
tenantMessage!.Data!.Id.ShouldBe(_fixture.CreatedTenantId);
|
||||
tenantMessage.Data.Name.ShouldBe(request.Name);
|
||||
}
|
||||
|
||||
[Test, Order(6)]
|
||||
@ -141,11 +141,11 @@ public sealed class TenantControllerTests
|
||||
{
|
||||
var response = await _fixture.ServerClient.DeleteAsync($"/api/v1/Tenant/{_fixture.CreatedTenantId}");
|
||||
|
||||
response.StatusCode.Should().Be(HttpStatusCode.OK);
|
||||
response.StatusCode.ShouldBe(HttpStatusCode.OK);
|
||||
|
||||
// Check if tenant is deleted
|
||||
var tenantResponse = await _fixture.ServerClient.GetAsync($"/api/v1/Tenant/{_fixture.CreatedTenantId}");
|
||||
|
||||
tenantResponse.StatusCode.Should().Be(HttpStatusCode.NotFound);
|
||||
tenantResponse.StatusCode.ShouldBe(HttpStatusCode.NotFound);
|
||||
}
|
||||
}
|
@ -9,7 +9,7 @@ using CleanArchitecture.Domain.Enums;
|
||||
using CleanArchitecture.IntegrationTests.Extensions;
|
||||
using CleanArchitecture.IntegrationTests.Fixtures;
|
||||
using CleanArchitecture.IntegrationTests.Infrastructure.Auth;
|
||||
using FluentAssertions;
|
||||
using Shouldly;
|
||||
|
||||
namespace CleanArchitecture.IntegrationTests.Controller;
|
||||
|
||||
@ -25,22 +25,22 @@ public sealed class UserControllerTests
|
||||
{
|
||||
var response = await _fixture.ServerClient.GetAsync("/api/v1/user");
|
||||
|
||||
response.StatusCode.Should().Be(HttpStatusCode.OK);
|
||||
response.StatusCode.ShouldBe(HttpStatusCode.OK);
|
||||
|
||||
var message = await response.Content.ReadAsJsonAsync<PagedResult<UserViewModel>>();
|
||||
|
||||
message?.Data.Should().NotBeNull();
|
||||
message?.Data.ShouldNotBeNull();
|
||||
|
||||
var content = message!.Data!.Items.ToList();
|
||||
|
||||
content.Count.Should().Be(2);
|
||||
content.Count.ShouldBe(2);
|
||||
|
||||
var currentUser = content.First(x => x.Id == TestAuthenticationOptions.TestUserId);
|
||||
|
||||
currentUser.Role.Should().Be(UserRole.Admin);
|
||||
currentUser.Email.Should().Be(TestAuthenticationOptions.Email);
|
||||
currentUser.FirstName.Should().Be(TestAuthenticationOptions.FirstName);
|
||||
currentUser.LastName.Should().Be(TestAuthenticationOptions.LastName);
|
||||
currentUser.Role.ShouldBe(UserRole.Admin);
|
||||
currentUser.Email.ShouldBe(TestAuthenticationOptions.Email);
|
||||
currentUser.FirstName.ShouldBe(TestAuthenticationOptions.FirstName);
|
||||
currentUser.LastName.ShouldBe(TestAuthenticationOptions.LastName);
|
||||
}
|
||||
|
||||
[Test, Order(1)]
|
||||
@ -48,18 +48,18 @@ public sealed class UserControllerTests
|
||||
{
|
||||
var response = await _fixture.ServerClient.GetAsync("/api/v1/user/" + TestAuthenticationOptions.TestUserId);
|
||||
|
||||
response.StatusCode.Should().Be(HttpStatusCode.OK);
|
||||
response.StatusCode.ShouldBe(HttpStatusCode.OK);
|
||||
|
||||
var message = await response.Content.ReadAsJsonAsync<UserViewModel>();
|
||||
|
||||
message?.Data.Should().NotBeNull();
|
||||
message?.Data.ShouldNotBeNull();
|
||||
|
||||
var content = message!.Data!;
|
||||
|
||||
content.Id.Should().Be(TestAuthenticationOptions.TestUserId);
|
||||
content.Email.Should().Be(TestAuthenticationOptions.Email);
|
||||
content.FirstName.Should().Be(TestAuthenticationOptions.FirstName);
|
||||
content.LastName.Should().Be(TestAuthenticationOptions.LastName);
|
||||
content.Id.ShouldBe(TestAuthenticationOptions.TestUserId);
|
||||
content.Email.ShouldBe(TestAuthenticationOptions.Email);
|
||||
content.FirstName.ShouldBe(TestAuthenticationOptions.FirstName);
|
||||
content.LastName.ShouldBe(TestAuthenticationOptions.LastName);
|
||||
}
|
||||
|
||||
[Test, Order(2)]
|
||||
@ -67,17 +67,17 @@ public sealed class UserControllerTests
|
||||
{
|
||||
var response = await _fixture.ServerClient.GetAsync("/api/v1/user?includeDeleted=true");
|
||||
|
||||
response.StatusCode.Should().Be(HttpStatusCode.OK);
|
||||
response.StatusCode.ShouldBe(HttpStatusCode.OK);
|
||||
|
||||
var message = await response.Content.ReadAsJsonAsync<PagedResult<UserViewModel>>();
|
||||
|
||||
message?.Data.Should().NotBeNull();
|
||||
message?.Data.ShouldNotBeNull();
|
||||
|
||||
var content = message!.Data!.Items.ToList();
|
||||
|
||||
content.Count.Should().Be(3);
|
||||
content.Count.ShouldBe(3);
|
||||
|
||||
content.FirstOrDefault(x => x.Id == _fixture.DeletedUserId).Should().NotBeNull();
|
||||
content.FirstOrDefault(x => x.Id == _fixture.DeletedUserId).ShouldNotBeNull();
|
||||
}
|
||||
|
||||
[Test, Order(3)]
|
||||
@ -85,10 +85,10 @@ public sealed class UserControllerTests
|
||||
{
|
||||
var response = await _fixture.ServerClient.GetAsync("/api/v1/user/" + _fixture.DeletedUserId);
|
||||
|
||||
response.StatusCode.Should().Be(HttpStatusCode.NotFound);
|
||||
response.StatusCode.ShouldBe(HttpStatusCode.NotFound);
|
||||
|
||||
var message = await response.Content.ReadAsJsonAsync<UserViewModel>();
|
||||
message?.Data.Should().BeNull();
|
||||
message?.Data.ShouldBeNull();
|
||||
}
|
||||
|
||||
[Test, Order(4)]
|
||||
@ -103,10 +103,10 @@ public sealed class UserControllerTests
|
||||
|
||||
var response = await _fixture.ServerClient.PostAsJsonAsync("/api/v1/user", user);
|
||||
|
||||
response.StatusCode.Should().Be(HttpStatusCode.OK);
|
||||
response.StatusCode.ShouldBe(HttpStatusCode.OK);
|
||||
|
||||
var message = await response.Content.ReadAsJsonAsync<Guid>();
|
||||
message?.Data.Should().NotBeEmpty();
|
||||
message?.Data.ShouldNotBe(Guid.Empty);
|
||||
}
|
||||
|
||||
[Test, Order(5)]
|
||||
@ -118,10 +118,10 @@ public sealed class UserControllerTests
|
||||
|
||||
var response = await _fixture.ServerClient.PostAsJsonAsync("/api/v1/user/login", user);
|
||||
|
||||
response.StatusCode.Should().Be(HttpStatusCode.OK);
|
||||
response.StatusCode.ShouldBe(HttpStatusCode.OK);
|
||||
|
||||
var message = await response.Content.ReadAsJsonAsync<string>();
|
||||
message?.Data.Should().NotBeEmpty();
|
||||
message?.Data.ShouldNotBeEmpty();
|
||||
}
|
||||
|
||||
[Test, Order(6)]
|
||||
@ -129,18 +129,18 @@ public sealed class UserControllerTests
|
||||
{
|
||||
var response = await _fixture.ServerClient.GetAsync("/api/v1/user/me");
|
||||
|
||||
response.StatusCode.Should().Be(HttpStatusCode.OK);
|
||||
response.StatusCode.ShouldBe(HttpStatusCode.OK);
|
||||
|
||||
var message = await response.Content.ReadAsJsonAsync<UserViewModel>();
|
||||
|
||||
message?.Data.Should().NotBeNull();
|
||||
message?.Data.ShouldNotBeNull();
|
||||
|
||||
var content = message!.Data!;
|
||||
|
||||
content.Id.Should().Be(TestAuthenticationOptions.TestUserId);
|
||||
content.Email.Should().Be(TestAuthenticationOptions.Email);
|
||||
content.FirstName.Should().Be(TestAuthenticationOptions.FirstName);
|
||||
content.LastName.Should().Be(TestAuthenticationOptions.LastName);
|
||||
content.Id.ShouldBe(TestAuthenticationOptions.TestUserId);
|
||||
content.Email.ShouldBe(TestAuthenticationOptions.Email);
|
||||
content.FirstName.ShouldBe(TestAuthenticationOptions.FirstName);
|
||||
content.LastName.ShouldBe(TestAuthenticationOptions.LastName);
|
||||
}
|
||||
|
||||
[Test, Order(7)]
|
||||
@ -156,32 +156,32 @@ public sealed class UserControllerTests
|
||||
|
||||
var response = await _fixture.ServerClient.PutAsJsonAsync("/api/v1/user", user);
|
||||
|
||||
response.StatusCode.Should().Be(HttpStatusCode.OK);
|
||||
response.StatusCode.ShouldBe(HttpStatusCode.OK);
|
||||
|
||||
var message = await response.Content.ReadAsJsonAsync<UpdateUserViewModel>();
|
||||
|
||||
message?.Data.Should().NotBeNull();
|
||||
message?.Data.ShouldNotBeNull();
|
||||
|
||||
var content = message!.Data;
|
||||
|
||||
content.Should().BeEquivalentTo(user);
|
||||
content.ShouldBeEquivalentTo(user);
|
||||
|
||||
// Check if user is really updated
|
||||
var userResponse = await _fixture.ServerClient.GetAsync("/api/v1/user/" + user.Id);
|
||||
|
||||
userResponse.StatusCode.Should().Be(HttpStatusCode.OK);
|
||||
userResponse.StatusCode.ShouldBe(HttpStatusCode.OK);
|
||||
|
||||
var userMessage = await userResponse.Content.ReadAsJsonAsync<UserViewModel>();
|
||||
|
||||
userMessage?.Data.Should().NotBeNull();
|
||||
userMessage?.Data.ShouldNotBeNull();
|
||||
|
||||
var userContent = userMessage!.Data!;
|
||||
|
||||
userContent.Id.Should().Be(user.Id);
|
||||
userContent.Email.Should().Be(user.Email);
|
||||
userContent.FirstName.Should().Be(user.FirstName);
|
||||
userContent.LastName.Should().Be(user.LastName);
|
||||
userContent.Role.Should().Be(user.Role);
|
||||
userContent.Id.ShouldBe(user.Id);
|
||||
userContent.Email.ShouldBe(user.Email);
|
||||
userContent.FirstName.ShouldBe(user.FirstName);
|
||||
userContent.LastName.ShouldBe(user.LastName);
|
||||
userContent.Role.ShouldBe(user.Role);
|
||||
}
|
||||
|
||||
[Test, Order(8)]
|
||||
@ -193,15 +193,15 @@ public sealed class UserControllerTests
|
||||
|
||||
var response = await _fixture.ServerClient.PostAsJsonAsync("/api/v1/user/changePassword", user);
|
||||
|
||||
response.StatusCode.Should().Be(HttpStatusCode.OK);
|
||||
response.StatusCode.ShouldBe(HttpStatusCode.OK);
|
||||
|
||||
var message = await response.Content.ReadAsJsonAsync<ChangePasswordViewModel>();
|
||||
|
||||
message?.Data.Should().NotBeNull();
|
||||
message?.Data.ShouldNotBeNull();
|
||||
|
||||
var content = message!.Data;
|
||||
|
||||
content.Should().BeEquivalentTo(user);
|
||||
content.ShouldBeEquivalentTo(user);
|
||||
|
||||
// Verify the user can login with the new password
|
||||
var login = new LoginUserViewModel(
|
||||
@ -210,11 +210,11 @@ public sealed class UserControllerTests
|
||||
|
||||
var loginResponse = await _fixture.ServerClient.PostAsJsonAsync("/api/v1/user/login", login);
|
||||
|
||||
loginResponse.StatusCode.Should().Be(HttpStatusCode.OK);
|
||||
loginResponse.StatusCode.ShouldBe(HttpStatusCode.OK);
|
||||
|
||||
var loginMessage = await loginResponse.Content.ReadAsJsonAsync<string>();
|
||||
|
||||
loginMessage?.Data.Should().NotBeEmpty();
|
||||
loginMessage?.Data.ShouldNotBeEmpty();
|
||||
}
|
||||
|
||||
[Test, Order(9)]
|
||||
@ -222,17 +222,17 @@ public sealed class UserControllerTests
|
||||
{
|
||||
var response = await _fixture.ServerClient.DeleteAsync("/api/v1/user/" + TestAuthenticationOptions.TestUserId);
|
||||
|
||||
response.StatusCode.Should().Be(HttpStatusCode.OK);
|
||||
response.StatusCode.ShouldBe(HttpStatusCode.OK);
|
||||
|
||||
var message = await response.Content.ReadAsJsonAsync<Guid>();
|
||||
|
||||
message?.Data.Should().NotBeEmpty();
|
||||
message?.Data.ShouldNotBe(Guid.Empty);
|
||||
|
||||
var content = message!.Data;
|
||||
content.Should().Be(TestAuthenticationOptions.TestUserId);
|
||||
content.ShouldBe(TestAuthenticationOptions.TestUserId);
|
||||
|
||||
var userResponse = await _fixture.ServerClient.GetAsync("/api/v1/user/" + TestAuthenticationOptions.TestUserId);
|
||||
|
||||
userResponse.StatusCode.Should().Be(HttpStatusCode.NotFound);
|
||||
userResponse.StatusCode.ShouldBe(HttpStatusCode.NotFound);
|
||||
}
|
||||
}
|
@ -3,9 +3,9 @@ using CleanArchitecture.Application.ViewModels.Tenants;
|
||||
using CleanArchitecture.Domain;
|
||||
using CleanArchitecture.Domain.Entities;
|
||||
using CleanArchitecture.IntegrationTests.Extensions;
|
||||
using FluentAssertions;
|
||||
using Microsoft.Extensions.Caching.Distributed;
|
||||
using Newtonsoft.Json;
|
||||
using Shouldly;
|
||||
|
||||
namespace CleanArchitecture.IntegrationTests.ExternalServices;
|
||||
|
||||
@ -21,14 +21,14 @@ public sealed class RedisTests
|
||||
{
|
||||
var response = await _fixture.ServerClient.GetAsync($"/api/v1/Tenant/{_fixture.CreatedTenantId}");
|
||||
var message = await response.Content.ReadAsJsonAsync<TenantViewModel>();
|
||||
message!.Data!.Id.Should().Be(_fixture.CreatedTenantId);
|
||||
message!.Data!.Id.ShouldBe(_fixture.CreatedTenantId);
|
||||
|
||||
var json = await _fixture.DistributedCache.GetStringAsync(CacheKeyGenerator.GetEntityCacheKey<Tenant>(_fixture.CreatedTenantId));
|
||||
json.Should().NotBeNullOrEmpty();
|
||||
json.ShouldNotBeNullOrEmpty();
|
||||
|
||||
var tenant = JsonConvert.DeserializeObject<TenantViewModel>(json!)!;
|
||||
|
||||
tenant.Should().NotBeNull();
|
||||
tenant.Id.Should().Be(_fixture.CreatedTenantId);
|
||||
tenant.ShouldNotBeNull();
|
||||
tenant.Id.ShouldBe(_fixture.CreatedTenantId);
|
||||
}
|
||||
}
|
@ -1,7 +1,7 @@
|
||||
using System.Net;
|
||||
using System.Threading.Tasks;
|
||||
using CleanArchitecture.IntegrationTests.Fixtures;
|
||||
using FluentAssertions;
|
||||
using Shouldly;
|
||||
|
||||
namespace CleanArchitecture.IntegrationTests.UtilityTests;
|
||||
|
||||
@ -21,6 +21,6 @@ public sealed class AuthTests
|
||||
public async Task Should_Get_Unauthorized_If_Trying_To_Call_Endpoint_Without_Token(string url)
|
||||
{
|
||||
var response = await _fixture.ServerClient.GetAsync(url);
|
||||
response.StatusCode.Should().Be(HttpStatusCode.Unauthorized);
|
||||
response.StatusCode.ShouldBe(HttpStatusCode.Unauthorized);
|
||||
}
|
||||
}
|
@ -1,9 +1,9 @@
|
||||
using System.Net;
|
||||
using System.Threading.Tasks;
|
||||
using CleanArchitecture.IntegrationTests.Fixtures;
|
||||
using FluentAssertions;
|
||||
using Microsoft.Extensions.Diagnostics.HealthChecks;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using Shouldly;
|
||||
|
||||
namespace CleanArchitecture.IntegrationTests.UtilityTests;
|
||||
|
||||
@ -18,11 +18,11 @@ public sealed class HealthChecksTests
|
||||
public async Task Should_Return_Healthy()
|
||||
{
|
||||
var response = await _fixture.ServerClient.GetAsync("/healthz");
|
||||
response.StatusCode.Should().Be(HttpStatusCode.OK);
|
||||
response.StatusCode.ShouldBe(HttpStatusCode.OK);
|
||||
|
||||
var content = await response.Content.ReadAsStringAsync();
|
||||
|
||||
var json = JObject.Parse(content);
|
||||
json["status"]!.Value<string>().Should().Be(HealthStatus.Healthy.ToString());
|
||||
json["status"]!.Value<string>().ShouldBe(HealthStatus.Healthy.ToString());
|
||||
}
|
||||
}
|
@ -3,7 +3,7 @@ using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using CleanArchitecture.IntegrationTests.Fixtures.gRPC;
|
||||
using CleanArchitecture.Proto.Tenants;
|
||||
using FluentAssertions;
|
||||
using Shouldly;
|
||||
|
||||
namespace CleanArchitecture.IntegrationTests.gRPC;
|
||||
|
||||
@ -24,13 +24,13 @@ public sealed class GetTenantsByIdsTests
|
||||
|
||||
var response = await client.GetByIdsAsync(request);
|
||||
|
||||
response.Tenants.Should().HaveCount(1);
|
||||
response.Tenants.ShouldHaveSingleItem();
|
||||
|
||||
var tenant = response.Tenants.First();
|
||||
var createdTenant = _fixture.CreateTenant();
|
||||
|
||||
new Guid(tenant.Id).Should().Be(createdTenant.Id);
|
||||
tenant.Name.Should().Be(createdTenant.Name);
|
||||
tenant.DeletedAt.Should().NotBeNullOrWhiteSpace();
|
||||
new Guid(tenant.Id).ShouldBe(createdTenant.Id);
|
||||
tenant.Name.ShouldBe(createdTenant.Name);
|
||||
tenant.DeletedAt.ShouldNotBeNullOrWhiteSpace();
|
||||
}
|
||||
}
|
@ -2,7 +2,7 @@ using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using CleanArchitecture.IntegrationTests.Fixtures.gRPC;
|
||||
using CleanArchitecture.Proto.Users;
|
||||
using FluentAssertions;
|
||||
using Shouldly;
|
||||
|
||||
namespace CleanArchitecture.IntegrationTests.gRPC;
|
||||
|
||||
@ -23,14 +23,14 @@ public sealed class GetUsersByIdsTests
|
||||
|
||||
var response = await client.GetByIdsAsync(request);
|
||||
|
||||
response.Users.Should().HaveCount(1);
|
||||
response.Users.ShouldHaveSingleItem();
|
||||
|
||||
var user = response.Users.First();
|
||||
var createdUser = _fixture.CreateUser();
|
||||
|
||||
user.Email.Should().Be(createdUser.Email);
|
||||
user.FirstName.Should().Be(createdUser.FirstName);
|
||||
user.LastName.Should().Be(createdUser.LastName);
|
||||
user.DeletedAt.Should().NotBeNullOrWhiteSpace();
|
||||
user.Email.ShouldBe(createdUser.Email);
|
||||
user.FirstName.ShouldBe(createdUser.FirstName);
|
||||
user.LastName.ShouldBe(createdUser.LastName);
|
||||
user.DeletedAt.ShouldNotBeNullOrWhiteSpace();
|
||||
}
|
||||
}
|
@ -8,10 +8,14 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="FluentAssertions" Version="7.0.0" />
|
||||
<PackageReference Include="GitHubActionsTestLogger" Version="2.4.1">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.12.0" />
|
||||
<PackageReference Include="MockQueryable.NSubstitute" Version="7.0.3" />
|
||||
<PackageReference Include="NSubstitute" Version="5.3.0" />
|
||||
<PackageReference Include="Shouldly" Version="4.2.1" />
|
||||
<PackageReference Include="xunit" Version="2.9.2" />
|
||||
<PackageReference Include="xunit.runner.visualstudio" Version="3.0.0">
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
|
@ -4,7 +4,7 @@ using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using CleanArchitecture.gRPC.Tests.Fixtures;
|
||||
using CleanArchitecture.Proto.Tenants;
|
||||
using FluentAssertions;
|
||||
using Shouldly;
|
||||
using Xunit;
|
||||
|
||||
namespace CleanArchitecture.gRPC.Tests.Tenants;
|
||||
@ -25,7 +25,7 @@ public sealed class GetTenantsByIdsTests : IClassFixture<TenantTestFixture>
|
||||
SetupRequest(Enumerable.Empty<Guid>()),
|
||||
default!);
|
||||
|
||||
result.Tenants.Should().HaveCount(0);
|
||||
result.Tenants.Count.ShouldBe(0);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@ -44,19 +44,19 @@ public sealed class GetTenantsByIdsTests : IClassFixture<TenantTestFixture>
|
||||
SetupRequest(ids),
|
||||
default!);
|
||||
|
||||
result.Tenants.Should().HaveCount(2);
|
||||
result.Tenants.Count.ShouldBe(2);
|
||||
|
||||
foreach (var tenant in result.Tenants)
|
||||
{
|
||||
var tenantId = Guid.Parse(tenant.Id);
|
||||
|
||||
tenantId.Should().NotBe(nonExistingId);
|
||||
tenantId.ShouldNotBe(nonExistingId);
|
||||
|
||||
var mockTenant = _fixture.ExistingTenants.First(t => t.Id == tenantId);
|
||||
|
||||
mockTenant.Should().NotBeNull();
|
||||
mockTenant.ShouldNotBeNull();
|
||||
|
||||
tenant.Name.Should().Be(mockTenant.Name);
|
||||
tenant.Name.ShouldBe(mockTenant.Name);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -4,7 +4,7 @@ using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using CleanArchitecture.gRPC.Tests.Fixtures;
|
||||
using CleanArchitecture.Proto.Users;
|
||||
using FluentAssertions;
|
||||
using Shouldly;
|
||||
using Xunit;
|
||||
|
||||
namespace CleanArchitecture.gRPC.Tests.Users;
|
||||
@ -25,7 +25,7 @@ public sealed class GetUsersByIdsTests : IClassFixture<UserTestFixture>
|
||||
SetupRequest(Enumerable.Empty<Guid>()),
|
||||
default!);
|
||||
|
||||
result.Users.Should().HaveCount(0);
|
||||
result.Users.Count.ShouldBe(0);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@ -44,21 +44,21 @@ public sealed class GetUsersByIdsTests : IClassFixture<UserTestFixture>
|
||||
SetupRequest(ids),
|
||||
default!);
|
||||
|
||||
result.Users.Should().HaveCount(2);
|
||||
result.Users.Count.ShouldBe(2);
|
||||
|
||||
foreach (var user in result.Users)
|
||||
{
|
||||
var userId = Guid.Parse(user.Id);
|
||||
|
||||
userId.Should().NotBe(nonExistingId);
|
||||
userId.ShouldNotBe(nonExistingId);
|
||||
|
||||
var mockUser = _fixture.ExistingUsers.First(u => u.Id == userId);
|
||||
|
||||
mockUser.Should().NotBeNull();
|
||||
mockUser.ShouldNotBeNull();
|
||||
|
||||
user.Email.Should().Be(mockUser.Email);
|
||||
user.FirstName.Should().Be(mockUser.FirstName);
|
||||
user.LastName.Should().Be(mockUser.LastName);
|
||||
user.Email.ShouldBe(mockUser.Email);
|
||||
user.FirstName.ShouldBe(mockUser.FirstName);
|
||||
user.LastName.ShouldBe(mockUser.LastName);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user