diff --git a/CleanArchitecture.IntegrationTests/Fixtures/TestFixtureBase.cs b/CleanArchitecture.IntegrationTests/Fixtures/TestFixtureBase.cs index cfe5a52..7c9fe26 100644 --- a/CleanArchitecture.IntegrationTests/Fixtures/TestFixtureBase.cs +++ b/CleanArchitecture.IntegrationTests/Fixtures/TestFixtureBase.cs @@ -3,6 +3,7 @@ using System.IO; using System.Net.Http; using CleanArchitecture.Infrastructure.Database; using CleanArchitecture.IntegrationTests.Infrastructure; +using Microsoft.AspNetCore.Mvc.Testing; using Microsoft.Extensions.DependencyInjection; namespace CleanArchitecture.IntegrationTests.Fixtures; @@ -14,16 +15,17 @@ public class TestFixtureBase var projectDir = Directory.GetCurrentDirectory(); var configPath = Path.Combine(projectDir, "appsettings.Integration.json"); - var factory = new CleanArchitectureWebApplicationFactory( + Factory = new CleanArchitectureWebApplicationFactory( SeedTestData, RegisterCustomServicesHandler, configPath); - ServerClient = factory.CreateClient(); + ServerClient = Factory.CreateClient(); ServerClient.Timeout = TimeSpan.FromMinutes(5); } public HttpClient ServerClient { get; } + protected WebApplicationFactory Factory { get; } protected virtual void SeedTestData(ApplicationDbContext context) { diff --git a/CleanArchitecture.IntegrationTests/Fixtures/gRPC/GetUsersByIdsTestFixture.cs b/CleanArchitecture.IntegrationTests/Fixtures/gRPC/GetUsersByIdsTestFixture.cs new file mode 100644 index 0000000..a86342c --- /dev/null +++ b/CleanArchitecture.IntegrationTests/Fixtures/gRPC/GetUsersByIdsTestFixture.cs @@ -0,0 +1,43 @@ +using System; +using CleanArchitecture.Domain.Entities; +using CleanArchitecture.Domain.Enums; +using CleanArchitecture.Infrastructure.Database; +using CleanArchitecture.IntegrationTests.Infrastructure; +using Grpc.Net.Client; + +namespace CleanArchitecture.IntegrationTests.Fixtures.gRPC; + +public sealed class GetUsersByIdsTestFixture : TestFixtureBase +{ + public GrpcChannel GrpcChannel { get; } + public Guid CreatedUserId { get; } = Guid.NewGuid(); + + public GetUsersByIdsTestFixture() + { + GrpcChannel = GrpcChannel.ForAddress("http://localhost", new GrpcChannelOptions + { + HttpHandler = Factory.Server.CreateHandler() + }); + } + + protected override void SeedTestData(ApplicationDbContext context) + { + base.SeedTestData(context); + + var user = CreateUser(); + + context.Users.Add(user); + context.SaveChanges(); + } + + public User CreateUser() + { + return new User( + CreatedUserId, + "user@user.de", + "User First Name", + "User Last Name", + "User Password", + UserRole.User); + } +} \ No newline at end of file diff --git a/CleanArchitecture.IntegrationTests/UtilityTests/AuthTests.cs b/CleanArchitecture.IntegrationTests/UtilityTests/AuthTests.cs index 5359a72..a0e7773 100644 --- a/CleanArchitecture.IntegrationTests/UtilityTests/AuthTests.cs +++ b/CleanArchitecture.IntegrationTests/UtilityTests/AuthTests.cs @@ -1,6 +1,4 @@ -using System; using System.Net; -using System.Net.Http; using System.Threading.Tasks; using CleanArchitecture.IntegrationTests.Fixtures; using FluentAssertions; diff --git a/CleanArchitecture.IntegrationTests/gRPC/GetUsersByIdsTests.cs b/CleanArchitecture.IntegrationTests/gRPC/GetUsersByIdsTests.cs new file mode 100644 index 0000000..fe35758 --- /dev/null +++ b/CleanArchitecture.IntegrationTests/gRPC/GetUsersByIdsTests.cs @@ -0,0 +1,38 @@ +using System.Linq; +using System.Threading.Tasks; +using CleanArchitecture.IntegrationTests.Fixtures.gRPC; +using CleanArchitecture.Proto.Users; +using FluentAssertions; +using Xunit; + +namespace CleanArchitecture.IntegrationTests.gRPC; + +public sealed class GetUsersByIdsTests : IClassFixture +{ + private readonly GetUsersByIdsTestFixture _fixture; + + public GetUsersByIdsTests(GetUsersByIdsTestFixture fixture) + { + _fixture = fixture; + } + + [Fact] + public async Task Should_Get_Users_By_Ids() + { + var client = new UsersApi.UsersApiClient(_fixture.GrpcChannel); + + var request = new GetByIdsRequest(); + request.Ids.Add(_fixture.CreatedUserId.ToString()); + + var response = await client.GetByIdsAsync(request); + + response.Users.Count.Should().Be(1); + + 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); + } +} \ No newline at end of file