mirror of
https://github.com/alex289/CleanArchitecture.git
synced 2025-06-30 10:33:43 +00:00
Add query handler tests
This commit is contained in:
parent
7b31d2dd1b
commit
305e6320f0
1
.gitignore
vendored
1
.gitignore
vendored
@ -5,3 +5,4 @@ riderModule.iml
|
|||||||
/_ReSharper.Caches/
|
/_ReSharper.Caches/
|
||||||
.idea
|
.idea
|
||||||
.vs
|
.vs
|
||||||
|
CleanArchitecture.sln.DotSettings.user
|
||||||
|
@ -9,7 +9,9 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<PackageReference Include="FluentAssertions" Version="6.10.0" />
|
||||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.3.2" />
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.3.2" />
|
||||||
|
<PackageReference Include="MockQueryable.Moq" Version="7.0.0" />
|
||||||
<PackageReference Include="Moq" Version="4.18.4" />
|
<PackageReference Include="Moq" Version="4.18.4" />
|
||||||
<PackageReference Include="xunit" Version="2.4.2" />
|
<PackageReference Include="xunit" Version="2.4.2" />
|
||||||
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.5">
|
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.5">
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
using CleanArchitecture.Application.Queries.Users.GetAll;
|
using CleanArchitecture.Application.Queries.Users.GetAll;
|
||||||
|
using CleanArchitecture.Domain.Entities;
|
||||||
using CleanArchitecture.Domain.Interfaces.Repositories;
|
using CleanArchitecture.Domain.Interfaces.Repositories;
|
||||||
|
using MockQueryable.Moq;
|
||||||
using Moq;
|
using Moq;
|
||||||
|
|
||||||
namespace CleanArchitecture.Application.Tests.Fixtures.Queries.Users;
|
namespace CleanArchitecture.Application.Tests.Fixtures.Queries.Users;
|
||||||
@ -8,11 +10,30 @@ public sealed class GetAllUsersTestFixture : QueryHandlerBaseFixture
|
|||||||
{
|
{
|
||||||
public Mock<IUserRepository> UserRepository { get; }
|
public Mock<IUserRepository> UserRepository { get; }
|
||||||
public GetAllUsersQueryHandler Handler { get; }
|
public GetAllUsersQueryHandler Handler { get; }
|
||||||
|
public Guid ExistingUserId { get; } = Guid.NewGuid();
|
||||||
|
|
||||||
public GetAllUsersTestFixture()
|
public GetAllUsersTestFixture()
|
||||||
{
|
{
|
||||||
UserRepository = new();
|
UserRepository = new();
|
||||||
|
|
||||||
|
SetupUserRepositoryGetAllAsync();
|
||||||
|
|
||||||
Handler = new(UserRepository.Object);
|
Handler = new(UserRepository.Object);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void SetupUserRepositoryGetAllAsync()
|
||||||
|
{
|
||||||
|
var user = new Mock<User>(() =>
|
||||||
|
new User(
|
||||||
|
ExistingUserId,
|
||||||
|
"max@mustermann.com",
|
||||||
|
"Max",
|
||||||
|
"Mustermann"));
|
||||||
|
|
||||||
|
var query = new[] { user.Object }.AsQueryable().BuildMock();
|
||||||
|
|
||||||
|
UserRepository
|
||||||
|
.Setup(x => x.GetAllNoTracking())
|
||||||
|
.Returns(query);
|
||||||
|
}
|
||||||
}
|
}
|
@ -1,7 +1,7 @@
|
|||||||
using CleanArchitecture.Application.Queries.Users.GetAll;
|
|
||||||
using CleanArchitecture.Application.Queries.Users.GetUserById;
|
using CleanArchitecture.Application.Queries.Users.GetUserById;
|
||||||
using CleanArchitecture.Domain.Interfaces;
|
using CleanArchitecture.Domain.Entities;
|
||||||
using CleanArchitecture.Domain.Interfaces.Repositories;
|
using CleanArchitecture.Domain.Interfaces.Repositories;
|
||||||
|
using MockQueryable.Moq;
|
||||||
using Moq;
|
using Moq;
|
||||||
|
|
||||||
namespace CleanArchitecture.Application.Tests.Fixtures.Queries.Users;
|
namespace CleanArchitecture.Application.Tests.Fixtures.Queries.Users;
|
||||||
@ -10,11 +10,30 @@ public sealed class GetUserByIdTestFixture : QueryHandlerBaseFixture
|
|||||||
{
|
{
|
||||||
public Mock<IUserRepository> UserRepository { get; }
|
public Mock<IUserRepository> UserRepository { get; }
|
||||||
public GetUserByIdQueryHandler Handler { get; }
|
public GetUserByIdQueryHandler Handler { get; }
|
||||||
|
public Guid ExistingUserId { get; } = Guid.NewGuid();
|
||||||
|
|
||||||
public GetUserByIdTestFixture()
|
public GetUserByIdTestFixture()
|
||||||
{
|
{
|
||||||
UserRepository = new();
|
UserRepository = new();
|
||||||
|
|
||||||
|
SetupUserRepositoryGetAllAsync();
|
||||||
|
|
||||||
Handler = new(UserRepository.Object, Bus.Object);
|
Handler = new(UserRepository.Object, Bus.Object);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void SetupUserRepositoryGetAllAsync()
|
||||||
|
{
|
||||||
|
var user = new Mock<User>(() =>
|
||||||
|
new User(
|
||||||
|
ExistingUserId,
|
||||||
|
"max@mustermann.com",
|
||||||
|
"Max",
|
||||||
|
"Mustermann"));
|
||||||
|
|
||||||
|
var query = new[] { user.Object }.AsQueryable().BuildMock();
|
||||||
|
|
||||||
|
UserRepository
|
||||||
|
.Setup(x => x.GetAllNoTracking())
|
||||||
|
.Returns(query);
|
||||||
|
}
|
||||||
}
|
}
|
@ -1,6 +1,24 @@
|
|||||||
|
using CleanArchitecture.Application.Tests.Fixtures.Queries.Users;
|
||||||
|
using FluentAssertions;
|
||||||
|
using Xunit;
|
||||||
|
|
||||||
namespace CleanArchitecture.Application.Tests.Queries.Users;
|
namespace CleanArchitecture.Application.Tests.Queries.Users;
|
||||||
|
|
||||||
public sealed class GetAllUsersQueryHandlerTests
|
public sealed class GetAllUsersQueryHandlerTests
|
||||||
{
|
{
|
||||||
|
private readonly GetAllUsersTestFixture _fixture = new();
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task Should_Get_All_Users()
|
||||||
|
{
|
||||||
|
var result = await _fixture.Handler.Handle(
|
||||||
|
new(),
|
||||||
|
default);
|
||||||
|
|
||||||
|
_fixture.VerifyNoDomainNotification();
|
||||||
|
|
||||||
|
result.Should().NotBeNull();
|
||||||
|
result.Should().ContainSingle();
|
||||||
|
result.FirstOrDefault().Id.Should().Be(_fixture.ExistingUserId);
|
||||||
|
}
|
||||||
}
|
}
|
@ -1,6 +1,41 @@
|
|||||||
|
using CleanArchitecture.Application.Queries.Users.GetUserById;
|
||||||
|
using CleanArchitecture.Application.Tests.Fixtures.Queries.Users;
|
||||||
|
using CleanArchitecture.Domain.Errors;
|
||||||
|
using FluentAssertions;
|
||||||
|
using Xunit;
|
||||||
|
|
||||||
namespace CleanArchitecture.Application.Tests.Queries.Users;
|
namespace CleanArchitecture.Application.Tests.Queries.Users;
|
||||||
|
|
||||||
public sealed class GetUserByIdQueryHandlerTests
|
public sealed class GetUserByIdQueryHandlerTests
|
||||||
{
|
{
|
||||||
|
private readonly GetUserByIdTestFixture _fixture = new();
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task Should_Get_Existing_User()
|
||||||
|
{
|
||||||
|
var result = await _fixture.Handler.Handle(
|
||||||
|
new(_fixture.ExistingUserId),
|
||||||
|
default);
|
||||||
|
|
||||||
|
_fixture.VerifyNoDomainNotification();
|
||||||
|
|
||||||
|
result.Should().NotBeNull();
|
||||||
|
result!.Id.Should().Be(_fixture.ExistingUserId);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task Should_Raise_Notification_For_No_User()
|
||||||
|
{
|
||||||
|
var request = new GetUserByIdQuery(Guid.NewGuid());
|
||||||
|
var result = await _fixture.Handler.Handle(
|
||||||
|
request,
|
||||||
|
default);
|
||||||
|
|
||||||
|
_fixture.VerifyExistingNotification(
|
||||||
|
nameof(GetUserByIdQuery),
|
||||||
|
ErrorCodes.ObjectNotFound,
|
||||||
|
$"User with id {request.UserId} could not be found");
|
||||||
|
|
||||||
|
result.Should().BeNull();
|
||||||
|
}
|
||||||
}
|
}
|
@ -26,8 +26,7 @@ public sealed class GetUserByIdQueryHandler :
|
|||||||
{
|
{
|
||||||
var user = _userRepository
|
var user = _userRepository
|
||||||
.GetAllNoTracking()
|
.GetAllNoTracking()
|
||||||
.Where(x => x.Id == request.UserId)
|
.FirstOrDefault(x => x.Id == request.UserId);
|
||||||
.FirstOrDefault();
|
|
||||||
|
|
||||||
if (user == null)
|
if (user == null)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user