public async Task Given_ShortUrl_When_ExpandAsync_Invoked_Then_It_Should_Return_Result(string hostname, string shortUrl, string original)
        {
            var shorten = new Mock <ShortenUrlSettings>();

            shorten.SetupGet(p => p.Hostname).Returns(hostname);

            var settings = this._mocker.CreateAppSettingsInstance();

            settings.SetupGet(p => p.ShortenUrl).Returns(shorten.Object);

            var item = new UrlItemEntity()
            {
                ShortUrl    = shortUrl,
                OriginalUrl = new Uri(original)
            };

            var query = new Mock <IQuery>();

            query.Setup(p => p.GetUrlItemEntityAsync(It.IsAny <string>())).ReturnsAsync(item);

            var command = new Mock <ICommand>();

            var service = new ExpanderService(settings.Object, query.Object, command.Object);

            var payload = new ExpanderRequest()
            {
                ShortUrl = shortUrl
            };

            var result = await service.ExpandAsync(payload).ConfigureAwait(false);

            result.ShortUrl.Should().Be(shortUrl);
            result.Original.ToString().TrimEnd('/').Should().Be(original.TrimEnd('/'));
            result.Shortened.ToString().TrimEnd('/').Should().Be($"https://{hostname}/{shortUrl}");
        }
        public void Given_Null_When_ExpandAsync_Invoked_Then_It_Should_Throw_Exception()
        {
            var settings = this._mocker.CreateAppSettingsInstance();
            var query    = new Mock <IQuery>();
            var command  = new Mock <ICommand>();

            var service = new ExpanderService(settings.Object, query.Object, command.Object);

            Func <Task> func = async() => await service.ExpandAsync(null).ConfigureAwait(false);

            func.Should().Throw <ArgumentNullException>();
        }