public async Task Handle_WhenFoundRandom_ReturnsSuccessfulResponse()
        {
            var expectedUrl = new ShortUrl
            {
                Adjective = new Adjective {
                    Value = "Adj"
                },
                Adverb = new Adverb {
                    Value = "Adv"
                },
                Noun = new Noun {
                    Value = "Nou"
                },
                BaseDomain  = "https://localhost/",
                DateCreated = DateTimeOffset.UtcNow,
                TargetUrl   = "https://localhost/"
            };

            _shortUrlRepositoryMock.Setup(m => m.GetRandomAsync(It.IsAny <string>()))
            .ReturnsAsync(expectedUrl);

            var handler = new GetRandomUrlQueryHandler(_shortUrlRepositoryMock.Object);
            var actual  = await handler.Handle(new GetRandomUrlQuery { LanguageCode = "en" }, CancellationToken.None);

            Assert.True(actual.IsSuccessful);
            Assert.Equal(expectedUrl.DateCreated, actual.DateCreated);
            Assert.Equal(expectedUrl.TargetUrl, actual.TargetUrl);
            Assert.Equal("en", actual.Language);
            Assert.Equal($"https://localhost/AdvAdjNou", actual.Url);
        }
        public async Task Handle_WhenCouldNotFindRandom_ReturnsFailedResponse()
        {
            const string expectedError      = "Expected error message";
            const string expectedInnerError = "Expected error message inner";

            _shortUrlRepositoryMock.Setup(m => m.GetRandomAsync(It.IsAny <string>()))
            .ThrowsAsync(new InvalidOperationException(expectedError, new Exception(expectedInnerError)));

            var handler = new GetRandomUrlQueryHandler(_shortUrlRepositoryMock.Object);
            var actual  = await handler.Handle(new GetRandomUrlQuery(), CancellationToken.None);

            Assert.False(actual.IsSuccessful);
            Assert.Equal(2, actual.Errors.Count);
            Assert.Equal(expectedError, actual.Errors[0].Message);
            Assert.Equal(expectedInnerError, actual.Errors[1].Message);
        }