Exemplo n.º 1
0
        public async void CreateShortenUrlWithValidCodeOrEmpty(string code, string url)
        {
            var shortenUrlDTO = new ShortenUrlDTO {
                Code = code, Url = url
            };

            var ShortenUrlRepostory = new Mock <IShortenUrlRepository>();

            ShortenUrlRepostory.Setup(p => p.GetShortenUrl(It.IsAny <string>())).Returns(Task.FromResult <ShortenUrl>(null));
            ShortenUrlRepostory.Setup(p => p.InsertShortenUrl(It.IsAny <ShortenUrlDTO>()));

            var shortenUrlService = new ShortenUrlService(ShortenUrlRepostory.Object, new CodeService());

            var result = await shortenUrlService.CreateShortenUrl(shortenUrlDTO);

            if (string.IsNullOrEmpty(code))
            {
                Assert.NotEmpty(result.Code);
            }
            else
            {
                Assert.Equal(code, result.Code);
            }

            Assert.Equal(6, result.Code.Length);
        }
Exemplo n.º 2
0
        public async Task <ShortUrlCreatedViewModel> CreateShortenUrl(ShortenUrlDTO shortenUrlDTO)
        {
            if (string.IsNullOrEmpty(shortenUrlDTO.Code))
            {
                shortenUrlDTO.Code = _codeService.GenerateCode(6, new Random());
            }

            if (_codeService.IsCodeValid(shortenUrlDTO.Code))
            {
                var shortenUrl = await _shortenUrlRepository.GetShortenUrl(shortenUrlDTO.Code);

                if (shortenUrl != null)
                {
                    throw new ConflictException("Code in Use");
                }


                await _shortenUrlRepository.InsertShortenUrl(shortenUrlDTO);

                return(new ShortUrlCreatedViewModel {
                    Code = shortenUrlDTO.Code
                });
            }
            else
            {
                throw new UnprocessableEntityException("Code should be alphanumeric and 6 chars long");
            }
        }
Exemplo n.º 3
0
        public IActionResult Post([FromBody] ShortenUrlDTO shortenUrlDTO)
        {
            var shortUrl = CreateNewShortUrl(shortenUrlDTO);

            SaveToDatabase(shortUrl);
            return(Ok(new ShortenedUrlDTO {
                Original_link = shortUrl.OriginalUrl, Short_link = shortUrl.Alias
            }));
        }
Exemplo n.º 4
0
        public async Task InsertShortenUrl(ShortenUrlDTO shortenUrlDTO)
        {
            var parameters = new Dictionary <string, object>
            {
                { "Code", shortenUrlDTO.Code },
                { "OriginalUrl", shortenUrlDTO.Url }
            };

            await _sqlDataAccess.Execute("uspInsertShortUrl", parameters);
        }
Exemplo n.º 5
0
        private ShortUrl CreateNewShortUrl(ShortenUrlDTO shortenUrlDTO)
        {
            var shortUrl = new ShortUrl {
                Id = Guid.NewGuid(), OriginalUrl = shortenUrlDTO.Url
            };

            shortUrl.Alias = baseUrl + RandomStringHelper.RandomString(8);

            while (dbContext.ShortUrls.Any(su => su.Alias == shortUrl.Alias))
            {
                shortUrl.Alias = baseUrl + RandomStringHelper.RandomString(8);
            }

            return(shortUrl);
        }
Exemplo n.º 6
0
        public async void CreateShortenUrlExistingCode(string code, string url)
        {
            var shortenUrlDTO = new ShortenUrlDTO {
                Code = code, Url = url
            };

            var ShortenUrlRepostory = new Mock <IShortenUrlRepository>();

            ShortenUrlRepostory.Setup(p => p.GetShortenUrl(It.IsAny <string>())).Returns(Task.FromResult <ShortenUrl>(new ShortenUrl()));
            ShortenUrlRepostory.Setup(p => p.InsertShortenUrl(It.IsAny <ShortenUrlDTO>()));

            var shortenUrlService = new ShortenUrlService(ShortenUrlRepostory.Object, new CodeService());


            await Assert.ThrowsAsync <ConflictException>(() => shortenUrlService.CreateShortenUrl(shortenUrlDTO));
        }
Exemplo n.º 7
0
        public void ShortenController_PostUrlForShortening_ReturnOkAndShortUrl()
        {
            // Arrange
            var shortenController = new ShortenController(dbContext);
            var originalUrl       = "http://www.google.com";
            var shortenUrlDto     = new ShortenUrlDTO {
                Url = originalUrl
            };

            // Act
            var actionResult = shortenController.Post(shortenUrlDto);

            // Assert
            actionResult.Should().NotBeNull();
            var okResult = actionResult as OkObjectResult;

            okResult.Should().NotBeNull();
            var shortenedUrlDto = okResult.Value as ShortenedUrlDTO;

            shortenedUrlDto.Should().NotBeNull();
            shortenedUrlDto.Original_link.Should().Be(originalUrl);
            dbContext.ShortUrls.Any(url => url.OriginalUrl == originalUrl).Should().BeTrue();
        }
Exemplo n.º 8
0
        public async Task <ActionResult <ShortUrlCreatedViewModel> > CreateShortenUrl(ShortenUrlDTO shortenUrlDTO, [FromServices] IShortenUrlService shortenUrlService)
        {
            var code = await shortenUrlService.CreateShortenUrl(shortenUrlDTO);

            return(Created(string.Empty, code));
        }