mirror of
https://github.com/meysamhadeli/booking-microservices.git
synced 2026-04-15 05:25:36 +08:00
commit
f3cad79640
@ -32,7 +32,7 @@ using ILogger = Serilog.ILogger;
|
||||
|
||||
namespace BuildingBlocks.TestBase;
|
||||
|
||||
public class TestFactory<TEntryPoint> : IAsyncLifetime
|
||||
public class TestFixture<TEntryPoint> : IAsyncLifetime
|
||||
where TEntryPoint : class
|
||||
{
|
||||
private readonly WebApplicationFactory<TEntryPoint> _factory;
|
||||
@ -51,7 +51,7 @@ public class TestFactory<TEntryPoint> : IAsyncLifetime
|
||||
public IConfiguration Configuration => _factory?.Services.GetRequiredService<IConfiguration>();
|
||||
public ILogger Logger { get; set; }
|
||||
|
||||
public TestFactory()
|
||||
public TestFixture()
|
||||
{
|
||||
_factory = new WebApplicationFactory<TEntryPoint>()
|
||||
.WithWebHostBuilder(builder =>
|
||||
@ -258,7 +258,7 @@ public class TestFactory<TEntryPoint> : IAsyncLifetime
|
||||
}
|
||||
}
|
||||
|
||||
public class TestFactory<TEntryPoint, TWContext> : TestFactory<TEntryPoint>
|
||||
public class TestWriteFixture<TEntryPoint, TWContext> : TestFixture<TEntryPoint>
|
||||
where TEntryPoint : class
|
||||
where TWContext : DbContext
|
||||
{
|
||||
@ -365,7 +365,23 @@ public class TestFactory<TEntryPoint, TWContext> : TestFactory<TEntryPoint>
|
||||
}
|
||||
}
|
||||
|
||||
public class TestFactory<TEntryPoint, TWContext, TRContext> : TestFactory<TEntryPoint, TWContext>
|
||||
|
||||
public class TestReadFixture<TEntryPoint, TRContext> : TestFixture<TEntryPoint>
|
||||
where TEntryPoint : class
|
||||
where TRContext : MongoDbContext
|
||||
{
|
||||
public Task ExecuteReadContextAsync(Func<TRContext, Task> action)
|
||||
{
|
||||
return ExecuteScopeAsync(sp => action(sp.GetRequiredService<TRContext>()));
|
||||
}
|
||||
|
||||
public Task<T> ExecuteReadContextAsync<T>(Func<TRContext, Task<T>> action)
|
||||
{
|
||||
return ExecuteScopeAsync(sp => action(sp.GetRequiredService<TRContext>()));
|
||||
}
|
||||
}
|
||||
|
||||
public class TestFixture<TEntryPoint, TWContext, TRContext> : TestWriteFixture<TEntryPoint, TWContext>
|
||||
where TEntryPoint : class
|
||||
where TWContext : DbContext
|
||||
where TRContext : MongoDbContext
|
||||
@ -389,14 +405,14 @@ public class TestFixtureCore<TEntryPoint> : IAsyncLifetime
|
||||
private SqlConnection DefaultDbConnection { get; set; }
|
||||
private SqlConnection PersistDbConnection { get; set; }
|
||||
|
||||
public TestFixtureCore(TestFactory<TEntryPoint> integrationTestFixture, ITestOutputHelper outputHelper)
|
||||
public TestFixtureCore(TestFixture<TEntryPoint> integrationTestFixture, ITestOutputHelper outputHelper)
|
||||
{
|
||||
Fixture = integrationTestFixture;
|
||||
integrationTestFixture.RegisterServices(services => RegisterTestsServices(services));
|
||||
integrationTestFixture.Logger = integrationTestFixture.CreateLogger(outputHelper);
|
||||
}
|
||||
|
||||
public TestFactory<TEntryPoint> Fixture { get; }
|
||||
public TestFixture<TEntryPoint> Fixture { get; }
|
||||
|
||||
|
||||
public async Task InitializeAsync()
|
||||
@ -487,18 +503,33 @@ public class TestFixtureCore<TEntryPoint> : IAsyncLifetime
|
||||
}
|
||||
}
|
||||
|
||||
public abstract class TestBase<TEntryPoint, TWContext> : TestFixtureCore<TEntryPoint>
|
||||
public abstract class TestReadBase<TEntryPoint, TRContext> : TestFixtureCore<TEntryPoint>
|
||||
//,IClassFixture<IntegrationTestFactory<TEntryPoint, TWContext>>
|
||||
where TEntryPoint : class
|
||||
where TWContext : DbContext
|
||||
where TRContext : MongoDbContext
|
||||
{
|
||||
protected TestBase(
|
||||
TestFactory<TEntryPoint, TWContext> integrationTestFixture, ITestOutputHelper outputHelper = null) : base(integrationTestFixture, outputHelper)
|
||||
protected TestReadBase(
|
||||
TestReadFixture<TEntryPoint, TRContext> integrationTestFixture, ITestOutputHelper outputHelper = null) : base(integrationTestFixture, outputHelper)
|
||||
{
|
||||
Fixture = integrationTestFixture;
|
||||
}
|
||||
|
||||
public TestFactory<TEntryPoint, TWContext> Fixture { get; }
|
||||
public TestReadFixture<TEntryPoint, TRContext> Fixture { get; }
|
||||
}
|
||||
|
||||
|
||||
public abstract class TestWriteBase<TEntryPoint, TWContext> : TestFixtureCore<TEntryPoint>
|
||||
//,IClassFixture<IntegrationTestFactory<TEntryPoint, TWContext>>
|
||||
where TEntryPoint : class
|
||||
where TWContext : DbContext
|
||||
{
|
||||
protected TestWriteBase(
|
||||
TestWriteFixture<TEntryPoint, TWContext> integrationTestFixture, ITestOutputHelper outputHelper = null) : base(integrationTestFixture, outputHelper)
|
||||
{
|
||||
Fixture = integrationTestFixture;
|
||||
}
|
||||
|
||||
public TestWriteFixture<TEntryPoint, TWContext> Fixture { get; }
|
||||
}
|
||||
|
||||
public abstract class TestBase<TEntryPoint, TWContext, TRContext> : TestFixtureCore<TEntryPoint>
|
||||
@ -508,10 +539,10 @@ public abstract class TestBase<TEntryPoint, TWContext, TRContext> : TestFixtureC
|
||||
where TRContext : MongoDbContext
|
||||
{
|
||||
protected TestBase(
|
||||
TestFactory<TEntryPoint, TWContext, TRContext> integrationTestFixture, ITestOutputHelper outputHelper = null) : base(integrationTestFixture, outputHelper)
|
||||
TestFixture<TEntryPoint, TWContext, TRContext> integrationTestFixture, ITestOutputHelper outputHelper = null) : base(integrationTestFixture, outputHelper)
|
||||
{
|
||||
Fixture = integrationTestFixture;
|
||||
}
|
||||
|
||||
public TestFactory<TEntryPoint, TWContext, TRContext> Fixture { get; }
|
||||
public TestFixture<TEntryPoint, TWContext, TRContext> Fixture { get; }
|
||||
}
|
||||
|
||||
@ -23,7 +23,8 @@ namespace Integration.Test.Booking.Features;
|
||||
|
||||
public class CreateBookingTests : BookingIntegrationTestBase
|
||||
{
|
||||
public CreateBookingTests(TestFactory<Program, AppDbContextBase, BookingReadDbContext> integrationTestFixture) : base(integrationTestFixture)
|
||||
public CreateBookingTests(TestReadFixture<Program, BookingReadDbContext> 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<BookingCreated>()).Should().Be(true);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Console.WriteLine(e);
|
||||
throw;
|
||||
}
|
||||
// Assert
|
||||
response.Should().BeGreaterOrEqualTo(0);
|
||||
|
||||
(await Fixture.WaitForPublishing<BookingCreated>()).Should().Be(true);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -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<Program, AppDbContextBase, BookingReadDbContext>
|
||||
public class BookingIntegrationTestBase: TestReadBase<Program, BookingReadDbContext>
|
||||
{
|
||||
public BookingIntegrationTestBase(TestFactory<Program, AppDbContextBase, BookingReadDbContext> integrationTestFixture) : base(integrationTestFixture)
|
||||
public BookingIntegrationTestBase(TestReadFixture<Program, BookingReadDbContext> integrationTestFixture) : base(integrationTestFixture)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
[CollectionDefinition(Name)]
|
||||
public class IntegrationTestCollection : ICollectionFixture<TestFactory<Program, AppDbContextBase, BookingReadDbContext>>
|
||||
public class IntegrationTestCollection : ICollectionFixture<TestReadFixture<Program, BookingReadDbContext>>
|
||||
{
|
||||
public const string Name = "Booking Integration Test";
|
||||
}
|
||||
|
||||
@ -12,7 +12,7 @@ namespace EndToEnd.Test.Flight.Features;
|
||||
|
||||
public class CreateFlightTests : FlightEndToEndTestBase
|
||||
{
|
||||
public CreateFlightTests(TestFactory<Program, FlightDbContext, FlightReadDbContext> integrationTestFixture) : base(integrationTestFixture)
|
||||
public CreateFlightTests(TestFixture<Program, FlightDbContext, FlightReadDbContext> integrationTestFixture) : base(integrationTestFixture)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@ -12,7 +12,7 @@ namespace EndToEnd.Test.Flight.Features;
|
||||
|
||||
public class GetFlightByIdTests: FlightEndToEndTestBase
|
||||
{
|
||||
public GetFlightByIdTests(TestFactory<Program, FlightDbContext, FlightReadDbContext> integrationTestFixture) : base(integrationTestFixture)
|
||||
public GetFlightByIdTests(TestFixture<Program, FlightDbContext, FlightReadDbContext> integrationTestFixture) : base(integrationTestFixture)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@ -8,13 +8,13 @@ namespace EndToEnd.Test;
|
||||
[Collection(EndToEndTestCollection.Name)]
|
||||
public class FlightEndToEndTestBase: TestBase<Program, FlightDbContext, FlightReadDbContext>
|
||||
{
|
||||
public FlightEndToEndTestBase(TestFactory<Program, FlightDbContext, FlightReadDbContext> integrationTestFixture) : base(integrationTestFixture)
|
||||
public FlightEndToEndTestBase(TestFixture<Program, FlightDbContext, FlightReadDbContext> integrationTestFixture) : base(integrationTestFixture)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
[CollectionDefinition(Name)]
|
||||
public class EndToEndTestCollection : ICollectionFixture<TestFactory<Program, FlightDbContext, FlightReadDbContext>>
|
||||
public class EndToEndTestCollection : ICollectionFixture<TestFixture<Program, FlightDbContext, FlightReadDbContext>>
|
||||
{
|
||||
public const string Name = "Flight EndToEnd Test";
|
||||
}
|
||||
|
||||
@ -13,7 +13,7 @@ namespace Integration.Test.Aircraft.Features;
|
||||
public class CreateAircraftTests : FlightIntegrationTestBase
|
||||
{
|
||||
public CreateAircraftTests(
|
||||
TestFactory<Program, FlightDbContext, FlightReadDbContext> integrationTestFactory) : base(integrationTestFactory)
|
||||
TestFixture<Program, FlightDbContext, FlightReadDbContext> integrationTestFactory) : base(integrationTestFactory)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@ -13,7 +13,7 @@ namespace Integration.Test.Airport.Features;
|
||||
public class CreateAirportTests : FlightIntegrationTestBase
|
||||
{
|
||||
public CreateAirportTests(
|
||||
TestFactory<Program, FlightDbContext, FlightReadDbContext> integrationTestFactory) : base(integrationTestFactory)
|
||||
TestFixture<Program, FlightDbContext, FlightReadDbContext> integrationTestFactory) : base(integrationTestFactory)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@ -13,7 +13,7 @@ namespace Integration.Test.Flight.Features;
|
||||
public class CreateFlightTests : FlightIntegrationTestBase
|
||||
{
|
||||
public CreateFlightTests(
|
||||
TestFactory<Program, FlightDbContext, FlightReadDbContext> integrationTestFactory) : base(integrationTestFactory)
|
||||
TestFixture<Program, FlightDbContext, FlightReadDbContext> integrationTestFactory) : base(integrationTestFactory)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@ -15,7 +15,7 @@ namespace Integration.Test.Flight.Features;
|
||||
public class DeleteFlightTests : FlightIntegrationTestBase
|
||||
{
|
||||
public DeleteFlightTests(
|
||||
TestFactory<Program, FlightDbContext, FlightReadDbContext> integrationTestFactory) : base(integrationTestFactory)
|
||||
TestFixture<Program, FlightDbContext, FlightReadDbContext> integrationTestFactory) : base(integrationTestFactory)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@ -14,7 +14,7 @@ namespace Integration.Test.Flight.Features;
|
||||
public class GetAvailableFlightsTests : FlightIntegrationTestBase
|
||||
{
|
||||
public GetAvailableFlightsTests(
|
||||
TestFactory<Program, FlightDbContext, FlightReadDbContext> integrationTestFactory) : base(integrationTestFactory)
|
||||
TestFixture<Program, FlightDbContext, FlightReadDbContext> integrationTestFactory) : base(integrationTestFactory)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@ -14,7 +14,7 @@ namespace Integration.Test.Flight.Features;
|
||||
public class GetFlightByIdTests : FlightIntegrationTestBase
|
||||
{
|
||||
public GetFlightByIdTests(
|
||||
TestFactory<Program, FlightDbContext, FlightReadDbContext> integrationTestFactory) : base(integrationTestFactory)
|
||||
TestFixture<Program, FlightDbContext, FlightReadDbContext> integrationTestFactory) : base(integrationTestFactory)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@ -13,7 +13,7 @@ namespace Integration.Test.Flight.Features;
|
||||
public class UpdateFlightTests : FlightIntegrationTestBase
|
||||
{
|
||||
public UpdateFlightTests(
|
||||
TestFactory<Program, FlightDbContext, FlightReadDbContext> integrationTestFactory) : base(integrationTestFactory)
|
||||
TestFixture<Program, FlightDbContext, FlightReadDbContext> integrationTestFactory) : base(integrationTestFactory)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@ -8,13 +8,13 @@ namespace Integration.Test;
|
||||
[Collection(IntegrationTestCollection.Name)]
|
||||
public class FlightIntegrationTestBase: TestBase<Program, FlightDbContext, FlightReadDbContext>
|
||||
{
|
||||
public FlightIntegrationTestBase(TestFactory<Program, FlightDbContext, FlightReadDbContext> integrationTestFixture) : base(integrationTestFixture)
|
||||
public FlightIntegrationTestBase(TestFixture<Program, FlightDbContext, FlightReadDbContext> integrationTestFixture) : base(integrationTestFixture)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
[CollectionDefinition(Name)]
|
||||
public class IntegrationTestCollection : ICollectionFixture<TestFactory<Program, FlightDbContext, FlightReadDbContext>>
|
||||
public class IntegrationTestCollection : ICollectionFixture<TestFixture<Program, FlightDbContext, FlightReadDbContext>>
|
||||
{
|
||||
public const string Name = "Flight Integration Test";
|
||||
}
|
||||
|
||||
@ -14,7 +14,7 @@ namespace Integration.Test.Seat.Features;
|
||||
public class GetAvailableSeatsTests : FlightIntegrationTestBase
|
||||
{
|
||||
public GetAvailableSeatsTests(
|
||||
TestFactory<Program, FlightDbContext, FlightReadDbContext> integrationTestFactory) : base(integrationTestFactory)
|
||||
TestFixture<Program, FlightDbContext, FlightReadDbContext> integrationTestFactory) : base(integrationTestFactory)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@ -14,7 +14,7 @@ namespace Integration.Test.Seat.Features;
|
||||
public class ReserveSeatTests : FlightIntegrationTestBase
|
||||
{
|
||||
public ReserveSeatTests(
|
||||
TestFactory<Program, FlightDbContext, FlightReadDbContext> integrationTestFactory) : base(integrationTestFactory)
|
||||
TestFixture<Program, FlightDbContext, FlightReadDbContext> integrationTestFactory) : base(integrationTestFactory)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@ -12,7 +12,7 @@ namespace Integration.Test.Identity.Features;
|
||||
public class RegisterNewUserTests : IdentityIntegrationTestBase
|
||||
{
|
||||
public RegisterNewUserTests(
|
||||
TestFactory<Program, IdentityContext> integrationTestFactory) : base(integrationTestFactory)
|
||||
TestWriteFixture<Program, IdentityContext> integrationTestFactory) : base(integrationTestFactory)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@ -6,16 +6,16 @@ using Xunit;
|
||||
namespace Integration.Test;
|
||||
|
||||
[Collection(IntegrationTestCollection.Name)]
|
||||
public class IdentityIntegrationTestBase: TestBase<Program, IdentityContext>
|
||||
public class IdentityIntegrationTestBase: TestWriteBase<Program, IdentityContext>
|
||||
{
|
||||
public IdentityIntegrationTestBase(TestFactory<Program, IdentityContext> integrationTestFactory)
|
||||
public IdentityIntegrationTestBase(TestWriteFixture<Program, IdentityContext> integrationTestFactory)
|
||||
: base(integrationTestFactory)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
[CollectionDefinition(Name)]
|
||||
public class IntegrationTestCollection : ICollectionFixture<TestFactory<Program, IdentityContext>>
|
||||
public class IntegrationTestCollection : ICollectionFixture<TestWriteFixture<Program, IdentityContext>>
|
||||
{
|
||||
public const string Name = "Identity Integration Test";
|
||||
}
|
||||
|
||||
@ -12,7 +12,7 @@ namespace Integration.Test.Passenger.Features;
|
||||
public class CompleteRegisterPassengerTests : PassengerIntegrationTestBase
|
||||
{
|
||||
public CompleteRegisterPassengerTests(
|
||||
TestFactory<Program, PassengerDbContext> integrationTestFactory) : base(integrationTestFactory)
|
||||
TestWriteFixture<Program, PassengerDbContext> integrationTestFactory) : base(integrationTestFactory)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@ -13,7 +13,7 @@ namespace Integration.Test.Passenger.Features;
|
||||
public class GetPassengerByIdTests : PassengerIntegrationTestBase
|
||||
{
|
||||
public GetPassengerByIdTests(
|
||||
TestFactory<Program, PassengerDbContext> integrationTestFactory) : base(integrationTestFactory)
|
||||
TestWriteFixture<Program, PassengerDbContext> integrationTestFactory) : base(integrationTestFactory)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@ -6,16 +6,16 @@ using Xunit;
|
||||
namespace Integration.Test;
|
||||
|
||||
[Collection(IntegrationTestCollection.Name)]
|
||||
public class PassengerIntegrationTestBase: TestBase<Program, PassengerDbContext>
|
||||
public class PassengerIntegrationTestBase: TestWriteBase<Program, PassengerDbContext>
|
||||
{
|
||||
public PassengerIntegrationTestBase(TestFactory<Program, PassengerDbContext> integrationTestFactory)
|
||||
public PassengerIntegrationTestBase(TestWriteFixture<Program, PassengerDbContext> integrationTestFactory)
|
||||
: base(integrationTestFactory)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
[CollectionDefinition(Name)]
|
||||
public class IntegrationTestCollection : ICollectionFixture<TestFactory<Program, PassengerDbContext>>
|
||||
public class IntegrationTestCollection : ICollectionFixture<TestWriteFixture<Program, PassengerDbContext>>
|
||||
{
|
||||
public const string Name = "Passenger Integration Test";
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user