public async Task ShouldRestartTheGatewayService(
                string sessionId,
                [Frozen, Substitute] IGatewayService gateway,
                [Target] ReconnectEventController controller
                )
            {
                var cancellationToken = new CancellationToken(false);
                var @event            = new ReconnectEvent {
                };

                await controller.Handle(@event, cancellationToken);

                await gateway.Received().Restart();
            }
            public async Task ShouldReportAReconnectMetric(
                string sessionId,
                [Frozen, Substitute] IMetricReporter reporter,
                [Target] ReconnectEventController controller
                )
            {
                var cancellationToken = new CancellationToken(false);
                var @event            = new ReconnectEvent {
                };

                await controller.Handle(@event, cancellationToken);

                await reporter.Received().Report(Is(default(ReconnectEventMetric)), Is(cancellationToken));
            }
            public async Task ShouldThrowIfCanceled(
                string sessionId,
                [Frozen, Substitute] IGatewayService gateway,
                [Target] ReconnectEventController controller
                )
            {
                var cancellationToken = new CancellationToken(true);
                var @event            = new ReconnectEvent {
                };

                Func <Task> func = () => controller.Handle(@event, cancellationToken);

                await func.Should().ThrowAsync <OperationCanceledException>();

                await gateway.DidNotReceive().Restart();
            }