public async Task Post_CreatesShortUrl() { //arange var finalLink = $"https://url.sh/{ranCod}"; var request = new Mock <HttpRequest>(); var urlService = new Mock <IUrlService>(); urlService.Setup(x => x.GetFinalLink(It.IsAny <HttpRequest>(), It.IsAny <string>())) .ReturnsAsync(() => finalLink); var logger = new Mock <ILogger <ShortenedUrlsController> >(); var controllerContext = new ControllerContext() { HttpContext = new DefaultHttpContext() }; var controller = new ShortenedUrlsController(logger.Object, urlService.Object) { ControllerContext = controllerContext }; var vm = new CreateShortUrlViewModel() { Url = constUrl }; //act var action = await controller.Post(vm); //assert var result = Assert.IsType <CreatedResult>(action); var location = Assert.IsAssignableFrom <string>(result.Location); var value = Assert.IsAssignableFrom <string>(result.Value); Assert.Equal(finalLink, location); Assert.Equal(finalLink, value); }
public async Task Post_ReturnsBadRequestObject_WhenUrlServiceThrowsError() { //arange var urlService = new Mock <IUrlService>(); urlService.Setup(x => x.GetFinalLink(It.IsAny <HttpRequest>(), It.IsAny <string>())) .ReturnsAsync(() => throw new Exception("Error")); var logger = new Mock <ILogger <ShortenedUrlsController> >(); var controllerContext = new ControllerContext() { HttpContext = new DefaultHttpContext() }; var controller = new ShortenedUrlsController(logger.Object, urlService.Object) { ControllerContext = controllerContext }; var vm = new CreateShortUrlViewModel() { Url = constUrl }; //act var action = await controller.Post(vm); //assert var result = Assert.IsType <BadRequestObjectResult>(action); var value = Assert.IsAssignableFrom <string>(result.Value); Assert.Equal("Error", value); }
public async Task <ActionResult> Post([FromBody] CreateShortUrlViewModel vm) { if (ModelState.IsValid) { try { string url = await urlService.GetFinalLink(Request, vm.Url); return(Created(url, url)); } catch (Exception e) { logger.LogError(e.Message); return(BadRequest(e.Message)); } } return(BadRequest()); }
public async Task Post_ReturnsBadRequest_WhenModelStateIsNotValid() { //arange var urlService = new Mock <IUrlService>(); var logger = new Mock <ILogger <ShortenedUrlsController> >(); var controller = new ShortenedUrlsController(logger.Object, urlService.Object); var vm = new CreateShortUrlViewModel() { Url = "" }; controller.ModelState.AddModelError("Url", "Url is required"); //act var action = await controller.Post(vm); //assert Assert.IsType <BadRequestResult>(action); }