public async Task ShouldReportMessageCreateEventMetric(
                [Frozen, Substitute] IMetricReporter reporter,
                [Target] MessageCreateEventController controller
                )
            {
                var cancellationToken = new CancellationToken(false);
                await controller.Handle(new MessageCreateEvent { }, cancellationToken);

                await reporter.Received().Report(Is(default(MessageCreateEventMetric)), Is(cancellationToken));
            }
            public async Task ShouldReportAReconnectMetric(
                bool resumable,
                [Frozen, Substitute] IMetricReporter reporter,
                [Target] InvalidSessionEventController controller
                )
            {
                var cancellationToken = new CancellationToken(false);
                var @event            = new InvalidSessionEvent(resumable);

                await controller.Handle(@event, cancellationToken);

                await reporter.Received().Report(Is(default(InvalidSessionEventMetric)), Is(cancellationToken));
            }
            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 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));
            }