public async Task ShouldNotSetSessionIdToNullIfResumable(
                string sessionId,
                [Frozen, Substitute] IGatewayService gateway,
                [Target] DefaultGatewayRestartService service
                )
            {
                var cancellationToken = new CancellationToken(false);
                var resume            = true;

                await service.Restart(gateway, resume, cancellationToken);

                gateway.DidNotReceive().SessionId = null;
            }
            public async Task ShouldStopTheGatewayService(
                string sessionId,
                [Frozen, Substitute] IGatewayService gateway,
                [Target] DefaultGatewayRestartService service
                )
            {
                var cancellationToken = new CancellationToken(false);
                var resume            = true;

                await service.Restart(gateway, resume, cancellationToken);

                await gateway.Received().StopAsync(Is(cancellationToken));
            }
            public async Task ShouldWaitRandomAmountOfTimeBetween1And5Seconds(
                string sessionId,
                [Frozen, Substitute] IGatewayService gateway,
                [Frozen, Substitute] IGatewayUtilsFactory factory,
                [Target] DefaultGatewayRestartService service
                )
            {
                var cancellationToken = new CancellationToken(false);
                var resume            = true;

                await service.Restart(gateway, resume, cancellationToken);

                await factory.Received().CreateRandomDelay(1000, 5000, Is(cancellationToken));
            }
            public async Task ShouldReportARestartMetric(
                string sessionId,
                [Frozen, Substitute] IMetricReporter reporter,
                [Frozen, Substitute] IGatewayService gateway,
                [Target] DefaultGatewayRestartService service
                )
            {
                var cancellationToken = new CancellationToken(false);
                var resume            = true;

                await service.Restart(gateway, resume, cancellationToken);

                await reporter.Received().Report(Is(default(GatewayRestartMetric)), Is(cancellationToken));
            }
            public async Task ShouldThrowIfCanceled(
                string sessionId,
                [Frozen, Substitute] IGatewayService gateway,
                [Target] DefaultGatewayRestartService service
                )
            {
                var cancellationToken = new CancellationToken(true);
                var resume            = true;

                Func <Task> func = () => service.Restart(gateway, resume, cancellationToken);

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

                await gateway.DidNotReceive().StopAsync(Is(cancellationToken));

                await gateway.DidNotReceive().StartAsync(Is(cancellationToken));
            }