public async Task <IActionResult> Create([FromBody] CreateBannerModel createModel) { if (createModel == null || !ModelState.IsValid) { return(BadRequest()); } if (IsTitleAlreadyRegistered(createModel.Title)) { return(Conflict("Title is already registered")); } var validationResult = await _htmlValidator.Validate(createModel.Html); if (!validationResult.IsValidHtml) { return(BadRequest(validationResult)); } var banner = _mapper.Map <Banner>(createModel); _context.Banners.Add(banner); await _context.SaveChangesAsync(); var createdBanner = _mapper.Map <BannerModel>(banner); return(Created(string.Empty, createdBanner)); }
public async Task Given_ValidModel_When_Create_Then_OkResult() { // Arrange var createModel = new CreateBannerModel { Title = Guid.NewGuid().ToString(), Html = $"<html><body><span>{Guid.NewGuid()}</span></body></html>" }; HtmlValidatorMock.Setup(v => v.Validate(createModel.Html)) .Returns(Task.FromResult(new ValidationResult())); // Act var result = await Controller.Create(createModel); // Assert Assert.IsInstanceOfType(result, typeof(CreatedResult)); var createdBanner = ((CreatedResult)result).Value as BannerModel; Assert.IsNotNull(createdBanner); Assert.AreNotEqual(default(int), createdBanner.Id); Assert.AreNotEqual(default(DateTime), createdBanner.Created); Assert.AreEqual(createModel.Title, createdBanner.Title); Assert.AreEqual(createModel.Html, createdBanner.Html); }
public async Task Given_InvalidHtml_When_Create_Then_BadRequest() { // Arrange var createModel = new CreateBannerModel { Title = Guid.NewGuid().ToString(), Html = $"<html><body><span>{Guid.NewGuid()}</span></body></html>" }; HtmlValidatorMock.Setup(v => v.Validate(createModel.Html)) .Returns(Task.FromResult(new ValidationResult() { Errors = new[] { "Invalid HTML" } })); // Act var result = await Controller.Create(createModel); // Assert Assert.IsInstanceOfType(result, typeof(BadRequestObjectResult)); var validationResult = ((BadRequestObjectResult)result).Value as ValidationResult; Assert.IsNotNull(validationResult); Assert.IsFalse(validationResult.IsValidHtml); Assert.AreEqual("Invalid HTML", validationResult.Errors.Single()); }
private async Task <SaveBannerResult> CreateBannerTestData() { var banner = new CreateBannerModel(); banner.Html = ValidHtml; var response = await _client.PostAsJsonAsync("/api/banners", banner); var stringResponse = await response.Content.ReadAsStringAsync(); return(JsonConvert.DeserializeObject <SaveBannerResult>(stringResponse)); }
public async Task <IActionResult> Post([FromBody] CreateBannerModel banner) { if (banner == null) { return(BadRequest()); } var result = await _service.Add(banner); if (!result.Sucessful) { return(BadRequest(result)); } return(Ok(result)); }
public async Task AddNewBanner_WithValidHtml_ShouldReturnOkWithNewId() { var banner = new CreateBannerModel(); banner.Html = ValidHtml; var httpResponse = await _client.PostAsJsonAsync("/api/banners", banner); var stringResponse = await httpResponse.Content.ReadAsStringAsync(); var result = JsonConvert.DeserializeObject <SaveBannerResult>(stringResponse); Assert.Equal(HttpStatusCode.OK, httpResponse.StatusCode); Assert.Empty(result.Errors); Assert.True(result.Sucessful); }
public async Task AddNewBanner_WithInvalidHtml_ShouldReturnBadRequestsWithDetails() { var banner = new CreateBannerModel(); banner.Html = "ABC123"; var httpResponse = await _client.PostAsJsonAsync("/api/banners", banner); var stringResponse = await httpResponse.Content.ReadAsStringAsync(); var result = JsonConvert.DeserializeObject <SaveBannerResult>(stringResponse); Assert.Equal(HttpStatusCode.BadRequest, httpResponse.StatusCode); Assert.False(result.Sucessful); Assert.NotEmpty(result.Errors); }
public async Task Given_AlreadyExistingTitle_When_Create_Then_Conflict() { // Arrange var banner = GenerateRandomBanner(); var createModel = new CreateBannerModel { Title = banner.Title, Html = $"<html><body><span>{Guid.NewGuid()}</span></body></html>" }; // Act var result = await Controller.Create(createModel); // Assert Assert.IsInstanceOfType(result, typeof(ConflictObjectResult)); Assert.AreEqual("Title is already registered", ((ConflictObjectResult)result).Value); }
public async Task <SaveBannerResult> Add(CreateBannerModel banner) { var validationResult = await _validator.Validate(banner.Html); if (!validationResult.IsValid) { return(ValidationFailed(validationResult)); } var newBanner = new Banner { Html = banner.Html, Created = DateTime.Now }; await _repository.Add(newBanner); return(SaveSucessful(newBanner)); }
public async Task AddBanner_WithInvalidHtml_ShouldReturnErrorWithDescription() { var validationFailed = new ValidationResult(false, new List <string> { "Error" }); _htmlValidator.Setup(x => x.Validate(It.IsAny <string>())).Returns(Task.FromResult(validationFailed)); var bannerService = new BannerService(_htmlValidator.Object, _repository.Object); var bannerToAdd = new CreateBannerModel { Html = "ABC123" }; var result = await bannerService.Add(bannerToAdd); Assert.False(result.Sucessful); Assert.NotEmpty(result.Errors); Assert.Contains("Error", result.Errors); }