From 1c4f20ddbc4ee18b7407b274d99e1ddc6e26fd82 Mon Sep 17 00:00:00 2001 From: meysamhadeli Date: Sun, 11 Dec 2022 21:34:19 +0330 Subject: [PATCH] refactor test base --- src/BuildingBlocks/TestBase/TestBase.cs | 57 ++++++++++++++----- .../Booking/Features/CreateBookingTests.cs | 19 ++----- .../BookingIntegrationTestBase.cs | 8 +-- .../Flight/Features/CreateFlightTests.cs | 2 +- .../Flight/Features/GetFlightByIdTests.cs | 2 +- .../tests/EndToEndTest/FlightTestBase.cs | 4 +- .../Aircraft/Features/CreateAircraftTests.cs | 2 +- .../Airport/Features/CreateAirportTests.cs | 2 +- .../Flight/Features/CreateFlightTests.cs | 2 +- .../Flight/Features/DeleteFlightTests.cs | 2 +- .../Features/GetAvailableFlightsTests.cs | 2 +- .../Flight/Features/GetFlightByIdTests.cs | 2 +- .../Flight/Features/UpdateFlightTests.cs | 2 +- .../FlightIntegrationTestBase.cs | 4 +- .../Seat/Features/GetAvailableSeatsTests.cs | 2 +- .../Seat/Features/ReserveSeatTests.cs | 2 +- .../Identity/Features/RegisterNewUserTests.cs | 2 +- .../IdentityIntegrationTestBase.cs | 6 +- .../CompleteRegisterPassengerTests.cs | 2 +- .../Features/GetPassengerByIdTests.cs | 2 +- .../PassengerIntegrationTestBase.cs | 6 +- 21 files changed, 77 insertions(+), 55 deletions(-) diff --git a/src/BuildingBlocks/TestBase/TestBase.cs b/src/BuildingBlocks/TestBase/TestBase.cs index a80766f..e874a2a 100644 --- a/src/BuildingBlocks/TestBase/TestBase.cs +++ b/src/BuildingBlocks/TestBase/TestBase.cs @@ -32,7 +32,7 @@ using ILogger = Serilog.ILogger; namespace BuildingBlocks.TestBase; -public class TestFactory : IAsyncLifetime +public class TestFixture : IAsyncLifetime where TEntryPoint : class { private readonly WebApplicationFactory _factory; @@ -51,7 +51,7 @@ public class TestFactory : IAsyncLifetime public IConfiguration Configuration => _factory?.Services.GetRequiredService(); public ILogger Logger { get; set; } - public TestFactory() + public TestFixture() { _factory = new WebApplicationFactory() .WithWebHostBuilder(builder => @@ -258,7 +258,7 @@ public class TestFactory : IAsyncLifetime } } -public class TestFactory : TestFactory +public class TestWriteFixture : TestFixture where TEntryPoint : class where TWContext : DbContext { @@ -365,7 +365,23 @@ public class TestFactory : TestFactory } } -public class TestFactory : TestFactory + +public class TestReadFixture : TestFixture + where TEntryPoint : class + where TRContext : MongoDbContext +{ + public Task ExecuteReadContextAsync(Func action) + { + return ExecuteScopeAsync(sp => action(sp.GetRequiredService())); + } + + public Task ExecuteReadContextAsync(Func> action) + { + return ExecuteScopeAsync(sp => action(sp.GetRequiredService())); + } +} + +public class TestFixture : TestWriteFixture where TEntryPoint : class where TWContext : DbContext where TRContext : MongoDbContext @@ -389,14 +405,14 @@ public class TestFixtureCore : IAsyncLifetime private SqlConnection DefaultDbConnection { get; set; } private SqlConnection PersistDbConnection { get; set; } - public TestFixtureCore(TestFactory integrationTestFixture, ITestOutputHelper outputHelper) + public TestFixtureCore(TestFixture integrationTestFixture, ITestOutputHelper outputHelper) { Fixture = integrationTestFixture; integrationTestFixture.RegisterServices(services => RegisterTestsServices(services)); integrationTestFixture.Logger = integrationTestFixture.CreateLogger(outputHelper); } - public TestFactory Fixture { get; } + public TestFixture Fixture { get; } public async Task InitializeAsync() @@ -487,18 +503,33 @@ public class TestFixtureCore : IAsyncLifetime } } -public abstract class TestBase : TestFixtureCore +public abstract class TestReadBase : TestFixtureCore //,IClassFixture> where TEntryPoint : class - where TWContext : DbContext + where TRContext : MongoDbContext { - protected TestBase( - TestFactory integrationTestFixture, ITestOutputHelper outputHelper = null) : base(integrationTestFixture, outputHelper) + protected TestReadBase( + TestReadFixture integrationTestFixture, ITestOutputHelper outputHelper = null) : base(integrationTestFixture, outputHelper) { Fixture = integrationTestFixture; } - public TestFactory Fixture { get; } + public TestReadFixture Fixture { get; } +} + + +public abstract class TestWriteBase : TestFixtureCore + //,IClassFixture> + where TEntryPoint : class + where TWContext : DbContext +{ + protected TestWriteBase( + TestWriteFixture integrationTestFixture, ITestOutputHelper outputHelper = null) : base(integrationTestFixture, outputHelper) + { + Fixture = integrationTestFixture; + } + + public TestWriteFixture Fixture { get; } } public abstract class TestBase : TestFixtureCore @@ -508,10 +539,10 @@ public abstract class TestBase : TestFixtureC where TRContext : MongoDbContext { protected TestBase( - TestFactory integrationTestFixture, ITestOutputHelper outputHelper = null) : base(integrationTestFixture, outputHelper) + TestFixture integrationTestFixture, ITestOutputHelper outputHelper = null) : base(integrationTestFixture, outputHelper) { Fixture = integrationTestFixture; } - public TestFactory Fixture { get; } + public TestFixture Fixture { get; } } diff --git a/src/Services/Booking/tests/IntegrationTest/Booking/Features/CreateBookingTests.cs b/src/Services/Booking/tests/IntegrationTest/Booking/Features/CreateBookingTests.cs index 6bd0df0..e7e8536 100644 --- a/src/Services/Booking/tests/IntegrationTest/Booking/Features/CreateBookingTests.cs +++ b/src/Services/Booking/tests/IntegrationTest/Booking/Features/CreateBookingTests.cs @@ -23,7 +23,8 @@ namespace Integration.Test.Booking.Features; public class CreateBookingTests : BookingIntegrationTestBase { - public CreateBookingTests(TestFactory integrationTestFixture) : base(integrationTestFixture) + public CreateBookingTests(TestReadFixture integrationTestFixture) : base( + integrationTestFixture) { } @@ -41,21 +42,13 @@ public class CreateBookingTests : BookingIntegrationTestBase var command = new FakeCreateBookingCommand().Generate(); // Act - try - { - var response = await Fixture.SendAsync(command); - // Assert - response.Should().BeGreaterOrEqualTo(0); + var response = await Fixture.SendAsync(command); - (await Fixture.WaitForPublishing()).Should().Be(true); - } - catch (Exception e) - { - Console.WriteLine(e); - throw; - } + // Assert + response.Should().BeGreaterOrEqualTo(0); + (await Fixture.WaitForPublishing()).Should().Be(true); } diff --git a/src/Services/Booking/tests/IntegrationTest/BookingIntegrationTestBase.cs b/src/Services/Booking/tests/IntegrationTest/BookingIntegrationTestBase.cs index eca6176..b3100f2 100644 --- a/src/Services/Booking/tests/IntegrationTest/BookingIntegrationTestBase.cs +++ b/src/Services/Booking/tests/IntegrationTest/BookingIntegrationTestBase.cs @@ -1,22 +1,20 @@ using Booking.Api; using Booking.Data; -using BuildingBlocks.EFCore; -using BuildingBlocks.PersistMessageProcessor.Data; using BuildingBlocks.TestBase; using Xunit; namespace Integration.Test; [Collection(IntegrationTestCollection.Name)] -public class BookingIntegrationTestBase: TestBase +public class BookingIntegrationTestBase: TestReadBase { - public BookingIntegrationTestBase(TestFactory integrationTestFixture) : base(integrationTestFixture) + public BookingIntegrationTestBase(TestReadFixture integrationTestFixture) : base(integrationTestFixture) { } } [CollectionDefinition(Name)] -public class IntegrationTestCollection : ICollectionFixture> +public class IntegrationTestCollection : ICollectionFixture> { public const string Name = "Booking Integration Test"; } diff --git a/src/Services/Flight/tests/EndToEndTest/Flight/Features/CreateFlightTests.cs b/src/Services/Flight/tests/EndToEndTest/Flight/Features/CreateFlightTests.cs index 6173c59..16fb2b0 100644 --- a/src/Services/Flight/tests/EndToEndTest/Flight/Features/CreateFlightTests.cs +++ b/src/Services/Flight/tests/EndToEndTest/Flight/Features/CreateFlightTests.cs @@ -12,7 +12,7 @@ namespace EndToEnd.Test.Flight.Features; public class CreateFlightTests : FlightEndToEndTestBase { - public CreateFlightTests(TestFactory integrationTestFixture) : base(integrationTestFixture) + public CreateFlightTests(TestFixture integrationTestFixture) : base(integrationTestFixture) { } diff --git a/src/Services/Flight/tests/EndToEndTest/Flight/Features/GetFlightByIdTests.cs b/src/Services/Flight/tests/EndToEndTest/Flight/Features/GetFlightByIdTests.cs index d913c91..72d27f0 100644 --- a/src/Services/Flight/tests/EndToEndTest/Flight/Features/GetFlightByIdTests.cs +++ b/src/Services/Flight/tests/EndToEndTest/Flight/Features/GetFlightByIdTests.cs @@ -12,7 +12,7 @@ namespace EndToEnd.Test.Flight.Features; public class GetFlightByIdTests: FlightEndToEndTestBase { - public GetFlightByIdTests(TestFactory integrationTestFixture) : base(integrationTestFixture) + public GetFlightByIdTests(TestFixture integrationTestFixture) : base(integrationTestFixture) { } diff --git a/src/Services/Flight/tests/EndToEndTest/FlightTestBase.cs b/src/Services/Flight/tests/EndToEndTest/FlightTestBase.cs index 8f4323b..45e067f 100644 --- a/src/Services/Flight/tests/EndToEndTest/FlightTestBase.cs +++ b/src/Services/Flight/tests/EndToEndTest/FlightTestBase.cs @@ -8,13 +8,13 @@ namespace EndToEnd.Test; [Collection(EndToEndTestCollection.Name)] public class FlightEndToEndTestBase: TestBase { - public FlightEndToEndTestBase(TestFactory integrationTestFixture) : base(integrationTestFixture) + public FlightEndToEndTestBase(TestFixture integrationTestFixture) : base(integrationTestFixture) { } } [CollectionDefinition(Name)] -public class EndToEndTestCollection : ICollectionFixture> +public class EndToEndTestCollection : ICollectionFixture> { public const string Name = "Flight EndToEnd Test"; } diff --git a/src/Services/Flight/tests/IntegrationTest/Aircraft/Features/CreateAircraftTests.cs b/src/Services/Flight/tests/IntegrationTest/Aircraft/Features/CreateAircraftTests.cs index 2b765b5..3295692 100644 --- a/src/Services/Flight/tests/IntegrationTest/Aircraft/Features/CreateAircraftTests.cs +++ b/src/Services/Flight/tests/IntegrationTest/Aircraft/Features/CreateAircraftTests.cs @@ -13,7 +13,7 @@ namespace Integration.Test.Aircraft.Features; public class CreateAircraftTests : FlightIntegrationTestBase { public CreateAircraftTests( - TestFactory integrationTestFactory) : base(integrationTestFactory) + TestFixture integrationTestFactory) : base(integrationTestFactory) { } diff --git a/src/Services/Flight/tests/IntegrationTest/Airport/Features/CreateAirportTests.cs b/src/Services/Flight/tests/IntegrationTest/Airport/Features/CreateAirportTests.cs index f07b448..20c00bd 100644 --- a/src/Services/Flight/tests/IntegrationTest/Airport/Features/CreateAirportTests.cs +++ b/src/Services/Flight/tests/IntegrationTest/Airport/Features/CreateAirportTests.cs @@ -13,7 +13,7 @@ namespace Integration.Test.Airport.Features; public class CreateAirportTests : FlightIntegrationTestBase { public CreateAirportTests( - TestFactory integrationTestFactory) : base(integrationTestFactory) + TestFixture integrationTestFactory) : base(integrationTestFactory) { } diff --git a/src/Services/Flight/tests/IntegrationTest/Flight/Features/CreateFlightTests.cs b/src/Services/Flight/tests/IntegrationTest/Flight/Features/CreateFlightTests.cs index 8a18372..979dd01 100644 --- a/src/Services/Flight/tests/IntegrationTest/Flight/Features/CreateFlightTests.cs +++ b/src/Services/Flight/tests/IntegrationTest/Flight/Features/CreateFlightTests.cs @@ -13,7 +13,7 @@ namespace Integration.Test.Flight.Features; public class CreateFlightTests : FlightIntegrationTestBase { public CreateFlightTests( - TestFactory integrationTestFactory) : base(integrationTestFactory) + TestFixture integrationTestFactory) : base(integrationTestFactory) { } diff --git a/src/Services/Flight/tests/IntegrationTest/Flight/Features/DeleteFlightTests.cs b/src/Services/Flight/tests/IntegrationTest/Flight/Features/DeleteFlightTests.cs index b6c6202..5410371 100644 --- a/src/Services/Flight/tests/IntegrationTest/Flight/Features/DeleteFlightTests.cs +++ b/src/Services/Flight/tests/IntegrationTest/Flight/Features/DeleteFlightTests.cs @@ -15,7 +15,7 @@ namespace Integration.Test.Flight.Features; public class DeleteFlightTests : FlightIntegrationTestBase { public DeleteFlightTests( - TestFactory integrationTestFactory) : base(integrationTestFactory) + TestFixture integrationTestFactory) : base(integrationTestFactory) { } diff --git a/src/Services/Flight/tests/IntegrationTest/Flight/Features/GetAvailableFlightsTests.cs b/src/Services/Flight/tests/IntegrationTest/Flight/Features/GetAvailableFlightsTests.cs index 853ae12..f45f610 100644 --- a/src/Services/Flight/tests/IntegrationTest/Flight/Features/GetAvailableFlightsTests.cs +++ b/src/Services/Flight/tests/IntegrationTest/Flight/Features/GetAvailableFlightsTests.cs @@ -14,7 +14,7 @@ namespace Integration.Test.Flight.Features; public class GetAvailableFlightsTests : FlightIntegrationTestBase { public GetAvailableFlightsTests( - TestFactory integrationTestFactory) : base(integrationTestFactory) + TestFixture integrationTestFactory) : base(integrationTestFactory) { } diff --git a/src/Services/Flight/tests/IntegrationTest/Flight/Features/GetFlightByIdTests.cs b/src/Services/Flight/tests/IntegrationTest/Flight/Features/GetFlightByIdTests.cs index bf2bd27..bbdf616 100644 --- a/src/Services/Flight/tests/IntegrationTest/Flight/Features/GetFlightByIdTests.cs +++ b/src/Services/Flight/tests/IntegrationTest/Flight/Features/GetFlightByIdTests.cs @@ -14,7 +14,7 @@ namespace Integration.Test.Flight.Features; public class GetFlightByIdTests : FlightIntegrationTestBase { public GetFlightByIdTests( - TestFactory integrationTestFactory) : base(integrationTestFactory) + TestFixture integrationTestFactory) : base(integrationTestFactory) { } diff --git a/src/Services/Flight/tests/IntegrationTest/Flight/Features/UpdateFlightTests.cs b/src/Services/Flight/tests/IntegrationTest/Flight/Features/UpdateFlightTests.cs index e791194..e625e00 100644 --- a/src/Services/Flight/tests/IntegrationTest/Flight/Features/UpdateFlightTests.cs +++ b/src/Services/Flight/tests/IntegrationTest/Flight/Features/UpdateFlightTests.cs @@ -13,7 +13,7 @@ namespace Integration.Test.Flight.Features; public class UpdateFlightTests : FlightIntegrationTestBase { public UpdateFlightTests( - TestFactory integrationTestFactory) : base(integrationTestFactory) + TestFixture integrationTestFactory) : base(integrationTestFactory) { } diff --git a/src/Services/Flight/tests/IntegrationTest/FlightIntegrationTestBase.cs b/src/Services/Flight/tests/IntegrationTest/FlightIntegrationTestBase.cs index 3d805e5..af50f33 100644 --- a/src/Services/Flight/tests/IntegrationTest/FlightIntegrationTestBase.cs +++ b/src/Services/Flight/tests/IntegrationTest/FlightIntegrationTestBase.cs @@ -8,13 +8,13 @@ namespace Integration.Test; [Collection(IntegrationTestCollection.Name)] public class FlightIntegrationTestBase: TestBase { - public FlightIntegrationTestBase(TestFactory integrationTestFixture) : base(integrationTestFixture) + public FlightIntegrationTestBase(TestFixture integrationTestFixture) : base(integrationTestFixture) { } } [CollectionDefinition(Name)] -public class IntegrationTestCollection : ICollectionFixture> +public class IntegrationTestCollection : ICollectionFixture> { public const string Name = "Flight Integration Test"; } diff --git a/src/Services/Flight/tests/IntegrationTest/Seat/Features/GetAvailableSeatsTests.cs b/src/Services/Flight/tests/IntegrationTest/Seat/Features/GetAvailableSeatsTests.cs index 7836376..a7d90b1 100644 --- a/src/Services/Flight/tests/IntegrationTest/Seat/Features/GetAvailableSeatsTests.cs +++ b/src/Services/Flight/tests/IntegrationTest/Seat/Features/GetAvailableSeatsTests.cs @@ -14,7 +14,7 @@ namespace Integration.Test.Seat.Features; public class GetAvailableSeatsTests : FlightIntegrationTestBase { public GetAvailableSeatsTests( - TestFactory integrationTestFactory) : base(integrationTestFactory) + TestFixture integrationTestFactory) : base(integrationTestFactory) { } diff --git a/src/Services/Flight/tests/IntegrationTest/Seat/Features/ReserveSeatTests.cs b/src/Services/Flight/tests/IntegrationTest/Seat/Features/ReserveSeatTests.cs index 9b806e5..f3b7658 100644 --- a/src/Services/Flight/tests/IntegrationTest/Seat/Features/ReserveSeatTests.cs +++ b/src/Services/Flight/tests/IntegrationTest/Seat/Features/ReserveSeatTests.cs @@ -14,7 +14,7 @@ namespace Integration.Test.Seat.Features; public class ReserveSeatTests : FlightIntegrationTestBase { public ReserveSeatTests( - TestFactory integrationTestFactory) : base(integrationTestFactory) + TestFixture integrationTestFactory) : base(integrationTestFactory) { } diff --git a/src/Services/Identity/tests/IntegrationTest/Identity/Features/RegisterNewUserTests.cs b/src/Services/Identity/tests/IntegrationTest/Identity/Features/RegisterNewUserTests.cs index e0aa17e..dfc34a4 100644 --- a/src/Services/Identity/tests/IntegrationTest/Identity/Features/RegisterNewUserTests.cs +++ b/src/Services/Identity/tests/IntegrationTest/Identity/Features/RegisterNewUserTests.cs @@ -12,7 +12,7 @@ namespace Integration.Test.Identity.Features; public class RegisterNewUserTests : IdentityIntegrationTestBase { public RegisterNewUserTests( - TestFactory integrationTestFactory) : base(integrationTestFactory) + TestWriteFixture integrationTestFactory) : base(integrationTestFactory) { } diff --git a/src/Services/Identity/tests/IntegrationTest/IdentityIntegrationTestBase.cs b/src/Services/Identity/tests/IntegrationTest/IdentityIntegrationTestBase.cs index 8aaca45..a60e96f 100644 --- a/src/Services/Identity/tests/IntegrationTest/IdentityIntegrationTestBase.cs +++ b/src/Services/Identity/tests/IntegrationTest/IdentityIntegrationTestBase.cs @@ -6,16 +6,16 @@ using Xunit; namespace Integration.Test; [Collection(IntegrationTestCollection.Name)] -public class IdentityIntegrationTestBase: TestBase +public class IdentityIntegrationTestBase: TestWriteBase { - public IdentityIntegrationTestBase(TestFactory integrationTestFactory) + public IdentityIntegrationTestBase(TestWriteFixture integrationTestFactory) : base(integrationTestFactory) { } } [CollectionDefinition(Name)] -public class IntegrationTestCollection : ICollectionFixture> +public class IntegrationTestCollection : ICollectionFixture> { public const string Name = "Identity Integration Test"; } diff --git a/src/Services/Passenger/tests/IntegrationTest/Passenger/Features/CompleteRegisterPassengerTests.cs b/src/Services/Passenger/tests/IntegrationTest/Passenger/Features/CompleteRegisterPassengerTests.cs index 59aad6a..2a0ef4b 100644 --- a/src/Services/Passenger/tests/IntegrationTest/Passenger/Features/CompleteRegisterPassengerTests.cs +++ b/src/Services/Passenger/tests/IntegrationTest/Passenger/Features/CompleteRegisterPassengerTests.cs @@ -12,7 +12,7 @@ namespace Integration.Test.Passenger.Features; public class CompleteRegisterPassengerTests : PassengerIntegrationTestBase { public CompleteRegisterPassengerTests( - TestFactory integrationTestFactory) : base(integrationTestFactory) + TestWriteFixture integrationTestFactory) : base(integrationTestFactory) { } diff --git a/src/Services/Passenger/tests/IntegrationTest/Passenger/Features/GetPassengerByIdTests.cs b/src/Services/Passenger/tests/IntegrationTest/Passenger/Features/GetPassengerByIdTests.cs index 95d194d..71a168d 100644 --- a/src/Services/Passenger/tests/IntegrationTest/Passenger/Features/GetPassengerByIdTests.cs +++ b/src/Services/Passenger/tests/IntegrationTest/Passenger/Features/GetPassengerByIdTests.cs @@ -13,7 +13,7 @@ namespace Integration.Test.Passenger.Features; public class GetPassengerByIdTests : PassengerIntegrationTestBase { public GetPassengerByIdTests( - TestFactory integrationTestFactory) : base(integrationTestFactory) + TestWriteFixture integrationTestFactory) : base(integrationTestFactory) { } diff --git a/src/Services/Passenger/tests/IntegrationTest/PassengerIntegrationTestBase.cs b/src/Services/Passenger/tests/IntegrationTest/PassengerIntegrationTestBase.cs index 23609a1..33d4e92 100644 --- a/src/Services/Passenger/tests/IntegrationTest/PassengerIntegrationTestBase.cs +++ b/src/Services/Passenger/tests/IntegrationTest/PassengerIntegrationTestBase.cs @@ -6,16 +6,16 @@ using Xunit; namespace Integration.Test; [Collection(IntegrationTestCollection.Name)] -public class PassengerIntegrationTestBase: TestBase +public class PassengerIntegrationTestBase: TestWriteBase { - public PassengerIntegrationTestBase(TestFactory integrationTestFactory) + public PassengerIntegrationTestBase(TestWriteFixture integrationTestFactory) : base(integrationTestFactory) { } } [CollectionDefinition(Name)] -public class IntegrationTestCollection : ICollectionFixture> +public class IntegrationTestCollection : ICollectionFixture> { public const string Name = "Passenger Integration Test"; }