Esempio n. 1
0
        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));
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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());
        }
Esempio n. 4
0
        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));
        }
Esempio n. 6
0
        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);
        }
Esempio n. 7
0
        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);
        }
Esempio n. 8
0
        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);
        }
Esempio n. 9
0
        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));
        }
Esempio n. 10
0
        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);
        }