public async Task ShouldNotEmitMessageIfUserIsNotRegistered(
                string content,
                Snowflake userId,
                Snowflake channelId,
                [Frozen, Substitute] IMessageEmitter emitter,
                [Frozen, Substitute] IUserService userService,
                [Target] MessageCreateEventController controller
                )
            {
                var cancellationToken = new CancellationToken(false);
                var author            = new User {
                    Id = userId
                };
                var message = new Message {
                    Content = content, Author = author, ChannelId = channelId, Mentions = Array.Empty <UserMention>()
                };
                var @event = new MessageCreateEvent {
                    Message = message
                };

                userService.IsUserRegistered(Any <User>(), Any <CancellationToken>()).Returns(false);

                await controller.Handle(@event, cancellationToken);

                await emitter.DidNotReceive().Emit(Is(message), Is(channelId), Is(cancellationToken));

                await userService.Received().IsUserRegistered(Is(author), Is(cancellationToken));
            }
            public async Task ShouldThrowIfCanceled(
                string content,
                [Frozen, Substitute] IMessageEmitter emitter,
                [Target] MessageCreateEventController controller
                )
            {
                var cancellationToken = new CancellationToken(true);
                var message           = new Message {
                    Content = content
                };
                var @event = new MessageCreateEvent {
                    Message = message
                };

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

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

                await emitter.DidNotReceive().Emit(Any <Message>(), Any <Snowflake>(), Any <CancellationToken>());
            }