From 2c9139e7fc4303e2876a5c7c086e81313e13a071 Mon Sep 17 00:00:00 2001 From: Evandro Costa Date: Tue, 31 Mar 2026 23:14:56 -0300 Subject: [PATCH 01/10] feat(test-utils): add TestDataBuilder with shared entity factories and seeders --- .../UnauthorizedExceptionHandler.cs | 32 ----- .../Builders/TestDataBuilder.cs | 126 ++++++++++++++++++ 2 files changed, 126 insertions(+), 32 deletions(-) delete mode 100644 src/Voltiq.API/ExceptionHandlers/UnauthorizedExceptionHandler.cs create mode 100644 tests/Voltiq.CommonTestUtilities/Builders/TestDataBuilder.cs diff --git a/src/Voltiq.API/ExceptionHandlers/UnauthorizedExceptionHandler.cs b/src/Voltiq.API/ExceptionHandlers/UnauthorizedExceptionHandler.cs deleted file mode 100644 index 40dc39c..0000000 --- a/src/Voltiq.API/ExceptionHandlers/UnauthorizedExceptionHandler.cs +++ /dev/null @@ -1,32 +0,0 @@ -using Microsoft.AspNetCore.Diagnostics; -using Voltiq.Exceptions.Resources; - -// TODO: Remove this handler -namespace Voltiq.API.ExceptionHandlers; - -internal sealed class UnauthorizedExceptionHandler(IHostEnvironment env) : IExceptionHandler -{ - public async ValueTask TryHandleAsync( - HttpContext httpContext, - Exception exception, - CancellationToken cancellationToken) - { - if (exception is not UnauthorizedAccessException) - return false; - - var response = new - { - title = ResourceErrorMessages.TITULO_NAO_AUTORIZADO, - status = StatusCodes.Status401Unauthorized, - instance = httpContext.Request.Path.Value, - traceId = env.IsDevelopment() ? httpContext.TraceIdentifier : null, - }; - - httpContext.Response.StatusCode = StatusCodes.Status401Unauthorized; - httpContext.Response.ContentType = "application/problem+json"; - - await httpContext.Response.WriteAsJsonAsync(response, cancellationToken); - - return true; - } -} diff --git a/tests/Voltiq.CommonTestUtilities/Builders/TestDataBuilder.cs b/tests/Voltiq.CommonTestUtilities/Builders/TestDataBuilder.cs new file mode 100644 index 0000000..ac4f8ba --- /dev/null +++ b/tests/Voltiq.CommonTestUtilities/Builders/TestDataBuilder.cs @@ -0,0 +1,126 @@ +using Voltiq.Domain.Entities; +using Voltiq.Domain.Enums; +using Voltiq.Domain.Interfaces; +using Voltiq.Domain.Interfaces.Repositories.Client; +using Voltiq.Domain.Interfaces.Repositories.Budget; +using Voltiq.Domain.Interfaces.Repositories.Material; +using Voltiq.Domain.Interfaces.Repositories.RefreshToken; +using Voltiq.Domain.Interfaces.Repositories.User; +using Voltiq.Domain.ValueObjects; + +namespace Voltiq.CommonTestUtilities.Builders; + +public static class TestDataBuilder +{ + // ── In-memory factories ──────────────────────────────────────────────── + + public static User MakeUser( + string name = "João Silva", + string email = "joao@example.com", + string document = "529.982.247-25", + string passwordHash = "$argon2id$hash") + { + var emailVo = Email.Create(email).Value; + var documentVo = Document.Create(document).Value; + return User.Register(name, emailVo, documentVo, passwordHash); + } + + public static Client MakeClient( + Guid userId, + string name = "Cliente Teste", + string email = "cliente@example.com", + string phone = "(11) 99999-9999") + { + var emailVo = Email.Create(email).Value; + return Client.Register(userId, name, phone, emailVo, + Address.Create("Rua das Flores", "123", "São Paulo", "SP", "01310-100")); + } + + public static Material MakeMaterial( + Guid userId, + string name = "Cabo 10mm", + decimal defaultPrice = 15.50m, + MaterialUnit unit = MaterialUnit.Metro) + => Material.Register(userId, name, defaultPrice, unit); + + public static Budget MakeBudget(Guid userId, Guid clientId) + => Budget.Register(userId, clientId); + + public static RefreshToken MakeRefreshToken( + string token, + Guid userId, + int daysToExpire = 7) + => RefreshToken.Create(token, userId, daysToExpire); + + // ── Seeders (persist to DB) ──────────────────────────────────────────── + + public static async Task SeedUserAsync( + IUserWriteOnlyRepository repository, + IUnitOfWork unitOfWork, + string name = "João Silva", + string email = "joao@example.com", + string document = "529.982.247-25", + CancellationToken cancellationToken = default) + { + var user = MakeUser(name, email, document); + await repository.AddAsync(user, cancellationToken); + await unitOfWork.SaveChangesAsync(cancellationToken); + return user; + } + + public static async Task SeedClientAsync( + IClientWriteOnlyRepository repository, + IUnitOfWork unitOfWork, + Guid userId, + string name = "Cliente Teste", + string email = "cliente@example.com", + CancellationToken cancellationToken = default) + { + var client = MakeClient(userId, name, email); + await repository.AddAsync(client, cancellationToken); + await unitOfWork.SaveChangesAsync(cancellationToken); + return client; + } + + public static async Task SeedMaterialAsync( + IMaterialWriteOnlyRepository repository, + IUnitOfWork unitOfWork, + Guid userId, + string name = "Cabo 10mm", + decimal defaultPrice = 15.50m, + MaterialUnit unit = MaterialUnit.Metro, + CancellationToken cancellationToken = default) + { + var material = MakeMaterial(userId, name, defaultPrice, unit); + await repository.AddAsync(material, cancellationToken); + await unitOfWork.SaveChangesAsync(cancellationToken); + return material; + } + + public static async Task SeedBudgetAsync( + IBudgetWriteOnlyRepository repository, + IUnitOfWork unitOfWork, + Guid userId, + Guid clientId, + CancellationToken cancellationToken = default) + { + var budget = MakeBudget(userId, clientId); + await repository.AddAsync(budget, cancellationToken); + await unitOfWork.SaveChangesAsync(cancellationToken); + return budget; + } + + public static async Task SeedRefreshTokenAsync( + IRefreshTokenWriteOnlyRepository repository, + IUnitOfWork unitOfWork, + Guid userId, + string token = "test-token", + int daysToExpire = 7, + CancellationToken cancellationToken = default) + { + var refreshToken = MakeRefreshToken(token, userId, daysToExpire); + await repository.AddAsync(refreshToken, cancellationToken); + await unitOfWork.SaveChangesAsync(cancellationToken); + return refreshToken; + } +} From 7ff7e85aea79d2bc47047b58239e2575793732ba Mon Sep 17 00:00:00 2001 From: Evandro Costa Date: Tue, 31 Mar 2026 23:15:11 -0300 Subject: [PATCH 02/10] refactor(tests): use TestDataBuilder in UserRepositoryTests --- .../Persistence/UserRepositoryTests.cs | 36 +++++++------------ 1 file changed, 12 insertions(+), 24 deletions(-) diff --git a/tests/Voltiq.Infrastructure.Tests/Persistence/UserRepositoryTests.cs b/tests/Voltiq.Infrastructure.Tests/Persistence/UserRepositoryTests.cs index fe78946..e291f78 100644 --- a/tests/Voltiq.Infrastructure.Tests/Persistence/UserRepositoryTests.cs +++ b/tests/Voltiq.Infrastructure.Tests/Persistence/UserRepositoryTests.cs @@ -1,8 +1,8 @@ using Microsoft.EntityFrameworkCore; using Shouldly; +using Voltiq.CommonTestUtilities.Builders; using Voltiq.CommonTestUtilities.Database; using Voltiq.CommonTestUtilities.Fixtures; -using Voltiq.Domain.Entities; using Voltiq.Domain.ValueObjects; using Voltiq.Infrastructure.Persistence; using Voltiq.Infrastructure.Persistence.Repositories; @@ -36,12 +36,8 @@ public async ValueTask DisposeAsync() [Fact] public async Task AddAndGetById_ShouldPersistUser() { - var email = Email.Create("joao@example.com").Value; - var document = Document.Create("529.982.247-25").Value; - var user = User.Register("João Silva", email, document, "$argon2id$hash"); - - await _userRepository.AddAsync(user, TestContext.Current.CancellationToken); - await _unitOfWork.SaveChangesAsync(TestContext.Current.CancellationToken); + var user = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork, + cancellationToken: TestContext.Current.CancellationToken); var found = await _userRepository.GetByIdAsync(user.Id, TestContext.Current.CancellationToken); @@ -54,16 +50,12 @@ public async Task AddAndGetById_ShouldPersistUser() [Fact] public async Task ExistsUserAsync_ShouldReturnTrue_WhenEmailOrDocumentExists() { - var email = Email.Create("maria@example.com").Value; - var document = Document.Create("11222333000181").Value; - var user = User.Register("Maria Santos", email, document, "$argon2id$hash"); - - await _userRepository.AddAsync(user, TestContext.Current.CancellationToken); - await _unitOfWork.SaveChangesAsync(TestContext.Current.CancellationToken); + var user = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork, + name: "Maria Santos", email: "maria@example.com", document: "11222333000181", + cancellationToken: TestContext.Current.CancellationToken); - var exists = - await _userRepository.ExistsUserAsync(document, email, - TestContext.Current.CancellationToken); + var exists = await _userRepository.ExistsUserAsync( + user.Document, user.Email, TestContext.Current.CancellationToken); exists.ShouldBeTrue(); } @@ -71,15 +63,11 @@ await _userRepository.ExistsUserAsync(document, email, [Fact] public async Task GetByEmailAsync_ShouldReturnUser_WhenEmailExists() { - var email = Email.Create("carlos@example.com").Value; - var document = Document.Create("153.509.460-56").Value; - var user = User.Register("Carlos Souza", email, document, "$argon2id$hash"); - - await _userRepository.AddAsync(user, TestContext.Current.CancellationToken); - await _unitOfWork.SaveChangesAsync(TestContext.Current.CancellationToken); + var user = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork, + name: "Carlos Souza", email: "carlos@example.com", document: "153.509.460-56", + cancellationToken: TestContext.Current.CancellationToken); - var found = - await _userRepository.GetByEmailAsync(email, TestContext.Current.CancellationToken); + var found = await _userRepository.GetByEmailAsync(user.Email, TestContext.Current.CancellationToken); found.ShouldNotBeNull(); found.Id.ShouldBe(user.Id); From 44d5c62c928d6bc8b5bc25a96559d1e1f59ffc1a Mon Sep 17 00:00:00 2001 From: Evandro Costa Date: Tue, 31 Mar 2026 23:15:20 -0300 Subject: [PATCH 03/10] refactor(tests): use TestDataBuilder in ClientRepositoryTests --- .../Persistence/ClientRepositoryTests.cs | 132 +++++++----------- 1 file changed, 52 insertions(+), 80 deletions(-) diff --git a/tests/Voltiq.Infrastructure.Tests/Persistence/ClientRepositoryTests.cs b/tests/Voltiq.Infrastructure.Tests/Persistence/ClientRepositoryTests.cs index c097f6f..41ad30f 100644 --- a/tests/Voltiq.Infrastructure.Tests/Persistence/ClientRepositoryTests.cs +++ b/tests/Voltiq.Infrastructure.Tests/Persistence/ClientRepositoryTests.cs @@ -1,8 +1,8 @@ using Microsoft.EntityFrameworkCore; using Shouldly; +using Voltiq.CommonTestUtilities.Builders; using Voltiq.CommonTestUtilities.Database; using Voltiq.CommonTestUtilities.Fixtures; -using Voltiq.Domain.Entities; using Voltiq.Domain.ValueObjects; using Voltiq.Infrastructure.Persistence; using Voltiq.Infrastructure.Persistence.Repositories; @@ -42,37 +42,13 @@ public async ValueTask DisposeAsync() await _dbContext.DisposeAsync(); } - private static User MakeUser() - { - var email = Email.Create("joao@example.com").Value; - var document = Document.Create("529.982.247-25").Value; - return User.Register("João Silva", email, document, "$argon2id$hash"); - } - - private static Client MakeClient(Guid userId, string name = "Cliente Teste", - string email = "cliente@example.com") - { - var emailVo = Email.Create(email).Value; - return Client.Register(userId, name, "(11) 99999-9999", emailVo, - Address.Create("Rua das Flores", "123", "São Paulo", "SP", "01310-100")); - } - - private async Task CreateAndSaveUserAsync() - { - var user = MakeUser(); - await _userRepository.AddAsync(user); - await _unitOfWork.SaveChangesAsync(); - return user; - } - [Fact] public async Task AddAndGetById_ShouldPersistClient() { - var user = await CreateAndSaveUserAsync(); - var client = MakeClient(user.Id); - - await _clientRepository.AddAsync(client, TestContext.Current.CancellationToken); - await _unitOfWork.SaveChangesAsync(TestContext.Current.CancellationToken); + var user = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork, + cancellationToken: TestContext.Current.CancellationToken); + var client = await TestDataBuilder.SeedClientAsync(_clientRepository, _unitOfWork, user.Id, + cancellationToken: TestContext.Current.CancellationToken); var found = await _clientReadOnly.GetByIdAndUserIdAsync(client.Id, user.Id, TestContext.Current.CancellationToken); @@ -90,22 +66,21 @@ public async Task AddAndGetById_ShouldPersistClient() [Fact] public async Task GetByUserIdAsync_ShouldReturnOnlyClientsOfUser() { - var user1 = await CreateAndSaveUserAsync(); - - var email2 = Email.Create("maria@example.com").Value; - var doc2 = Document.Create("11222333000181").Value; - var user2 = User.Register("Maria Santos", email2, doc2, "$argon2id$hash2"); - await _userRepository.AddAsync(user2, TestContext.Current.CancellationToken); - await _unitOfWork.SaveChangesAsync(TestContext.Current.CancellationToken); - - var client1 = MakeClient(user1.Id, "Cliente User1", "user1a@example.com"); - var client2 = MakeClient(user1.Id, "Cliente User1 B", "user1b@example.com"); - var client3 = MakeClient(user2.Id, "Cliente User2", "user2@example.com"); - - await _clientRepository.AddAsync(client1, TestContext.Current.CancellationToken); - await _clientRepository.AddAsync(client2, TestContext.Current.CancellationToken); - await _clientRepository.AddAsync(client3, TestContext.Current.CancellationToken); - await _unitOfWork.SaveChangesAsync(TestContext.Current.CancellationToken); + var user1 = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork, + cancellationToken: TestContext.Current.CancellationToken); + var user2 = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork, + name: "Maria Santos", email: "maria@example.com", document: "11222333000181", + cancellationToken: TestContext.Current.CancellationToken); + + await TestDataBuilder.SeedClientAsync(_clientRepository, _unitOfWork, user1.Id, + name: "Cliente User1", email: "user1a@example.com", + cancellationToken: TestContext.Current.CancellationToken); + await TestDataBuilder.SeedClientAsync(_clientRepository, _unitOfWork, user1.Id, + name: "Cliente User1 B", email: "user1b@example.com", + cancellationToken: TestContext.Current.CancellationToken); + await TestDataBuilder.SeedClientAsync(_clientRepository, _unitOfWork, user2.Id, + name: "Cliente User2", email: "user2@example.com", + cancellationToken: TestContext.Current.CancellationToken); var user1Clients = await _clientRepository.GetByUserIdAsync(user1.Id, @@ -118,11 +93,10 @@ await _clientRepository.GetByUserIdAsync(user1.Id, [Fact] public async Task GetByIdAndUserIdAsync_ShouldReturnClient_WhenBelongsToUser() { - var user = await CreateAndSaveUserAsync(); - var client = MakeClient(user.Id); - - await _clientRepository.AddAsync(client, TestContext.Current.CancellationToken); - await _unitOfWork.SaveChangesAsync(TestContext.Current.CancellationToken); + var user = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork, + cancellationToken: TestContext.Current.CancellationToken); + var client = await TestDataBuilder.SeedClientAsync(_clientRepository, _unitOfWork, user.Id, + cancellationToken: TestContext.Current.CancellationToken); var found = await _clientReadOnly.GetByIdAndUserIdAsync(client.Id, user.Id, TestContext.Current.CancellationToken); @@ -134,17 +108,14 @@ public async Task GetByIdAndUserIdAsync_ShouldReturnClient_WhenBelongsToUser() [Fact] public async Task GetByIdAndUserIdAsync_ShouldReturnNull_WhenClientBelongsToAnotherUser() { - var user1 = await CreateAndSaveUserAsync(); - - var email2 = Email.Create("outro@example.com").Value; - var doc2 = Document.Create("11222333000181").Value; - var user2 = User.Register("Outro User", email2, doc2, "$argon2id$hash2"); - await _userRepository.AddAsync(user2, TestContext.Current.CancellationToken); - await _unitOfWork.SaveChangesAsync(TestContext.Current.CancellationToken); + var user1 = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork, + cancellationToken: TestContext.Current.CancellationToken); + var user2 = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork, + name: "Outro User", email: "outro@example.com", document: "11222333000181", + cancellationToken: TestContext.Current.CancellationToken); - var client = MakeClient(user1.Id); - await _clientRepository.AddAsync(client, TestContext.Current.CancellationToken); - await _unitOfWork.SaveChangesAsync(TestContext.Current.CancellationToken); + var client = await TestDataBuilder.SeedClientAsync(_clientRepository, _unitOfWork, user1.Id, + cancellationToken: TestContext.Current.CancellationToken); var found = await _clientReadOnly.GetByIdAndUserIdAsync(client.Id, user2.Id, TestContext.Current.CancellationToken); @@ -155,10 +126,11 @@ public async Task GetByIdAndUserIdAsync_ShouldReturnNull_WhenClientBelongsToAnot [Fact] public async Task ExistsWithEmailForUserAsync_ShouldReturnTrue_WhenEmailExistsForUser() { - var user = await CreateAndSaveUserAsync(); - var client = MakeClient(user.Id, email: "ocupado@example.com"); - await _clientRepository.AddAsync(client, TestContext.Current.CancellationToken); - await _unitOfWork.SaveChangesAsync(TestContext.Current.CancellationToken); + var user = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork, + cancellationToken: TestContext.Current.CancellationToken); + await TestDataBuilder.SeedClientAsync(_clientRepository, _unitOfWork, user.Id, + email: "ocupado@example.com", + cancellationToken: TestContext.Current.CancellationToken); var existingEmail = Email.Create("ocupado@example.com").Value; @@ -171,7 +143,8 @@ public async Task ExistsWithEmailForUserAsync_ShouldReturnTrue_WhenEmailExistsFo [Fact] public async Task ExistsWithEmailForUserAsync_ShouldReturnFalse_WhenEmailDoesNotExistForUser() { - var user = await CreateAndSaveUserAsync(); + var user = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork, + cancellationToken: TestContext.Current.CancellationToken); var email = Email.Create("inexistente@example.co").Value; var exists = await _clientRepository.ExistsWithEmailForUserAsync( @@ -184,10 +157,11 @@ public async Task ExistsWithEmailForUserAsync_ShouldReturnFalse_WhenEmailDoesNot public async Task ExistsWithEmailForUserAsync_ShouldReturnFalse_WhenExcludeIdMatchesExistingClient() { - var user = await CreateAndSaveUserAsync(); - var client = MakeClient(user.Id, email: "meu@example.com"); - await _clientRepository.AddAsync(client, TestContext.Current.CancellationToken); - await _unitOfWork.SaveChangesAsync(TestContext.Current.CancellationToken); + var user = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork, + cancellationToken: TestContext.Current.CancellationToken); + var client = await TestDataBuilder.SeedClientAsync(_clientRepository, _unitOfWork, user.Id, + email: "meu@example.com", + cancellationToken: TestContext.Current.CancellationToken); var email = Email.Create("meu@example.com").Value; @@ -200,17 +174,15 @@ public async Task [Fact] public async Task ExistsWithEmailForUserAsync_ShouldReturnFalse_WhenEmailBelongsToAnotherUser() { - var user1 = await CreateAndSaveUserAsync(); - - var email2 = Email.Create("outro@example.com").Value; - var doc2 = Document.Create("11222333000181").Value; - var user2 = User.Register("Outro User", email2, doc2, "$argon2id$hash2"); - await _userRepository.AddAsync(user2, TestContext.Current.CancellationToken); - await _unitOfWork.SaveChangesAsync(TestContext.Current.CancellationToken); - - var client = MakeClient(user1.Id, email: "compartilhado@example.com"); - await _clientRepository.AddAsync(client, TestContext.Current.CancellationToken); - await _unitOfWork.SaveChangesAsync(TestContext.Current.CancellationToken); + var user1 = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork, + cancellationToken: TestContext.Current.CancellationToken); + var user2 = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork, + name: "Outro User", email: "outro@example.com", document: "11222333000181", + cancellationToken: TestContext.Current.CancellationToken); + + await TestDataBuilder.SeedClientAsync(_clientRepository, _unitOfWork, user1.Id, + email: "compartilhado@example.com", + cancellationToken: TestContext.Current.CancellationToken); var clientEmail = Email.Create("compartilhado@example.com").Value; From fc03b9bf1c5c64fc222ad917a4b1b84e148cc686 Mon Sep 17 00:00:00 2001 From: Evandro Costa Date: Tue, 31 Mar 2026 23:15:22 -0300 Subject: [PATCH 04/10] refactor(tests): use TestDataBuilder in MaterialRepositoryTests --- .../Persistence/MaterialRepositoryTests.cs | 101 ++++++++---------- 1 file changed, 44 insertions(+), 57 deletions(-) diff --git a/tests/Voltiq.Infrastructure.Tests/Persistence/MaterialRepositoryTests.cs b/tests/Voltiq.Infrastructure.Tests/Persistence/MaterialRepositoryTests.cs index 00f131f..41ba1a8 100644 --- a/tests/Voltiq.Infrastructure.Tests/Persistence/MaterialRepositoryTests.cs +++ b/tests/Voltiq.Infrastructure.Tests/Persistence/MaterialRepositoryTests.cs @@ -1,10 +1,9 @@ using Microsoft.EntityFrameworkCore; using Shouldly; +using Voltiq.CommonTestUtilities.Builders; using Voltiq.CommonTestUtilities.Database; using Voltiq.CommonTestUtilities.Fixtures; -using Voltiq.Domain.Entities; using Voltiq.Domain.Enums; -using Voltiq.Domain.ValueObjects; using Voltiq.Infrastructure.Persistence; using Voltiq.Infrastructure.Persistence.Repositories; using Voltiq.Domain.Interfaces.Repositories.Material; @@ -41,32 +40,13 @@ public async ValueTask DisposeAsync() await _dbContext.DisposeAsync(); } - private static User MakeUser(string email = "joao@example.com", string doc = "529.982.247-25") - { - var e = Email.Create(email).Value; - var d = Document.Create(doc).Value; - return User.Register("João Silva", e, d, "$argon2id$hash"); - } - - private static Material MakeMaterial(Guid userId, string name = "Cabo 10mm") - => Material.Register(userId, name, 15.50m, MaterialUnit.Metro); - - private async Task CreateAndSaveUserAsync(string email = "joao@example.com", string doc = "529.982.247-25") - { - var user = MakeUser(email, doc); - await _userRepository.AddAsync(user); - await _unitOfWork.SaveChangesAsync(); - return user; - } - [Fact] public async Task AddAndGetById_ShouldPersistMaterial() { - var user = await CreateAndSaveUserAsync(); - var material = MakeMaterial(user.Id); - - await _materialRepository.AddAsync(material, TestContext.Current.CancellationToken); - await _unitOfWork.SaveChangesAsync(TestContext.Current.CancellationToken); + var user = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork, + cancellationToken: TestContext.Current.CancellationToken); + var material = await TestDataBuilder.SeedMaterialAsync(_materialRepository, _unitOfWork, user.Id, + cancellationToken: TestContext.Current.CancellationToken); var found = await _materialRepository.GetByIdAsync(material.Id, TestContext.Current.CancellationToken); @@ -82,17 +62,18 @@ public async Task AddAndGetById_ShouldPersistMaterial() [Fact] public async Task GetByUserIdAsync_ShouldReturnOnlyMaterialsOfUser() { - var user1 = await CreateAndSaveUserAsync(); - var user2 = await CreateAndSaveUserAsync("maria@example.com", "11222333000181"); - - var m1 = MakeMaterial(user1.Id, "Cabo A"); - var m2 = MakeMaterial(user1.Id, "Cabo B"); - var m3 = MakeMaterial(user2.Id, "Disjuntor"); - - await _materialRepository.AddAsync(m1, TestContext.Current.CancellationToken); - await _materialRepository.AddAsync(m2, TestContext.Current.CancellationToken); - await _materialRepository.AddAsync(m3, TestContext.Current.CancellationToken); - await _unitOfWork.SaveChangesAsync(TestContext.Current.CancellationToken); + var user1 = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork, + cancellationToken: TestContext.Current.CancellationToken); + var user2 = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork, + email: "maria@example.com", document: "11222333000181", + cancellationToken: TestContext.Current.CancellationToken); + + await TestDataBuilder.SeedMaterialAsync(_materialRepository, _unitOfWork, user1.Id, name: "Cabo A", + cancellationToken: TestContext.Current.CancellationToken); + await TestDataBuilder.SeedMaterialAsync(_materialRepository, _unitOfWork, user1.Id, name: "Cabo B", + cancellationToken: TestContext.Current.CancellationToken); + await TestDataBuilder.SeedMaterialAsync(_materialRepository, _unitOfWork, user2.Id, name: "Disjuntor", + cancellationToken: TestContext.Current.CancellationToken); var user1Materials = await _materialRepository.GetByUserIdAsync(user1.Id, TestContext.Current.CancellationToken); @@ -103,11 +84,10 @@ public async Task GetByUserIdAsync_ShouldReturnOnlyMaterialsOfUser() [Fact] public async Task GetByIdAndUserIdAsync_ShouldReturnMaterial_WhenBelongsToUser() { - var user = await CreateAndSaveUserAsync(); - var material = MakeMaterial(user.Id); - - await _materialRepository.AddAsync(material, TestContext.Current.CancellationToken); - await _unitOfWork.SaveChangesAsync(TestContext.Current.CancellationToken); + var user = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork, + cancellationToken: TestContext.Current.CancellationToken); + var material = await TestDataBuilder.SeedMaterialAsync(_materialRepository, _unitOfWork, user.Id, + cancellationToken: TestContext.Current.CancellationToken); var found = await _materialReadOnly.GetByIdAndUserIdAsync(material.Id, user.Id, TestContext.Current.CancellationToken); @@ -118,12 +98,14 @@ public async Task GetByIdAndUserIdAsync_ShouldReturnMaterial_WhenBelongsToUser() [Fact] public async Task GetByIdAndUserIdAsync_ShouldReturnNull_WhenMaterialBelongsToAnotherUser() { - var user1 = await CreateAndSaveUserAsync(); - var user2 = await CreateAndSaveUserAsync("outro@example.com", "11222333000181"); + var user1 = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork, + cancellationToken: TestContext.Current.CancellationToken); + var user2 = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork, + email: "outro@example.com", document: "11222333000181", + cancellationToken: TestContext.Current.CancellationToken); - var material = MakeMaterial(user1.Id); - await _materialRepository.AddAsync(material, TestContext.Current.CancellationToken); - await _unitOfWork.SaveChangesAsync(TestContext.Current.CancellationToken); + var material = await TestDataBuilder.SeedMaterialAsync(_materialRepository, _unitOfWork, user1.Id, + cancellationToken: TestContext.Current.CancellationToken); var found = await _materialReadOnly.GetByIdAndUserIdAsync(material.Id, user2.Id, TestContext.Current.CancellationToken); @@ -133,13 +115,14 @@ public async Task GetByIdAndUserIdAsync_ShouldReturnNull_WhenMaterialBelongsToAn [Fact] public async Task GetActiveByUserIdAsync_ShouldReturnOnlyActiveMaterials() { - var user = await CreateAndSaveUserAsync(); + var user = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork, + cancellationToken: TestContext.Current.CancellationToken); - var active = MakeMaterial(user.Id, "Ativo"); - var inactive = MakeMaterial(user.Id, "Inativo"); - inactive.Deactivate(); + await TestDataBuilder.SeedMaterialAsync(_materialRepository, _unitOfWork, user.Id, name: "Ativo", + cancellationToken: TestContext.Current.CancellationToken); - await _materialRepository.AddAsync(active, TestContext.Current.CancellationToken); + var inactive = TestDataBuilder.MakeMaterial(user.Id, name: "Inativo"); + inactive.Deactivate(); await _materialRepository.AddAsync(inactive, TestContext.Current.CancellationToken); await _unitOfWork.SaveChangesAsync(TestContext.Current.CancellationToken); @@ -152,12 +135,16 @@ public async Task GetActiveByUserIdAsync_ShouldReturnOnlyActiveMaterials() [Fact] public async Task GetActiveByUserIdAsync_ShouldNotReturnMaterialsOfOtherUser() { - var user1 = await CreateAndSaveUserAsync(); - var user2 = await CreateAndSaveUserAsync("outro@example.com", "11222333000181"); - - await _materialRepository.AddAsync(MakeMaterial(user1.Id, "User1 Material"), TestContext.Current.CancellationToken); - await _materialRepository.AddAsync(MakeMaterial(user2.Id, "User2 Material"), TestContext.Current.CancellationToken); - await _unitOfWork.SaveChangesAsync(TestContext.Current.CancellationToken); + var user1 = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork, + cancellationToken: TestContext.Current.CancellationToken); + var user2 = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork, + email: "outro@example.com", document: "11222333000181", + cancellationToken: TestContext.Current.CancellationToken); + + await TestDataBuilder.SeedMaterialAsync(_materialRepository, _unitOfWork, user1.Id, name: "User1 Material", + cancellationToken: TestContext.Current.CancellationToken); + await TestDataBuilder.SeedMaterialAsync(_materialRepository, _unitOfWork, user2.Id, name: "User2 Material", + cancellationToken: TestContext.Current.CancellationToken); var result = await _materialRepository.GetActiveByUserIdAsync(user1.Id, TestContext.Current.CancellationToken); From 59c206bc48f9ba69f4340eee3ee471f1f0ef5837 Mon Sep 17 00:00:00 2001 From: Evandro Costa Date: Tue, 31 Mar 2026 23:15:23 -0300 Subject: [PATCH 05/10] refactor(tests): use TestDataBuilder in BudgetRepositoryTests --- .../Persistence/BudgetRepositoryTests.cs | 135 +++++++----------- 1 file changed, 55 insertions(+), 80 deletions(-) diff --git a/tests/Voltiq.Infrastructure.Tests/Persistence/BudgetRepositoryTests.cs b/tests/Voltiq.Infrastructure.Tests/Persistence/BudgetRepositoryTests.cs index 9c1220a..92d3796 100644 --- a/tests/Voltiq.Infrastructure.Tests/Persistence/BudgetRepositoryTests.cs +++ b/tests/Voltiq.Infrastructure.Tests/Persistence/BudgetRepositoryTests.cs @@ -1,10 +1,10 @@ using Microsoft.EntityFrameworkCore; using Shouldly; +using Voltiq.CommonTestUtilities.Builders; using Voltiq.CommonTestUtilities.Database; using Voltiq.CommonTestUtilities.Fixtures; using Voltiq.Domain.Entities; using Voltiq.Domain.Enums; -using Voltiq.Domain.ValueObjects; using Voltiq.Infrastructure.Persistence; using Voltiq.Infrastructure.Persistence.Repositories; using Voltiq.Domain.Interfaces.Repositories.Budget; @@ -45,51 +45,15 @@ public async ValueTask DisposeAsync() await _dbContext.DisposeAsync(); } - private static User MakeUser(string email = "joao@example.com", string doc = "529.982.247-25") - { - var userEmail = Email.Create(email).Value; - var userDocument = Document.Create(doc).Value; - return User.Register("João Silva", userEmail, userDocument, "$argon2id$hash"); - } - - private static Client MakeClient(Guid userId, string email = "cliente@example.com") - { - var clientEmail = Email.Create(email).Value; - return Client.Register(userId, "Cliente Teste", "(11) 99999-9999", clientEmail, - Address.Create("Rua das Flores", "123", "São Paulo", "SP", "01310-100")); - } - - private static Budget MakeBudget(Guid userId, Guid clientId) - { - return Budget.Register(userId, clientId); - } - - private async Task CreateAndSaveUserAsync(string email = "joao@example.com", - string doc = "529.982.247-25") - { - var user = MakeUser(email, doc); - await _userRepository.AddAsync(user); - await _unitOfWork.SaveChangesAsync(); - return user; - } - - private async Task CreateAndSaveClientAsync(Guid userId) - { - var client = MakeClient(userId); - await _clientRepository.AddAsync(client); - await _unitOfWork.SaveChangesAsync(); - return client; - } - [Fact] public async Task AddAndGetById_ShouldPersistBudget() { - var user = await CreateAndSaveUserAsync(); - var client = await CreateAndSaveClientAsync(user.Id); - var budget = MakeBudget(user.Id, client.Id); - - await _budgetRepository.AddAsync(budget, TestContext.Current.CancellationToken); - await _unitOfWork.SaveChangesAsync(TestContext.Current.CancellationToken); + var user = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork, + cancellationToken: TestContext.Current.CancellationToken); + var client = await TestDataBuilder.SeedClientAsync(_clientRepository, _unitOfWork, user.Id, + cancellationToken: TestContext.Current.CancellationToken); + var budget = await TestDataBuilder.SeedBudgetAsync(_budgetRepository, _unitOfWork, user.Id, client.Id, + cancellationToken: TestContext.Current.CancellationToken); var found = await _budgetRepository.GetByIdAsync(budget.Id, TestContext.Current.CancellationToken); @@ -105,19 +69,24 @@ public async Task AddAndGetById_ShouldPersistBudget() [Fact] public async Task GetByUserIdAsync_ShouldReturnOnlyBudgetsOfUser() { - var user1 = await CreateAndSaveUserAsync(); - var user2 = await CreateAndSaveUserAsync("maria@example.com", "11222333000181"); - - var client1 = await CreateAndSaveClientAsync(user1.Id); - var client2 = await CreateAndSaveClientAsync(user2.Id); - - await _budgetRepository.AddAsync(MakeBudget(user1.Id, client1.Id), - TestContext.Current.CancellationToken); - await _budgetRepository.AddAsync(MakeBudget(user1.Id, client1.Id), - TestContext.Current.CancellationToken); - await _budgetRepository.AddAsync(MakeBudget(user2.Id, client2.Id), - TestContext.Current.CancellationToken); - await _unitOfWork.SaveChangesAsync(TestContext.Current.CancellationToken); + var user1 = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork, + cancellationToken: TestContext.Current.CancellationToken); + var user2 = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork, + email: "maria@example.com", document: "11222333000181", + cancellationToken: TestContext.Current.CancellationToken); + + var client1 = await TestDataBuilder.SeedClientAsync(_clientRepository, _unitOfWork, user1.Id, + cancellationToken: TestContext.Current.CancellationToken); + var client2 = await TestDataBuilder.SeedClientAsync(_clientRepository, _unitOfWork, user2.Id, + email: "cliente2@example.com", + cancellationToken: TestContext.Current.CancellationToken); + + await TestDataBuilder.SeedBudgetAsync(_budgetRepository, _unitOfWork, user1.Id, client1.Id, + cancellationToken: TestContext.Current.CancellationToken); + await TestDataBuilder.SeedBudgetAsync(_budgetRepository, _unitOfWork, user1.Id, client1.Id, + cancellationToken: TestContext.Current.CancellationToken); + await TestDataBuilder.SeedBudgetAsync(_budgetRepository, _unitOfWork, user2.Id, client2.Id, + cancellationToken: TestContext.Current.CancellationToken); var user1Budgets = await _budgetRepository.GetByUserIdAsync(user1.Id, @@ -130,12 +99,12 @@ await _budgetRepository.GetByUserIdAsync(user1.Id, [Fact] public async Task GetByIdAndUserIdAsync_ShouldReturnBudget_WhenBelongsToUser() { - var user = await CreateAndSaveUserAsync(); - var client = await CreateAndSaveClientAsync(user.Id); - var budget = MakeBudget(user.Id, client.Id); - - await _budgetRepository.AddAsync(budget, TestContext.Current.CancellationToken); - await _unitOfWork.SaveChangesAsync(TestContext.Current.CancellationToken); + var user = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork, + cancellationToken: TestContext.Current.CancellationToken); + var client = await TestDataBuilder.SeedClientAsync(_clientRepository, _unitOfWork, user.Id, + cancellationToken: TestContext.Current.CancellationToken); + var budget = await TestDataBuilder.SeedBudgetAsync(_budgetRepository, _unitOfWork, user.Id, client.Id, + cancellationToken: TestContext.Current.CancellationToken); var found = await _budgetReadOnly.GetByIdAndUserIdAsync(budget.Id, user.Id, TestContext.Current.CancellationToken); @@ -147,14 +116,16 @@ public async Task GetByIdAndUserIdAsync_ShouldReturnBudget_WhenBelongsToUser() [Fact] public async Task GetByIdAndUserIdAsync_ShouldReturnNull_WhenBudgetBelongsToAnotherUser() { - var user1 = await CreateAndSaveUserAsync(); - var user2 = await CreateAndSaveUserAsync("outro@example.com", "11222333000181"); + var user1 = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork, + cancellationToken: TestContext.Current.CancellationToken); + var user2 = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork, + email: "outro@example.com", document: "11222333000181", + cancellationToken: TestContext.Current.CancellationToken); - var client1 = await CreateAndSaveClientAsync(user1.Id); - var budget = MakeBudget(user1.Id, client1.Id); - - await _budgetRepository.AddAsync(budget, TestContext.Current.CancellationToken); - await _unitOfWork.SaveChangesAsync(TestContext.Current.CancellationToken); + var client1 = await TestDataBuilder.SeedClientAsync(_clientRepository, _unitOfWork, user1.Id, + cancellationToken: TestContext.Current.CancellationToken); + var budget = await TestDataBuilder.SeedBudgetAsync(_budgetRepository, _unitOfWork, user1.Id, client1.Id, + cancellationToken: TestContext.Current.CancellationToken); var found = await _budgetReadOnly.GetByIdAndUserIdAsync(budget.Id, user2.Id, TestContext.Current.CancellationToken); @@ -165,12 +136,14 @@ public async Task GetByIdAndUserIdAsync_ShouldReturnNull_WhenBudgetBelongsToAnot [Fact] public async Task GetByIdWithItemsAndUserIdAsync_ShouldReturnBudgetWithItems() { - var user = await CreateAndSaveUserAsync(); - var client = await CreateAndSaveClientAsync(user.Id); - var budget = MakeBudget(user.Id, client.Id); + var user = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork, + cancellationToken: TestContext.Current.CancellationToken); + var client = await TestDataBuilder.SeedClientAsync(_clientRepository, _unitOfWork, user.Id, + cancellationToken: TestContext.Current.CancellationToken); + + var budget = TestDataBuilder.MakeBudget(user.Id, client.Id); var item = BudgetItem.Create(budget.Id, null, "Cabo 10mm", MaterialUnit.Metro, 2, 15.50m); budget.AddItem(item); - await _budgetRepository.AddAsync(budget, TestContext.Current.CancellationToken); await _unitOfWork.SaveChangesAsync(TestContext.Current.CancellationToken); @@ -185,13 +158,15 @@ public async Task GetByIdWithItemsAndUserIdAsync_ShouldReturnBudgetWithItems() [Fact] public async Task GetByIdWithItemsAndUserIdAsync_ShouldReturnNull_WhenBelongsToAnotherUser() { - var user1 = await CreateAndSaveUserAsync(); - var user2 = await CreateAndSaveUserAsync("outro@example.com", "11222333000181"); - var client1 = await CreateAndSaveClientAsync(user1.Id); - var budget = MakeBudget(user1.Id, client1.Id); - - await _budgetRepository.AddAsync(budget, TestContext.Current.CancellationToken); - await _unitOfWork.SaveChangesAsync(TestContext.Current.CancellationToken); + var user1 = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork, + cancellationToken: TestContext.Current.CancellationToken); + var user2 = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork, + email: "outro@example.com", document: "11222333000181", + cancellationToken: TestContext.Current.CancellationToken); + var client1 = await TestDataBuilder.SeedClientAsync(_clientRepository, _unitOfWork, user1.Id, + cancellationToken: TestContext.Current.CancellationToken); + var budget = await TestDataBuilder.SeedBudgetAsync(_budgetRepository, _unitOfWork, user1.Id, client1.Id, + cancellationToken: TestContext.Current.CancellationToken); var found = await _budgetReadOnly.GetByIdWithItemsAndUserIdAsync(budget.Id, user2.Id, TestContext.Current.CancellationToken); From 62d1dfd27f7131bfa94df7976d4ea8742ee3e456 Mon Sep 17 00:00:00 2001 From: Evandro Costa Date: Tue, 31 Mar 2026 23:15:24 -0300 Subject: [PATCH 06/10] refactor(tests): use TestDataBuilder in SoftDeleteTests --- .../Persistence/SoftDeleteTests.cs | 29 +++---------------- 1 file changed, 4 insertions(+), 25 deletions(-) diff --git a/tests/Voltiq.Infrastructure.Tests/Persistence/SoftDeleteTests.cs b/tests/Voltiq.Infrastructure.Tests/Persistence/SoftDeleteTests.cs index a3d7528..3ce8cdd 100644 --- a/tests/Voltiq.Infrastructure.Tests/Persistence/SoftDeleteTests.cs +++ b/tests/Voltiq.Infrastructure.Tests/Persistence/SoftDeleteTests.cs @@ -1,9 +1,8 @@ using Microsoft.EntityFrameworkCore; using Shouldly; +using Voltiq.CommonTestUtilities.Builders; using Voltiq.CommonTestUtilities.Database; using Voltiq.CommonTestUtilities.Fixtures; -using Voltiq.Domain.Entities; -using Voltiq.Domain.ValueObjects; using Voltiq.Infrastructure.Persistence; using Voltiq.Infrastructure.Persistence.Repositories; using Voltiq.Domain.Interfaces.Repositories.Client; @@ -41,30 +40,10 @@ public async ValueTask DisposeAsync() await _dbContext.DisposeAsync(); } - private static User MakeUser() + private async Task<(Voltiq.Domain.Entities.User user, Voltiq.Domain.Entities.Client client)> CreateUserAndClientAsync() { - var email = Email.Create("joao@example.com").Value; - var doc = Document.Create("529.982.247-25").Value; - return User.Register("João Silva", email, doc, "$argon2id$hash"); - } - - private static Client MakeClient(Guid userId) - { - var email = Email.Create("cliente@example.com").Value; - return Client.Register(userId, "Cliente Teste", "(11) 99999-9999", email, - Address.Create("Rua das Flores", "123", "São Paulo", "SP", "01310-100")); - } - - private async Task<(User user, Client client)> CreateUserAndClientAsync() - { - var user = MakeUser(); - await _userRepository.AddAsync(user); - await _unitOfWork.SaveChangesAsync(); - - var client = MakeClient(user.Id); - await _clientRepository.AddAsync(client); - await _unitOfWork.SaveChangesAsync(); - + var user = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork); + var client = await TestDataBuilder.SeedClientAsync(_clientRepository, _unitOfWork, user.Id); return (user, client); } From 7793acfb0bc69f79f0367d863affbed836d3aaff Mon Sep 17 00:00:00 2001 From: Evandro Costa Date: Tue, 31 Mar 2026 23:15:24 -0300 Subject: [PATCH 07/10] refactor(tests): use TestDataBuilder in RefreshTokenRepositoryTests --- .../RefreshTokenRepositoryTests.cs | 28 +++++++------------ 1 file changed, 10 insertions(+), 18 deletions(-) diff --git a/tests/Voltiq.Infrastructure.Tests/Persistence/RefreshTokenRepositoryTests.cs b/tests/Voltiq.Infrastructure.Tests/Persistence/RefreshTokenRepositoryTests.cs index 5d4b16c..d53a884 100644 --- a/tests/Voltiq.Infrastructure.Tests/Persistence/RefreshTokenRepositoryTests.cs +++ b/tests/Voltiq.Infrastructure.Tests/Persistence/RefreshTokenRepositoryTests.cs @@ -1,12 +1,12 @@ using Microsoft.EntityFrameworkCore; using Shouldly; +using Voltiq.CommonTestUtilities.Builders; using Voltiq.CommonTestUtilities.Database; using Voltiq.CommonTestUtilities.Fixtures; -using Voltiq.Domain.Entities; -using Voltiq.Domain.ValueObjects; using Voltiq.Infrastructure.Persistence; using Voltiq.Infrastructure.Persistence.Repositories; using Voltiq.Infrastructure.Persistence.Repositories.TokenRepository; +using Voltiq.Infrastructure.Persistence.Repositories.User; namespace Voltiq.Infrastructure.Tests.Persistence; @@ -15,6 +15,7 @@ public class RefreshTokenRepositoryTests(PostgreSqlContainerFixture fixture) { private ApplicationDbContext _dbContext = null!; private RefreshTokenRepository _repository = null!; + private UserRepository _userRepository = null!; private UnitOfWork _unitOfWork = null!; public async ValueTask InitializeAsync() @@ -23,6 +24,7 @@ public async ValueTask InitializeAsync() await _dbContext.Database.MigrateAsync(); await DatabaseHelper.CleanAsync(_dbContext); + _userRepository = new UserRepository(_dbContext); _repository = new RefreshTokenRepository(_dbContext); _unitOfWork = new UnitOfWork(_dbContext); } @@ -32,25 +34,15 @@ public async ValueTask DisposeAsync() await _dbContext.DisposeAsync(); } - private async Task<(User user, RefreshToken token)> SeedUserAndTokenAsync(string rawToken) - { - var email = Email.Create($"{Guid.NewGuid()}@example.com").Value; - var document = Document.Create("529.982.247-25").Value; - var user = User.Register("Test User", email, document, "$argon2id$hash"); - - await _dbContext.Users.AddAsync(user); - - var token = RefreshToken.Create(rawToken, user.Id, 7); - await _repository.AddAsync(token); - await _unitOfWork.SaveChangesAsync(); - - return (user, token); - } - [Fact] public async Task GetByTokenAsync_WhenTokenExists_ReturnsToken() { - var (_, expected) = await SeedUserAndTokenAsync("my-raw-token-abc"); + var user = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork, + email: $"{Guid.NewGuid()}@example.com", + cancellationToken: TestContext.Current.CancellationToken); + var expected = await TestDataBuilder.SeedRefreshTokenAsync(_repository, _unitOfWork, + user.Id, token: "my-raw-token-abc", + cancellationToken: TestContext.Current.CancellationToken); var found = await _repository.GetByTokenAsync("my-raw-token-abc", TestContext.Current.CancellationToken); From 7cc0258ebe0e8d750d725fc5174a2b9a1c10b16f Mon Sep 17 00:00:00 2001 From: Evandro Costa Date: Tue, 31 Mar 2026 23:30:42 -0300 Subject: [PATCH 08/10] refactor(tests): remove unused route attribute in MaterialsController --- src/Voltiq.API/Controllers/Materials/MaterialsController.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Voltiq.API/Controllers/Materials/MaterialsController.cs b/src/Voltiq.API/Controllers/Materials/MaterialsController.cs index 47ea358..56db17f 100644 --- a/src/Voltiq.API/Controllers/Materials/MaterialsController.cs +++ b/src/Voltiq.API/Controllers/Materials/MaterialsController.cs @@ -11,7 +11,6 @@ namespace Voltiq.API.Controllers.Materials; [ApiVersion("1.0")] -[Route("api/v{version:apiVersion}/materials")] public sealed class MaterialsController : BaseApiController { /// Registers a new material for the authenticated user. From 0b66395d5098651b8b443c162655cf76e5a4d44e Mon Sep 17 00:00:00 2001 From: Evandro Costa Date: Tue, 31 Mar 2026 23:30:56 -0300 Subject: [PATCH 09/10] refactor(tests): clean up project file and enhance BaseApiController attributes --- .../Controllers/BaseApiController.cs | 1 + src/Voltiq.API/Voltiq.API.csproj | 33 +++++++++---------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/Voltiq.API/Controllers/BaseApiController.cs b/src/Voltiq.API/Controllers/BaseApiController.cs index d2b1f43..e02d5fc 100644 --- a/src/Voltiq.API/Controllers/BaseApiController.cs +++ b/src/Voltiq.API/Controllers/BaseApiController.cs @@ -8,6 +8,7 @@ namespace Voltiq.API.Controllers; [ApiController] +[Produces("application/json", "application/problem+json")] [Route("api/v{version:apiVersion}/[controller]")] public abstract class BaseApiController : ControllerBase { diff --git a/src/Voltiq.API/Voltiq.API.csproj b/src/Voltiq.API/Voltiq.API.csproj index 80b46c0..bcbe7ed 100644 --- a/src/Voltiq.API/Voltiq.API.csproj +++ b/src/Voltiq.API/Voltiq.API.csproj @@ -1,40 +1,39 @@  - - - + + + - - - - + + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - - - + + + - - + - + - + - + @@ -42,7 +41,7 @@ enable enable true - 0cd97f61-50df-4c03-8e90-8348a3369961 - + 0cd97f61-50df-4c03-8e90-8348a3369961 + From 436b17856d0835c5ac8a7b2bcf1078b16b750d34 Mon Sep 17 00:00:00 2001 From: Evandro Costa Date: Tue, 31 Mar 2026 23:31:16 -0300 Subject: [PATCH 10/10] refactor(tests): remove cancellation token from TestDataBuilder seed methods --- .../Builders/TestDataBuilder.cs | 52 +++++------ .../Fixtures/PostgreSqlContainerFixture.cs | 2 +- .../Persistence/BudgetRepositoryTests.cs | 91 ++++++++----------- .../Persistence/ClientRepositoryTests.cs | 60 ++++-------- .../Persistence/MaterialRepositoryTests.cs | 54 ++++------- .../RefreshTokenRepositoryTests.cs | 6 +- .../Persistence/UserRepositoryTests.cs | 9 +- 7 files changed, 110 insertions(+), 164 deletions(-) diff --git a/tests/Voltiq.CommonTestUtilities/Builders/TestDataBuilder.cs b/tests/Voltiq.CommonTestUtilities/Builders/TestDataBuilder.cs index ac4f8ba..cb42995 100644 --- a/tests/Voltiq.CommonTestUtilities/Builders/TestDataBuilder.cs +++ b/tests/Voltiq.CommonTestUtilities/Builders/TestDataBuilder.cs @@ -1,8 +1,8 @@ using Voltiq.Domain.Entities; using Voltiq.Domain.Enums; using Voltiq.Domain.Interfaces; -using Voltiq.Domain.Interfaces.Repositories.Client; using Voltiq.Domain.Interfaces.Repositories.Budget; +using Voltiq.Domain.Interfaces.Repositories.Client; using Voltiq.Domain.Interfaces.Repositories.Material; using Voltiq.Domain.Interfaces.Repositories.RefreshToken; using Voltiq.Domain.Interfaces.Repositories.User; @@ -12,7 +12,7 @@ namespace Voltiq.CommonTestUtilities.Builders; public static class TestDataBuilder { - // ── In-memory factories ──────────────────────────────────────────────── + private static CancellationToken Ct => TestContext.Current.CancellationToken; public static User MakeUser( string name = "João Silva", @@ -41,30 +41,34 @@ public static Material MakeMaterial( string name = "Cabo 10mm", decimal defaultPrice = 15.50m, MaterialUnit unit = MaterialUnit.Metro) - => Material.Register(userId, name, defaultPrice, unit); + { + return Material.Register(userId, name, defaultPrice, unit); + } public static Budget MakeBudget(Guid userId, Guid clientId) - => Budget.Register(userId, clientId); + { + return Budget.Register(userId, clientId); + } public static RefreshToken MakeRefreshToken( string token, Guid userId, int daysToExpire = 7) - => RefreshToken.Create(token, userId, daysToExpire); + { + return RefreshToken.Create(token, userId, daysToExpire); + } - // ── Seeders (persist to DB) ──────────────────────────────────────────── public static async Task SeedUserAsync( IUserWriteOnlyRepository repository, IUnitOfWork unitOfWork, string name = "João Silva", string email = "joao@example.com", - string document = "529.982.247-25", - CancellationToken cancellationToken = default) + string document = "529.982.247-25") { var user = MakeUser(name, email, document); - await repository.AddAsync(user, cancellationToken); - await unitOfWork.SaveChangesAsync(cancellationToken); + await repository.AddAsync(user, Ct); + await unitOfWork.SaveChangesAsync(Ct); return user; } @@ -73,12 +77,11 @@ public static async Task SeedClientAsync( IUnitOfWork unitOfWork, Guid userId, string name = "Cliente Teste", - string email = "cliente@example.com", - CancellationToken cancellationToken = default) + string email = "cliente@example.com") { var client = MakeClient(userId, name, email); - await repository.AddAsync(client, cancellationToken); - await unitOfWork.SaveChangesAsync(cancellationToken); + await repository.AddAsync(client, Ct); + await unitOfWork.SaveChangesAsync(Ct); return client; } @@ -88,12 +91,11 @@ public static async Task SeedMaterialAsync( Guid userId, string name = "Cabo 10mm", decimal defaultPrice = 15.50m, - MaterialUnit unit = MaterialUnit.Metro, - CancellationToken cancellationToken = default) + MaterialUnit unit = MaterialUnit.Metro) { var material = MakeMaterial(userId, name, defaultPrice, unit); - await repository.AddAsync(material, cancellationToken); - await unitOfWork.SaveChangesAsync(cancellationToken); + await repository.AddAsync(material, Ct); + await unitOfWork.SaveChangesAsync(Ct); return material; } @@ -101,12 +103,11 @@ public static async Task SeedBudgetAsync( IBudgetWriteOnlyRepository repository, IUnitOfWork unitOfWork, Guid userId, - Guid clientId, - CancellationToken cancellationToken = default) + Guid clientId) { var budget = MakeBudget(userId, clientId); - await repository.AddAsync(budget, cancellationToken); - await unitOfWork.SaveChangesAsync(cancellationToken); + await repository.AddAsync(budget, Ct); + await unitOfWork.SaveChangesAsync(Ct); return budget; } @@ -115,12 +116,11 @@ public static async Task SeedRefreshTokenAsync( IUnitOfWork unitOfWork, Guid userId, string token = "test-token", - int daysToExpire = 7, - CancellationToken cancellationToken = default) + int daysToExpire = 7) { var refreshToken = MakeRefreshToken(token, userId, daysToExpire); - await repository.AddAsync(refreshToken, cancellationToken); - await unitOfWork.SaveChangesAsync(cancellationToken); + await repository.AddAsync(refreshToken, Ct); + await unitOfWork.SaveChangesAsync(Ct); return refreshToken; } } diff --git a/tests/Voltiq.CommonTestUtilities/Fixtures/PostgreSqlContainerFixture.cs b/tests/Voltiq.CommonTestUtilities/Fixtures/PostgreSqlContainerFixture.cs index 3e38395..f500445 100644 --- a/tests/Voltiq.CommonTestUtilities/Fixtures/PostgreSqlContainerFixture.cs +++ b/tests/Voltiq.CommonTestUtilities/Fixtures/PostgreSqlContainerFixture.cs @@ -8,5 +8,5 @@ public sealed class PostgreSqlContainerFixture(IMessageSink messageSink) : ContainerFixture(messageSink) { protected override PostgreSqlBuilder Configure() - => new PostgreSqlBuilder("postgres:16-alpine"); + => new PostgreSqlBuilder("postgres:17-alpine"); } diff --git a/tests/Voltiq.Infrastructure.Tests/Persistence/BudgetRepositoryTests.cs b/tests/Voltiq.Infrastructure.Tests/Persistence/BudgetRepositoryTests.cs index 92d3796..a1f95a3 100644 --- a/tests/Voltiq.Infrastructure.Tests/Persistence/BudgetRepositoryTests.cs +++ b/tests/Voltiq.Infrastructure.Tests/Persistence/BudgetRepositoryTests.cs @@ -5,9 +5,9 @@ using Voltiq.CommonTestUtilities.Fixtures; using Voltiq.Domain.Entities; using Voltiq.Domain.Enums; +using Voltiq.Domain.Interfaces.Repositories.Budget; using Voltiq.Infrastructure.Persistence; using Voltiq.Infrastructure.Persistence.Repositories; -using Voltiq.Domain.Interfaces.Repositories.Budget; using Voltiq.Infrastructure.Persistence.Repositories.Budget; using Voltiq.Infrastructure.Persistence.Repositories.Client; using Voltiq.Infrastructure.Persistence.Repositories.User; @@ -18,9 +18,9 @@ public class BudgetRepositoryTests(PostgreSqlContainerFixture fixture) : IClassFixture, IAsyncLifetime { private static readonly Guid UserId = Guid.NewGuid(); + private IBudgetReadOnlyRepository _budgetReadOnly = null!; private BudgetRepository _budgetRepository = null!; - private IBudgetReadOnlyRepository _budgetReadOnly = null!; private ClientRepository _clientRepository = null!; private ApplicationDbContext _dbContext = null!; private UnitOfWork _unitOfWork = null!; @@ -48,12 +48,11 @@ public async ValueTask DisposeAsync() [Fact] public async Task AddAndGetById_ShouldPersistBudget() { - var user = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork, - cancellationToken: TestContext.Current.CancellationToken); - var client = await TestDataBuilder.SeedClientAsync(_clientRepository, _unitOfWork, user.Id, - cancellationToken: TestContext.Current.CancellationToken); - var budget = await TestDataBuilder.SeedBudgetAsync(_budgetRepository, _unitOfWork, user.Id, client.Id, - cancellationToken: TestContext.Current.CancellationToken); + var user = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork); + var client = await TestDataBuilder.SeedClientAsync(_clientRepository, _unitOfWork, user.Id); + var budget = + await TestDataBuilder.SeedBudgetAsync(_budgetRepository, _unitOfWork, user.Id, + client.Id); var found = await _budgetRepository.GetByIdAsync(budget.Id, TestContext.Current.CancellationToken); @@ -69,24 +68,19 @@ public async Task AddAndGetById_ShouldPersistBudget() [Fact] public async Task GetByUserIdAsync_ShouldReturnOnlyBudgetsOfUser() { - var user1 = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork, - cancellationToken: TestContext.Current.CancellationToken); + var user1 = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork); var user2 = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork, - email: "maria@example.com", document: "11222333000181", - cancellationToken: TestContext.Current.CancellationToken); - - var client1 = await TestDataBuilder.SeedClientAsync(_clientRepository, _unitOfWork, user1.Id, - cancellationToken: TestContext.Current.CancellationToken); - var client2 = await TestDataBuilder.SeedClientAsync(_clientRepository, _unitOfWork, user2.Id, - email: "cliente2@example.com", - cancellationToken: TestContext.Current.CancellationToken); - - await TestDataBuilder.SeedBudgetAsync(_budgetRepository, _unitOfWork, user1.Id, client1.Id, - cancellationToken: TestContext.Current.CancellationToken); - await TestDataBuilder.SeedBudgetAsync(_budgetRepository, _unitOfWork, user1.Id, client1.Id, - cancellationToken: TestContext.Current.CancellationToken); - await TestDataBuilder.SeedBudgetAsync(_budgetRepository, _unitOfWork, user2.Id, client2.Id, - cancellationToken: TestContext.Current.CancellationToken); + email: "maria@example.com", document: "11222333000181"); + + var client1 = + await TestDataBuilder.SeedClientAsync(_clientRepository, _unitOfWork, user1.Id); + var client2 = await TestDataBuilder.SeedClientAsync(_clientRepository, _unitOfWork, + user2.Id, + email: "cliente2@example.com"); + + await TestDataBuilder.SeedBudgetAsync(_budgetRepository, _unitOfWork, user1.Id, client1.Id); + await TestDataBuilder.SeedBudgetAsync(_budgetRepository, _unitOfWork, user1.Id, client1.Id); + await TestDataBuilder.SeedBudgetAsync(_budgetRepository, _unitOfWork, user2.Id, client2.Id); var user1Budgets = await _budgetRepository.GetByUserIdAsync(user1.Id, @@ -99,12 +93,11 @@ await _budgetRepository.GetByUserIdAsync(user1.Id, [Fact] public async Task GetByIdAndUserIdAsync_ShouldReturnBudget_WhenBelongsToUser() { - var user = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork, - cancellationToken: TestContext.Current.CancellationToken); - var client = await TestDataBuilder.SeedClientAsync(_clientRepository, _unitOfWork, user.Id, - cancellationToken: TestContext.Current.CancellationToken); - var budget = await TestDataBuilder.SeedBudgetAsync(_budgetRepository, _unitOfWork, user.Id, client.Id, - cancellationToken: TestContext.Current.CancellationToken); + var user = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork); + var client = await TestDataBuilder.SeedClientAsync(_clientRepository, _unitOfWork, user.Id); + var budget = + await TestDataBuilder.SeedBudgetAsync(_budgetRepository, _unitOfWork, user.Id, + client.Id); var found = await _budgetReadOnly.GetByIdAndUserIdAsync(budget.Id, user.Id, TestContext.Current.CancellationToken); @@ -116,16 +109,15 @@ public async Task GetByIdAndUserIdAsync_ShouldReturnBudget_WhenBelongsToUser() [Fact] public async Task GetByIdAndUserIdAsync_ShouldReturnNull_WhenBudgetBelongsToAnotherUser() { - var user1 = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork, - cancellationToken: TestContext.Current.CancellationToken); + var user1 = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork); var user2 = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork, - email: "outro@example.com", document: "11222333000181", - cancellationToken: TestContext.Current.CancellationToken); + email: "outro@example.com", document: "11222333000181"); - var client1 = await TestDataBuilder.SeedClientAsync(_clientRepository, _unitOfWork, user1.Id, - cancellationToken: TestContext.Current.CancellationToken); - var budget = await TestDataBuilder.SeedBudgetAsync(_budgetRepository, _unitOfWork, user1.Id, client1.Id, - cancellationToken: TestContext.Current.CancellationToken); + var client1 = + await TestDataBuilder.SeedClientAsync(_clientRepository, _unitOfWork, user1.Id); + var budget = + await TestDataBuilder.SeedBudgetAsync(_budgetRepository, _unitOfWork, user1.Id, + client1.Id); var found = await _budgetReadOnly.GetByIdAndUserIdAsync(budget.Id, user2.Id, TestContext.Current.CancellationToken); @@ -136,10 +128,8 @@ public async Task GetByIdAndUserIdAsync_ShouldReturnNull_WhenBudgetBelongsToAnot [Fact] public async Task GetByIdWithItemsAndUserIdAsync_ShouldReturnBudgetWithItems() { - var user = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork, - cancellationToken: TestContext.Current.CancellationToken); - var client = await TestDataBuilder.SeedClientAsync(_clientRepository, _unitOfWork, user.Id, - cancellationToken: TestContext.Current.CancellationToken); + var user = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork); + var client = await TestDataBuilder.SeedClientAsync(_clientRepository, _unitOfWork, user.Id); var budget = TestDataBuilder.MakeBudget(user.Id, client.Id); var item = BudgetItem.Create(budget.Id, null, "Cabo 10mm", MaterialUnit.Metro, 2, 15.50m); @@ -158,15 +148,14 @@ public async Task GetByIdWithItemsAndUserIdAsync_ShouldReturnBudgetWithItems() [Fact] public async Task GetByIdWithItemsAndUserIdAsync_ShouldReturnNull_WhenBelongsToAnotherUser() { - var user1 = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork, - cancellationToken: TestContext.Current.CancellationToken); + var user1 = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork); var user2 = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork, - email: "outro@example.com", document: "11222333000181", - cancellationToken: TestContext.Current.CancellationToken); - var client1 = await TestDataBuilder.SeedClientAsync(_clientRepository, _unitOfWork, user1.Id, - cancellationToken: TestContext.Current.CancellationToken); - var budget = await TestDataBuilder.SeedBudgetAsync(_budgetRepository, _unitOfWork, user1.Id, client1.Id, - cancellationToken: TestContext.Current.CancellationToken); + email: "outro@example.com", document: "11222333000181"); + var client1 = + await TestDataBuilder.SeedClientAsync(_clientRepository, _unitOfWork, user1.Id); + var budget = + await TestDataBuilder.SeedBudgetAsync(_budgetRepository, _unitOfWork, user1.Id, + client1.Id); var found = await _budgetReadOnly.GetByIdWithItemsAndUserIdAsync(budget.Id, user2.Id, TestContext.Current.CancellationToken); diff --git a/tests/Voltiq.Infrastructure.Tests/Persistence/ClientRepositoryTests.cs b/tests/Voltiq.Infrastructure.Tests/Persistence/ClientRepositoryTests.cs index 41ad30f..71da220 100644 --- a/tests/Voltiq.Infrastructure.Tests/Persistence/ClientRepositoryTests.cs +++ b/tests/Voltiq.Infrastructure.Tests/Persistence/ClientRepositoryTests.cs @@ -45,10 +45,8 @@ public async ValueTask DisposeAsync() [Fact] public async Task AddAndGetById_ShouldPersistClient() { - var user = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork, - cancellationToken: TestContext.Current.CancellationToken); - var client = await TestDataBuilder.SeedClientAsync(_clientRepository, _unitOfWork, user.Id, - cancellationToken: TestContext.Current.CancellationToken); + var user = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork); + var client = await TestDataBuilder.SeedClientAsync(_clientRepository, _unitOfWork, user.Id); var found = await _clientReadOnly.GetByIdAndUserIdAsync(client.Id, user.Id, TestContext.Current.CancellationToken); @@ -66,21 +64,16 @@ public async Task AddAndGetById_ShouldPersistClient() [Fact] public async Task GetByUserIdAsync_ShouldReturnOnlyClientsOfUser() { - var user1 = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork, - cancellationToken: TestContext.Current.CancellationToken); + var user1 = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork); var user2 = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork, - name: "Maria Santos", email: "maria@example.com", document: "11222333000181", - cancellationToken: TestContext.Current.CancellationToken); + name: "Maria Santos", email: "maria@example.com", document: "11222333000181"); await TestDataBuilder.SeedClientAsync(_clientRepository, _unitOfWork, user1.Id, - name: "Cliente User1", email: "user1a@example.com", - cancellationToken: TestContext.Current.CancellationToken); + name: "Cliente User1", email: "user1a@example.com"); await TestDataBuilder.SeedClientAsync(_clientRepository, _unitOfWork, user1.Id, - name: "Cliente User1 B", email: "user1b@example.com", - cancellationToken: TestContext.Current.CancellationToken); + name: "Cliente User1 B", email: "user1b@example.com"); await TestDataBuilder.SeedClientAsync(_clientRepository, _unitOfWork, user2.Id, - name: "Cliente User2", email: "user2@example.com", - cancellationToken: TestContext.Current.CancellationToken); + name: "Cliente User2", email: "user2@example.com"); var user1Clients = await _clientRepository.GetByUserIdAsync(user1.Id, @@ -93,10 +86,8 @@ await _clientRepository.GetByUserIdAsync(user1.Id, [Fact] public async Task GetByIdAndUserIdAsync_ShouldReturnClient_WhenBelongsToUser() { - var user = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork, - cancellationToken: TestContext.Current.CancellationToken); - var client = await TestDataBuilder.SeedClientAsync(_clientRepository, _unitOfWork, user.Id, - cancellationToken: TestContext.Current.CancellationToken); + var user = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork); + var client = await TestDataBuilder.SeedClientAsync(_clientRepository, _unitOfWork, user.Id); var found = await _clientReadOnly.GetByIdAndUserIdAsync(client.Id, user.Id, TestContext.Current.CancellationToken); @@ -108,14 +99,11 @@ public async Task GetByIdAndUserIdAsync_ShouldReturnClient_WhenBelongsToUser() [Fact] public async Task GetByIdAndUserIdAsync_ShouldReturnNull_WhenClientBelongsToAnotherUser() { - var user1 = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork, - cancellationToken: TestContext.Current.CancellationToken); + var user1 = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork); var user2 = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork, - name: "Outro User", email: "outro@example.com", document: "11222333000181", - cancellationToken: TestContext.Current.CancellationToken); + name: "Outro User", email: "outro@example.com", document: "11222333000181"); - var client = await TestDataBuilder.SeedClientAsync(_clientRepository, _unitOfWork, user1.Id, - cancellationToken: TestContext.Current.CancellationToken); + var client = await TestDataBuilder.SeedClientAsync(_clientRepository, _unitOfWork, user1.Id); var found = await _clientReadOnly.GetByIdAndUserIdAsync(client.Id, user2.Id, TestContext.Current.CancellationToken); @@ -126,11 +114,9 @@ public async Task GetByIdAndUserIdAsync_ShouldReturnNull_WhenClientBelongsToAnot [Fact] public async Task ExistsWithEmailForUserAsync_ShouldReturnTrue_WhenEmailExistsForUser() { - var user = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork, - cancellationToken: TestContext.Current.CancellationToken); + var user = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork); await TestDataBuilder.SeedClientAsync(_clientRepository, _unitOfWork, user.Id, - email: "ocupado@example.com", - cancellationToken: TestContext.Current.CancellationToken); + email: "ocupado@example.com"); var existingEmail = Email.Create("ocupado@example.com").Value; @@ -143,8 +129,7 @@ await TestDataBuilder.SeedClientAsync(_clientRepository, _unitOfWork, user.Id, [Fact] public async Task ExistsWithEmailForUserAsync_ShouldReturnFalse_WhenEmailDoesNotExistForUser() { - var user = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork, - cancellationToken: TestContext.Current.CancellationToken); + var user = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork); var email = Email.Create("inexistente@example.co").Value; var exists = await _clientRepository.ExistsWithEmailForUserAsync( @@ -157,11 +142,9 @@ public async Task ExistsWithEmailForUserAsync_ShouldReturnFalse_WhenEmailDoesNot public async Task ExistsWithEmailForUserAsync_ShouldReturnFalse_WhenExcludeIdMatchesExistingClient() { - var user = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork, - cancellationToken: TestContext.Current.CancellationToken); + var user = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork); var client = await TestDataBuilder.SeedClientAsync(_clientRepository, _unitOfWork, user.Id, - email: "meu@example.com", - cancellationToken: TestContext.Current.CancellationToken); + email: "meu@example.com"); var email = Email.Create("meu@example.com").Value; @@ -174,15 +157,12 @@ public async Task [Fact] public async Task ExistsWithEmailForUserAsync_ShouldReturnFalse_WhenEmailBelongsToAnotherUser() { - var user1 = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork, - cancellationToken: TestContext.Current.CancellationToken); + var user1 = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork); var user2 = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork, - name: "Outro User", email: "outro@example.com", document: "11222333000181", - cancellationToken: TestContext.Current.CancellationToken); + name: "Outro User", email: "outro@example.com", document: "11222333000181"); await TestDataBuilder.SeedClientAsync(_clientRepository, _unitOfWork, user1.Id, - email: "compartilhado@example.com", - cancellationToken: TestContext.Current.CancellationToken); + email: "compartilhado@example.com"); var clientEmail = Email.Create("compartilhado@example.com").Value; diff --git a/tests/Voltiq.Infrastructure.Tests/Persistence/MaterialRepositoryTests.cs b/tests/Voltiq.Infrastructure.Tests/Persistence/MaterialRepositoryTests.cs index 41ba1a8..f28b155 100644 --- a/tests/Voltiq.Infrastructure.Tests/Persistence/MaterialRepositoryTests.cs +++ b/tests/Voltiq.Infrastructure.Tests/Persistence/MaterialRepositoryTests.cs @@ -43,10 +43,8 @@ public async ValueTask DisposeAsync() [Fact] public async Task AddAndGetById_ShouldPersistMaterial() { - var user = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork, - cancellationToken: TestContext.Current.CancellationToken); - var material = await TestDataBuilder.SeedMaterialAsync(_materialRepository, _unitOfWork, user.Id, - cancellationToken: TestContext.Current.CancellationToken); + var user = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork); + var material = await TestDataBuilder.SeedMaterialAsync(_materialRepository, _unitOfWork, user.Id); var found = await _materialRepository.GetByIdAsync(material.Id, TestContext.Current.CancellationToken); @@ -62,18 +60,13 @@ public async Task AddAndGetById_ShouldPersistMaterial() [Fact] public async Task GetByUserIdAsync_ShouldReturnOnlyMaterialsOfUser() { - var user1 = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork, - cancellationToken: TestContext.Current.CancellationToken); + var user1 = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork); var user2 = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork, - email: "maria@example.com", document: "11222333000181", - cancellationToken: TestContext.Current.CancellationToken); + email: "maria@example.com", document: "11222333000181"); - await TestDataBuilder.SeedMaterialAsync(_materialRepository, _unitOfWork, user1.Id, name: "Cabo A", - cancellationToken: TestContext.Current.CancellationToken); - await TestDataBuilder.SeedMaterialAsync(_materialRepository, _unitOfWork, user1.Id, name: "Cabo B", - cancellationToken: TestContext.Current.CancellationToken); - await TestDataBuilder.SeedMaterialAsync(_materialRepository, _unitOfWork, user2.Id, name: "Disjuntor", - cancellationToken: TestContext.Current.CancellationToken); + await TestDataBuilder.SeedMaterialAsync(_materialRepository, _unitOfWork, user1.Id, name: "Cabo A"); + await TestDataBuilder.SeedMaterialAsync(_materialRepository, _unitOfWork, user1.Id, name: "Cabo B"); + await TestDataBuilder.SeedMaterialAsync(_materialRepository, _unitOfWork, user2.Id, name: "Disjuntor"); var user1Materials = await _materialRepository.GetByUserIdAsync(user1.Id, TestContext.Current.CancellationToken); @@ -84,10 +77,8 @@ await TestDataBuilder.SeedMaterialAsync(_materialRepository, _unitOfWork, user2. [Fact] public async Task GetByIdAndUserIdAsync_ShouldReturnMaterial_WhenBelongsToUser() { - var user = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork, - cancellationToken: TestContext.Current.CancellationToken); - var material = await TestDataBuilder.SeedMaterialAsync(_materialRepository, _unitOfWork, user.Id, - cancellationToken: TestContext.Current.CancellationToken); + var user = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork); + var material = await TestDataBuilder.SeedMaterialAsync(_materialRepository, _unitOfWork, user.Id); var found = await _materialReadOnly.GetByIdAndUserIdAsync(material.Id, user.Id, TestContext.Current.CancellationToken); @@ -98,14 +89,11 @@ public async Task GetByIdAndUserIdAsync_ShouldReturnMaterial_WhenBelongsToUser() [Fact] public async Task GetByIdAndUserIdAsync_ShouldReturnNull_WhenMaterialBelongsToAnotherUser() { - var user1 = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork, - cancellationToken: TestContext.Current.CancellationToken); + var user1 = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork); var user2 = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork, - email: "outro@example.com", document: "11222333000181", - cancellationToken: TestContext.Current.CancellationToken); + email: "outro@example.com", document: "11222333000181"); - var material = await TestDataBuilder.SeedMaterialAsync(_materialRepository, _unitOfWork, user1.Id, - cancellationToken: TestContext.Current.CancellationToken); + var material = await TestDataBuilder.SeedMaterialAsync(_materialRepository, _unitOfWork, user1.Id); var found = await _materialReadOnly.GetByIdAndUserIdAsync(material.Id, user2.Id, TestContext.Current.CancellationToken); @@ -115,11 +103,9 @@ public async Task GetByIdAndUserIdAsync_ShouldReturnNull_WhenMaterialBelongsToAn [Fact] public async Task GetActiveByUserIdAsync_ShouldReturnOnlyActiveMaterials() { - var user = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork, - cancellationToken: TestContext.Current.CancellationToken); + var user = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork); - await TestDataBuilder.SeedMaterialAsync(_materialRepository, _unitOfWork, user.Id, name: "Ativo", - cancellationToken: TestContext.Current.CancellationToken); + await TestDataBuilder.SeedMaterialAsync(_materialRepository, _unitOfWork, user.Id, name: "Ativo"); var inactive = TestDataBuilder.MakeMaterial(user.Id, name: "Inativo"); inactive.Deactivate(); @@ -135,16 +121,12 @@ await TestDataBuilder.SeedMaterialAsync(_materialRepository, _unitOfWork, user.I [Fact] public async Task GetActiveByUserIdAsync_ShouldNotReturnMaterialsOfOtherUser() { - var user1 = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork, - cancellationToken: TestContext.Current.CancellationToken); + var user1 = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork); var user2 = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork, - email: "outro@example.com", document: "11222333000181", - cancellationToken: TestContext.Current.CancellationToken); + email: "outro@example.com", document: "11222333000181"); - await TestDataBuilder.SeedMaterialAsync(_materialRepository, _unitOfWork, user1.Id, name: "User1 Material", - cancellationToken: TestContext.Current.CancellationToken); - await TestDataBuilder.SeedMaterialAsync(_materialRepository, _unitOfWork, user2.Id, name: "User2 Material", - cancellationToken: TestContext.Current.CancellationToken); + await TestDataBuilder.SeedMaterialAsync(_materialRepository, _unitOfWork, user1.Id, name: "User1 Material"); + await TestDataBuilder.SeedMaterialAsync(_materialRepository, _unitOfWork, user2.Id, name: "User2 Material"); var result = await _materialRepository.GetActiveByUserIdAsync(user1.Id, TestContext.Current.CancellationToken); diff --git a/tests/Voltiq.Infrastructure.Tests/Persistence/RefreshTokenRepositoryTests.cs b/tests/Voltiq.Infrastructure.Tests/Persistence/RefreshTokenRepositoryTests.cs index d53a884..e502af2 100644 --- a/tests/Voltiq.Infrastructure.Tests/Persistence/RefreshTokenRepositoryTests.cs +++ b/tests/Voltiq.Infrastructure.Tests/Persistence/RefreshTokenRepositoryTests.cs @@ -38,11 +38,9 @@ public async ValueTask DisposeAsync() public async Task GetByTokenAsync_WhenTokenExists_ReturnsToken() { var user = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork, - email: $"{Guid.NewGuid()}@example.com", - cancellationToken: TestContext.Current.CancellationToken); + email: $"{Guid.NewGuid()}@example.com"); var expected = await TestDataBuilder.SeedRefreshTokenAsync(_repository, _unitOfWork, - user.Id, token: "my-raw-token-abc", - cancellationToken: TestContext.Current.CancellationToken); + user.Id, token: "my-raw-token-abc"); var found = await _repository.GetByTokenAsync("my-raw-token-abc", TestContext.Current.CancellationToken); diff --git a/tests/Voltiq.Infrastructure.Tests/Persistence/UserRepositoryTests.cs b/tests/Voltiq.Infrastructure.Tests/Persistence/UserRepositoryTests.cs index e291f78..87ea4fc 100644 --- a/tests/Voltiq.Infrastructure.Tests/Persistence/UserRepositoryTests.cs +++ b/tests/Voltiq.Infrastructure.Tests/Persistence/UserRepositoryTests.cs @@ -36,8 +36,7 @@ public async ValueTask DisposeAsync() [Fact] public async Task AddAndGetById_ShouldPersistUser() { - var user = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork, - cancellationToken: TestContext.Current.CancellationToken); + var user = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork); var found = await _userRepository.GetByIdAsync(user.Id, TestContext.Current.CancellationToken); @@ -51,8 +50,7 @@ public async Task AddAndGetById_ShouldPersistUser() public async Task ExistsUserAsync_ShouldReturnTrue_WhenEmailOrDocumentExists() { var user = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork, - name: "Maria Santos", email: "maria@example.com", document: "11222333000181", - cancellationToken: TestContext.Current.CancellationToken); + name: "Maria Santos", email: "maria@example.com", document: "11222333000181"); var exists = await _userRepository.ExistsUserAsync( user.Document, user.Email, TestContext.Current.CancellationToken); @@ -64,8 +62,7 @@ public async Task ExistsUserAsync_ShouldReturnTrue_WhenEmailOrDocumentExists() public async Task GetByEmailAsync_ShouldReturnUser_WhenEmailExists() { var user = await TestDataBuilder.SeedUserAsync(_userRepository, _unitOfWork, - name: "Carlos Souza", email: "carlos@example.com", document: "153.509.460-56", - cancellationToken: TestContext.Current.CancellationToken); + name: "Carlos Souza", email: "carlos@example.com", document: "153.509.460-56"); var found = await _userRepository.GetByEmailAsync(user.Email, TestContext.Current.CancellationToken);