public ProcessManagerHandlerTests()
        {
            TestLogger.Configure();

            var source = new TaskCompletionSource <bool>();

            _nodeStarted = source.Task;

            var notListening = new IPEndPoint(IPAddress.None, 0);

            _node = EmbeddedVNodeBuilder.AsSingleNode()
                    .WithInternalTcpOn(notListening)
                    .WithExternalTcpOn(notListening)
                    .WithInternalHttpOn(notListening)
                    .WithExternalHttpOn(notListening);

            _node.NodeStatusChanged += (_, e) =>
            {
                if (e.NewVNodeState != VNodeState.Master)
                {
                    return;
                }

                source.SetResult(true);
            };

            _node.Start();

            _connection = EmbeddedEventStoreConnection.Create(_node);

            _commands = new List <object>();

            _serializer = new DefaultGetEventStoreJsonSerializer();

            var commandHandlerModule = new CommandHandlerModule();

            commandHandlerModule.For <ShipOrder>()
            .Handle((message, _) =>
            {
                _commands.Add(message.Command);
                return(Task.FromResult(0));
            });
            commandHandlerModule.For <BillCustomer>()
            .Handle((message, _) =>
            {
                _commands.Add(message.Command);
                return(Task.FromResult(0));
            });

            var resolver = new CommandHandlerResolver(commandHandlerModule);
            var commandHandlingMiddleware =
                CommandHandlingMiddleware.HandleCommands(new CommandHandlingSettings(resolver));
            var embeddedClient = commandHandlingMiddleware.CreateEmbeddedClient();

            var processHandler = ProcessHandler.For <OrderFulfillment, CompareablePosition>(
                (command, token) => embeddedClient.PutCommand(command, Guid.NewGuid()),
                new EventStoreClientProcessManagerCheckpointRepository(_connection, _serializer))
                                 .CorrelateBy <OrderPlaced>(e => e.DomainEvent.OrderId.ToString())
                                 .CorrelateBy <OrderShipped>(e => e.DomainEvent.OrderId.ToString())
                                 .CorrelateBy <BillingSucceeded>(e => e.DomainEvent.OrderId.ToString())
                                 .CorrelateBy <BillingFailed>(e => e.DomainEvent.OrderId.ToString());


            _dispatcher = new ResolvedEventDispatcher(_connection,
                                                      new DefaultGetEventStoreJsonSerializer(),
                                                      new InMemoryCheckpointRepository(),
                                                      processHandler.BuildHandlerResolver(),
                                                      () => { });

            _orderId       = Guid.NewGuid();
            _streamId      = ("orders-" + _orderId.ToString("n")).FormatStreamIdWithBucket();
            _correlationId = _orderId.ToString();
        }