public async Task ShouldNotThrowIfNotCancelled(
                [Target] DefaultGatewayService gateway,
                CancellationToken cancellationToken
                )
            {
                Func <Task> func = () => gateway.Heartbeat(cancellationToken);

                await func.Should().NotThrowAsync <OperationCanceledException>();
            }
            public async Task ShouldThrowIfCancelled(
                [Target] DefaultGatewayService gateway
                )
            {
                var         cancellationToken = new CancellationToken(true);
                Func <Task> func = () => gateway.Heartbeat(cancellationToken);

                await func.Should().ThrowAsync <OperationCanceledException>();
            }
            public async Task ShouldSendAHeartbeatToTheTxWorker(
                int sequenceNumber,
                [Frozen, Substitute] IGatewayTxWorker txWorker,
                [Target] DefaultGatewayService gateway,
                CancellationToken cancellationToken
                )
            {
                gateway.SequenceNumber = sequenceNumber;
                await gateway.Heartbeat(cancellationToken);

                await txWorker.Received().Emit(
                    Is <GatewayMessage>(message =>
                                        message.OpCode == GatewayOpCode.Heartbeat &&
                                        (HeartbeatEvent?)message.Data == sequenceNumber
                                        ),
                    Any <CancellationToken>()
                    );
            }