fix bug booking test

This commit is contained in:
meysamhadeli 2022-08-04 02:22:55 +04:30
parent d4ae8b3568
commit b40c8ee2ce
5 changed files with 39 additions and 16 deletions

View File

@ -2,7 +2,6 @@
using BuildingBlocks.Core.Event; using BuildingBlocks.Core.Event;
using BuildingBlocks.Core.Model; using BuildingBlocks.Core.Model;
using BuildingBlocks.EFCore; using BuildingBlocks.EFCore;
using BuildingBlocks.EventStoreDB.Projections;
using BuildingBlocks.MassTransit; using BuildingBlocks.MassTransit;
using BuildingBlocks.Mongo; using BuildingBlocks.Mongo;
using BuildingBlocks.PersistMessageProcessor; using BuildingBlocks.PersistMessageProcessor;
@ -51,7 +50,6 @@ public class IntegrationTestFixture<TEntryPoint> : IAsyncLifetime
{ {
TestRegistrationServices?.Invoke(services); TestRegistrationServices?.Invoke(services);
services.ReplaceSingleton(AddHttpContextAccessorMock); services.ReplaceSingleton(AddHttpContextAccessorMock);
services.Unregister<IProjectionProcessor>();
services.AddMassTransitTestHarness(x => services.AddMassTransitTestHarness(x =>
{ {
x.UsingRabbitMq((context, cfg) => x.UsingRabbitMq((context, cfg) =>
@ -327,6 +325,17 @@ public class IntegrationTestFixtureCore<TEntryPoint> : IAsyncLifetime
private Checkpoint _checkpointPersistMessageDB; private Checkpoint _checkpointPersistMessageDB;
private MongoDbRunner _mongoRunner; private MongoDbRunner _mongoRunner;
private string MongoConnectionString
{
get => Fixture.ServiceProvider.GetRequiredService<IOptions<MongoOptions>>()?.Value?.ConnectionString;
set => Fixture.ServiceProvider.GetRequiredService<IOptions<MongoOptions>>().Value.ConnectionString = value;
}
private string PersistConnectionString => Fixture.ServiceProvider
.GetRequiredService<IOptions<PersistMessageOptions>>()?.Value.ConnectionString;
private string DefaultConnectionString => Fixture.Configuration?.GetConnectionString("DefaultConnection");
public IntegrationTestFixtureCore(IntegrationTestFixture<TEntryPoint> integrationTestFixture) public IntegrationTestFixtureCore(IntegrationTestFixture<TEntryPoint> integrationTestFixture)
{ {
Fixture = integrationTestFixture; Fixture = integrationTestFixture;
@ -341,17 +350,21 @@ public class IntegrationTestFixtureCore<TEntryPoint> : IAsyncLifetime
_checkpointPersistMessageDB = new Checkpoint {TablesToIgnore = new[] {"__EFMigrationsHistory"}}; _checkpointPersistMessageDB = new Checkpoint {TablesToIgnore = new[] {"__EFMigrationsHistory"}};
_mongoRunner = MongoDbRunner.Start(); _mongoRunner = MongoDbRunner.Start();
var mongoOptions = Fixture.ServiceProvider.GetRequiredService<IOptions<MongoOptions>>();
if (mongoOptions.Value.ConnectionString != null) if (MongoConnectionString != null)
mongoOptions.Value.ConnectionString = _mongoRunner.ConnectionString; MongoConnectionString = _mongoRunner.ConnectionString;
await SeedDataAsync(); await SeedDataAsync();
} }
public async Task DisposeAsync() public async Task DisposeAsync()
{ {
await _checkpointDefaultDB.Reset(Fixture.Configuration?.GetConnectionString("DefaultConnection")); if (!string.IsNullOrEmpty(DefaultConnectionString))
await _checkpointPersistMessageDB.Reset(Fixture.ServiceProvider.GetRequiredService<IOptions<PersistMessageOptions>>()?.Value?.ConnectionString); await _checkpointDefaultDB.Reset(DefaultConnectionString);
if (!string.IsNullOrEmpty(PersistConnectionString))
await _checkpointPersistMessageDB.Reset(PersistConnectionString);
_mongoRunner.Dispose(); _mongoRunner.Dispose();
} }

View File

@ -6,9 +6,6 @@
"Microsoft.AspNetCore": "Warning" "Microsoft.AspNetCore": "Warning"
} }
}, },
"ConnectionStrings": {
"DefaultConnection": "Server=db;Database=BookingDB;User ID=sa;Password=@Aa123456"
},
"RabbitMq": { "RabbitMq": {
"HostName": "rabbitmq", "HostName": "rabbitmq",
"ExchangeName": "booking", "ExchangeName": "booking",

View File

@ -1,7 +1,4 @@
{ {
"ConnectionStrings": {
"DefaultConnection": "Server=.\\sqlexpress;Database=BookingDB_Test;Trusted_Connection=True;MultipleActiveResultSets=true"
},
"RabbitMq": { "RabbitMq": {
"HostName": "localhost", "HostName": "localhost",
"ExchangeName": "booking", "ExchangeName": "booking",
@ -24,5 +21,8 @@
"MongoOptions": { "MongoOptions": {
"ConnectionString": "mongodb://localhost:27017", "ConnectionString": "mongodb://localhost:27017",
"DatabaseName": "booking-db-test" "DatabaseName": "booking-db-test"
},
"EventStore": {
"ConnectionString": "esdb://localhost:2113?tls=false"
} }
} }

View File

@ -3,6 +3,7 @@ using Booking.Booking.Events.Domain;
using Booking.Booking.Exceptions; using Booking.Booking.Exceptions;
using Booking.Booking.Models.ValueObjects; using Booking.Booking.Models.ValueObjects;
using BuildingBlocks.Contracts.Grpc; using BuildingBlocks.Contracts.Grpc;
using BuildingBlocks.Core;
using BuildingBlocks.Core.CQRS; using BuildingBlocks.Core.CQRS;
using BuildingBlocks.EventStoreDB.Repository; using BuildingBlocks.EventStoreDB.Repository;
using BuildingBlocks.Utils; using BuildingBlocks.Utils;
@ -14,17 +15,20 @@ public class CreateBookingCommandHandler : ICommandHandler<CreateBookingCommand,
private readonly IEventStoreDBRepository<Models.Booking> _eventStoreDbRepository; private readonly IEventStoreDBRepository<Models.Booking> _eventStoreDbRepository;
private readonly IFlightGrpcService _flightGrpcService; private readonly IFlightGrpcService _flightGrpcService;
private readonly ICurrentUserProvider _currentUserProvider; private readonly ICurrentUserProvider _currentUserProvider;
private readonly IEventDispatcher _eventDispatcher;
private readonly IPassengerGrpcService _passengerGrpcService; private readonly IPassengerGrpcService _passengerGrpcService;
public CreateBookingCommandHandler(IEventStoreDBRepository<Models.Booking> eventStoreDbRepository, public CreateBookingCommandHandler(IEventStoreDBRepository<Models.Booking> eventStoreDbRepository,
IPassengerGrpcService passengerGrpcService, IPassengerGrpcService passengerGrpcService,
IFlightGrpcService flightGrpcService, IFlightGrpcService flightGrpcService,
ICurrentUserProvider currentUserProvider) ICurrentUserProvider currentUserProvider,
IEventDispatcher eventDispatcher)
{ {
_eventStoreDbRepository = eventStoreDbRepository; _eventStoreDbRepository = eventStoreDbRepository;
_passengerGrpcService = passengerGrpcService; _passengerGrpcService = passengerGrpcService;
_flightGrpcService = flightGrpcService; _flightGrpcService = flightGrpcService;
_currentUserProvider = currentUserProvider; _currentUserProvider = currentUserProvider;
_eventDispatcher = eventDispatcher;
} }
public async Task<ulong> Handle(CreateBookingCommand command, public async Task<ulong> Handle(CreateBookingCommand command,
@ -51,6 +55,8 @@ public class CreateBookingCommandHandler : ICommandHandler<CreateBookingCommand,
flight.ArriveAirportId, flight.FlightDate, flight.Price, command.Description, emptySeat?.SeatNumber), flight.ArriveAirportId, flight.FlightDate, flight.Price, command.Description, emptySeat?.SeatNumber),
false, _currentUserProvider.GetCurrentUserId()); false, _currentUserProvider.GetCurrentUserId());
await _eventDispatcher.SendAsync(aggrigate.DomainEvents, cancellationToken: cancellationToken);
await _flightGrpcService.ReserveSeat(new ReserveSeatRequestDto await _flightGrpcService.ReserveSeat(new ReserveSeatRequestDto
{ {
FlightId = flight.FlightId, SeatNumber = emptySeat?.SeatNumber FlightId = flight.FlightId, SeatNumber = emptySeat?.SeatNumber

View File

@ -3,12 +3,15 @@ using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Booking.Booking.Models.Reads; using Booking.Booking.Models.Reads;
using Booking.Data; using Booking.Data;
using BuildingBlocks.Contracts.EventBus.Messages;
using BuildingBlocks.Contracts.Grpc; using BuildingBlocks.Contracts.Grpc;
using BuildingBlocks.PersistMessageProcessor.Data; using BuildingBlocks.PersistMessageProcessor.Data;
using BuildingBlocks.TestBase; using BuildingBlocks.TestBase;
using FluentAssertions; using FluentAssertions;
using Integration.Test.Fakes; using Integration.Test.Fakes;
using MagicOnion; using MagicOnion;
using MassTransit;
using MassTransit.Testing;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.Extensions.DependencyInjection.Extensions;
using NSubstitute; using NSubstitute;
@ -18,10 +21,12 @@ namespace Integration.Test.Booking.Features;
public class CreateBookingTests : IntegrationTestBase<Program, PersistMessageDbContext, BookingReadDbContext> public class CreateBookingTests : IntegrationTestBase<Program, PersistMessageDbContext, BookingReadDbContext>
{ {
private readonly ITestHarness _testHarness;
public CreateBookingTests( public CreateBookingTests(
IntegrationTestFixture<Program, PersistMessageDbContext, BookingReadDbContext> integrationTestFixture) : base( IntegrationTestFixture<Program, PersistMessageDbContext, BookingReadDbContext> integrationTestFixture) : base(
integrationTestFixture) integrationTestFixture)
{ {
_testHarness = Fixture.TestHarness;
} }
protected override void RegisterTestsServices(IServiceCollection services) protected override void RegisterTestsServices(IServiceCollection services)
@ -42,6 +47,8 @@ public class CreateBookingTests : IntegrationTestBase<Program, PersistMessageDbC
// Assert // Assert
response.Should().BeGreaterOrEqualTo(0); response.Should().BeGreaterOrEqualTo(0);
(await _testHarness.Published.Any<Fault<BookingCreated>>()).Should().BeFalse();
(await _testHarness.Published.Any<BookingCreated>()).Should().BeTrue();
} }