diff --git a/2-modular-monolith-architecture-style/src/Modules/Flight/tests/Integration.Test/Aircraft/Features/CreateAircraftTests.cs b/2-modular-monolith-architecture-style/src/Modules/Flight/tests/Integration.Test/Aircraft/Features/CreateAircraftTests.cs new file mode 100644 index 0000000..73a4d47 --- /dev/null +++ b/2-modular-monolith-architecture-style/src/Modules/Flight/tests/Integration.Test/Aircraft/Features/CreateAircraftTests.cs @@ -0,0 +1,33 @@ +using System.Threading.Tasks; +using BuildingBlocks.Contracts.EventBus.Messages; +using BuildingBlocks.TestBase; +using Api; +using Flight.Data; +using FluentAssertions; +using Integration.Test.Fakes; +using Xunit; + +namespace Integration.Test.Aircraft.Features; + +public class CreateAircraftTests : FlightIntegrationTestBase +{ + public CreateAircraftTests( + TestFixture integrationTestFactory) : base(integrationTestFactory) + { + } + + [Fact] + public async Task should_create_new_aircraft_to_db_and_publish_message_to_broker() + { + // Arrange + var command = new FakeCreateAircraftCommand().Generate(); + + // Act + var response = await Fixture.SendAsync(command); + + // Assert + response?.Id.Value.Should().Be(command.Id); + + (await Fixture.WaitForPublishing()).Should().Be(true); + } +} diff --git a/2-modular-monolith-architecture-style/src/Modules/Flight/tests/Integration.Test/Airport/Features/CreateAirportTests.cs b/2-modular-monolith-architecture-style/src/Modules/Flight/tests/Integration.Test/Airport/Features/CreateAirportTests.cs new file mode 100644 index 0000000..0e62abb --- /dev/null +++ b/2-modular-monolith-architecture-style/src/Modules/Flight/tests/Integration.Test/Airport/Features/CreateAirportTests.cs @@ -0,0 +1,33 @@ +using System.Threading.Tasks; +using BuildingBlocks.Contracts.EventBus.Messages; +using BuildingBlocks.TestBase; +using Api; +using Flight.Data; +using FluentAssertions; +using Integration.Test.Fakes; +using Xunit; + +namespace Integration.Test.Airport.Features; + +public class CreateAirportTests : FlightIntegrationTestBase +{ + public CreateAirportTests( + TestFixture integrationTestFactory) : base(integrationTestFactory) + { + } + + [Fact] + public async Task should_create_new_airport_to_db_and_publish_message_to_broker() + { + // Arrange + var command = new FakeCreateAirportCommand().Generate(); + + // Act + var response = await Fixture.SendAsync(command); + + // Assert + response?.Id.Should().Be(command.Id); + + (await Fixture.WaitForPublishing()).Should().Be(true); + } +} diff --git a/2-modular-monolith-architecture-style/src/Modules/Flight/tests/Integration.Test/Flight/Features/CreateFlightTests.cs b/2-modular-monolith-architecture-style/src/Modules/Flight/tests/Integration.Test/Flight/Features/CreateFlightTests.cs new file mode 100644 index 0000000..3556d8b --- /dev/null +++ b/2-modular-monolith-architecture-style/src/Modules/Flight/tests/Integration.Test/Flight/Features/CreateFlightTests.cs @@ -0,0 +1,33 @@ +using BuildingBlocks.Contracts.EventBus.Messages; +using BuildingBlocks.TestBase; +using Api; +using Flight.Data; +using FluentAssertions; +using Integration.Test.Fakes; +using Xunit; + +namespace Integration.Test.Flight.Features; + +public class CreateFlightTests : FlightIntegrationTestBase +{ + public CreateFlightTests( + TestFixture integrationTestFactory) : base(integrationTestFactory) + { + } + + [Fact] + public async Task should_create_new_flight_to_db_and_publish_message_to_broker() + { + //Arrange + var command = new FakeCreateFlightCommand().Generate(); + + // Act + var response = await Fixture.SendAsync(command); + + // Assert + response.Should().NotBeNull(); + response?.Id.Should().Be(command.Id); + + (await Fixture.WaitForPublishing()).Should().Be(true); + } +} diff --git a/2-modular-monolith-architecture-style/src/Modules/Flight/tests/Integration.Test/Flight/Features/DeleteFlightTests.cs b/2-modular-monolith-architecture-style/src/Modules/Flight/tests/Integration.Test/Flight/Features/DeleteFlightTests.cs new file mode 100644 index 0000000..cbb1779 --- /dev/null +++ b/2-modular-monolith-architecture-style/src/Modules/Flight/tests/Integration.Test/Flight/Features/DeleteFlightTests.cs @@ -0,0 +1,45 @@ +using System.Linq; +using System.Threading.Tasks; +using BuildingBlocks.Contracts.EventBus.Messages; +using BuildingBlocks.TestBase; +using Api; +using Flight.Data; +using FluentAssertions; +using Microsoft.EntityFrameworkCore; +using Xunit; + +namespace Integration.Test.Flight.Features; + +using global::Flight.Data.Seed; +using global::Flight.Flights.Features.DeletingFlight.V1; +using global::Flight.Flights.Models; +using global::Flight.Flights.ValueObjects; + +public class DeleteFlightTests : FlightIntegrationTestBase +{ + public DeleteFlightTests( + TestFixture integrationTestFactory) : base(integrationTestFactory) + { + } + + [Fact] + public async Task should_delete_flight_from_db() + { + // Arrange + var flightEntity = await Fixture.FindAsync(InitialData.Flights.First().Id); + var command = new DeleteFlight(flightEntity.Id.Value); + + // Act + await Fixture.SendAsync(command); + var deletedFlight = (await Fixture.ExecuteDbContextAsync(db => db.Flights + .Where(x => x.Id == FlightId.Of(command.Id)) + .IgnoreQueryFilters() + .ToListAsync()) + ).FirstOrDefault(); + + // Assert + deletedFlight?.IsDeleted.Should().BeTrue(); + + (await Fixture.WaitForPublishing()).Should().Be(true); + } +} diff --git a/2-modular-monolith-architecture-style/src/Modules/Flight/tests/Integration.Test/Flight/Features/GetAvailableFlightsTests.cs b/2-modular-monolith-architecture-style/src/Modules/Flight/tests/Integration.Test/Flight/Features/GetAvailableFlightsTests.cs new file mode 100644 index 0000000..ef5c54f --- /dev/null +++ b/2-modular-monolith-architecture-style/src/Modules/Flight/tests/Integration.Test/Flight/Features/GetAvailableFlightsTests.cs @@ -0,0 +1,39 @@ +using System.Linq; +using System.Threading.Tasks; +using BuildingBlocks.TestBase; +using Api; +using Flight.Data; +using FluentAssertions; +using Integration.Test.Fakes; +using Xunit; + +namespace Integration.Test.Flight.Features; + +using global::Flight.Flights.Features.CreatingFlight.V1; +using global::Flight.Flights.Features.GettingAvailableFlights.V1; + +public class GetAvailableFlightsTests : FlightIntegrationTestBase +{ + public GetAvailableFlightsTests( + TestFixture integrationTestFactory) : base(integrationTestFactory) + { + } + + [Fact] + public async Task should_return_available_flights() + { + // Arrange + var command = new FakeCreateFlightMongoCommand().Generate(); + + await Fixture.SendAsync(command); + + var query = new GetAvailableFlights(); + + // Act + var response = (await Fixture.SendAsync(query))?.FlightDtos?.ToList(); + + // Assert + response?.Should().NotBeNull(); + response?.Count.Should().BeGreaterOrEqualTo(2); + } +} diff --git a/2-modular-monolith-architecture-style/src/Modules/Flight/tests/Integration.Test/Flight/Features/GetFlightByIdTests.cs b/2-modular-monolith-architecture-style/src/Modules/Flight/tests/Integration.Test/Flight/Features/GetFlightByIdTests.cs new file mode 100644 index 0000000..319a4f3 --- /dev/null +++ b/2-modular-monolith-architecture-style/src/Modules/Flight/tests/Integration.Test/Flight/Features/GetFlightByIdTests.cs @@ -0,0 +1,56 @@ +using System.Threading.Tasks; +using BuildingBlocks.TestBase; +using Flight; +using Api; +using Flight.Data; +using FluentAssertions; +using Integration.Test.Fakes; +using Xunit; + +namespace Integration.Test.Flight.Features; + +using global::Flight.Flights.Features.GettingFlightById.V1; + +public class GetFlightByIdTests : FlightIntegrationTestBase +{ + public GetFlightByIdTests( + TestFixture integrationTestFactory) : base(integrationTestFactory) + { + } + + [Fact] + public async Task should_retrive_a_flight_by_id_currectly() + { + //Arrange + var command = new FakeCreateFlightMongoCommand().Generate(); + + await Fixture.SendAsync(command); + + var query = new GetFlightById(command.Id); + + // Act + var response = await Fixture.SendAsync(query); + + // Assert + response.Should().NotBeNull(); + response?.FlightDto?.Id.Should().Be(command.Id); + } + + [Fact] + public async Task should_retrive_a_flight_by_id_from_grpc_service() + { + //Arrange + var command = new FakeCreateFlightMongoCommand().Generate(); + + await Fixture.SendAsync(command); + + var flightGrpcClient = new FlightGrpcService.FlightGrpcServiceClient(Fixture.Channel); + + // Act + var response = await flightGrpcClient.GetByIdAsync(new GetByIdRequest { Id = command.Id.ToString() }).ResponseAsync; + + // Assert + response?.Should().NotBeNull(); + response?.FlightDto.Id.Should().Be(command.Id.ToString()); + } +} diff --git a/2-modular-monolith-architecture-style/src/Modules/Flight/tests/Integration.Test/Flight/Features/UpdateFlightTests.cs b/2-modular-monolith-architecture-style/src/Modules/Flight/tests/Integration.Test/Flight/Features/UpdateFlightTests.cs new file mode 100644 index 0000000..9db7b76 --- /dev/null +++ b/2-modular-monolith-architecture-style/src/Modules/Flight/tests/Integration.Test/Flight/Features/UpdateFlightTests.cs @@ -0,0 +1,40 @@ +using System.Threading.Tasks; +using BuildingBlocks.Contracts.EventBus.Messages; +using BuildingBlocks.TestBase; +using Api; +using Flight.Data; +using FluentAssertions; +using Integration.Test.Fakes; +using Xunit; + +namespace Integration.Test.Flight.Features; + +using System.Linq; +using global::Flight.Data.Seed; +using global::Flight.Flights.Models; +using global::Flight.Flights.ValueObjects; + +public class UpdateFlightTests : FlightIntegrationTestBase +{ + public UpdateFlightTests( + TestFixture integrationTestFactory) : base(integrationTestFactory) + { + } + + [Fact] + public async Task should_update_flight_to_db_and_publish_message_to_broker() + { + // Arrange + var flightEntity = await Fixture.FindAsync(InitialData.Flights.First().Id); + var command = new FakeUpdateFlightCommand(flightEntity).Generate(); + + // Act + var response = await Fixture.SendAsync(command); + + // Assert + response.Should().NotBeNull(); + response?.Id.Should().Be(flightEntity.Id); + + (await Fixture.WaitForPublishing()).Should().Be(true); + } +} diff --git a/building-blocks/TestBase/TestBase.cs b/building-blocks/TestBase/TestBase.cs index 1365e5e..5fb74bc 100644 --- a/building-blocks/TestBase/TestBase.cs +++ b/building-blocks/TestBase/TestBase.cs @@ -339,6 +339,15 @@ where TEntryPoint : class new( "PostgresOptions:ConnectionString", PostgresTestcontainer.GetConnectionString()), + new( + "PostgresOptions:ConnectionString:Flight", + PostgresTestcontainer.GetConnectionString()), + new( + "PostgresOptions:ConnectionString:Identity", + PostgresTestcontainer.GetConnectionString()), + new( + "PostgresOptions:ConnectionString:Passenger", + PostgresTestcontainer.GetConnectionString()), new( "PersistMessageOptions:ConnectionString", PostgresPersistTestContainer.GetConnectionString()),