public async Task Post_UpdateInvalidPost_Fails() { // setup _loggerMock = new Mock <ILoggerFactory>(); _applicationUnitOfWorkMock = new Mock <IApplicationUnitOfWork>(); _postRepositoryMock = new Mock <IPostRepository>(); _postRepositoryMock.Setup(x => x.GetWithCategory(It.IsAny <Expression <Func <Post, bool> > >())).Returns(Task.FromResult <IEnumerable <Post> >(null)); _postRepositoryMock.Setup(x => x.Add(It.IsAny <Post>())).Callback <Post>(p => { p.Id = Guid.NewGuid(); }); _applicationOptionsMock = new Mock <IOptions <ApplicationOptions> >(); _applicationUnitOfWorkMock.Setup(x => x.Posts).Returns(_postRepositoryMock.Object); _sut = new PostController(_applicationUnitOfWorkMock.Object, _applicationOptionsMock.Object, Mapper.Instance, _loggerMock.Object); var category = new Category { Id = Guid.NewGuid(), Name = "cat" }; var model = new EditablePostModel { Id = Guid.NewGuid(), Title = "test1", Blurb = "lorem...", CategoryId = category.Id, Content = "lorem ipsum blah blah" }; // action var result = await _sut.Post(model) as NotFoundResult; // assert Assert.Equal(404, result.StatusCode); _postRepositoryMock.Verify(x => x.GetWithCategory(It.IsAny <Expression <Func <Post, bool> > >()), Times.Once()); }
public async Task <IActionResult> Post([FromBody] EditablePostModel model) { try { var post = new Post { CreatedOn = DateTime.UtcNow }; if (model.Id != Guid.Empty) { var posts = await _applicationUnitOfWork.Posts.GetWithCategory(x => x.Id == model.Id); if (posts == null || posts.Count() == 0) { return(NotFound()); } post = posts.First(); } var blurb = model.Blurb; if (string.IsNullOrEmpty(blurb)) { blurb = Regex.Replace(model.Content, "<.*?>", string.Empty); blurb = blurb.Substring(0, Math.Min(blurb.Length, 160)); } var category = _applicationUnitOfWork.Categories.GetAll().FirstOrDefault(x => x.Id == model.CategoryId); post.Title = model.Title; post.Blurb = blurb; post.Category = category; post.Content = model.Content; post.ModifiedOn = DateTime.UtcNow; post.Raw = model.Raw; post.Tags = ""; if (model.Tags != null && !string.IsNullOrEmpty(model.Tags.Trim())) { var tags = model.Tags.Split(',').Select(x => x.Trim()); post.Tags = string.Join(",", tags); } if (model.Id != Guid.Empty) { _applicationUnitOfWork.Posts.Update(post); } else { _applicationUnitOfWork.Posts.Add(post); } _applicationUnitOfWork.Commit(); return(Json(_mapper.Map <EditablePostModel>(post))); } catch (Exception e) { _logger.LogError($"Fatal error: {e}"); return(StatusCode(500, new { Errors = new[] { "Internal server error" } })); } }
public async Task Post_UpdatePost_Succeeds() { // setup _loggerMock = new Mock <ILoggerFactory>(); _applicationUnitOfWorkMock = new Mock <IApplicationUnitOfWork>(); var posts = GetTestPosts(1); _postRepositoryMock = new Mock <IPostRepository>(); _postRepositoryMock.Setup(x => x.GetWithCategory(It.IsAny <Expression <Func <Post, bool> > >())).Returns(Task.FromResult(posts)); _postRepositoryMock.Setup(x => x.Add(It.IsAny <Post>())).Callback <Post>(p => { p.Id = Guid.NewGuid(); }); var category = new Category { Id = Guid.NewGuid(), Name = "cat" }; _categoryRepositoryMock = new Mock <ICategoryRepository>(); _categoryRepositoryMock.Setup(x => x.GetAll()).Returns((new List <Category> { category }).AsQueryable()); _applicationOptionsMock = new Mock <IOptions <ApplicationOptions> >(); _applicationUnitOfWorkMock.Setup(x => x.Posts).Returns(_postRepositoryMock.Object); _applicationUnitOfWorkMock.Setup(x => x.Categories).Returns(_categoryRepositoryMock.Object); _sut = new PostController(_applicationUnitOfWorkMock.Object, _applicationOptionsMock.Object, Mapper.Instance, _loggerMock.Object); var model = new EditablePostModel { Id = posts.First().Id, Title = "test1", Blurb = "lorem...", CategoryId = category.Id, Content = "lorem ipsum blah blah" }; // action var result = await _sut.Post(model) as JsonResult; var jsonResult = (EditablePostModel)result.Value; // assert Assert.NotNull(jsonResult); Assert.Equal(model.Title, jsonResult.Title); _postRepositoryMock.Verify(x => x.Update(It.IsAny <Post>()), Times.Once()); _postRepositoryMock.Verify(x => x.GetWithCategory(It.IsAny <Expression <Func <Post, bool> > >()), Times.Once()); }
public async Task Post_PostBlurbCharacterRestricted_Succeeds() { // setup _loggerMock = new Mock <ILoggerFactory>(); _applicationUnitOfWorkMock = new Mock <IApplicationUnitOfWork>(); _postRepositoryMock = new Mock <IPostRepository>(); _postRepositoryMock.Setup(x => x.GetWithCategory(It.IsAny <Expression <Func <Post, bool> > >())).Returns(Task.FromResult <IEnumerable <Post> >(null)); _postRepositoryMock.Setup(x => x.Add(It.IsAny <Post>())).Callback <Post>(p => { p.Id = Guid.NewGuid(); }); var category = new Category { Id = Guid.NewGuid(), Name = "cat" }; _categoryRepositoryMock = new Mock <ICategoryRepository>(); _categoryRepositoryMock.Setup(x => x.GetAll()).Returns((new List <Category> { category }).AsQueryable()); _applicationOptionsMock = new Mock <IOptions <ApplicationOptions> >(); _applicationUnitOfWorkMock.Setup(x => x.Posts).Returns(_postRepositoryMock.Object); _applicationUnitOfWorkMock.Setup(x => x.Categories).Returns(_categoryRepositoryMock.Object); _sut = new PostController(_applicationUnitOfWorkMock.Object, _applicationOptionsMock.Object, Mapper.Instance, _loggerMock.Object); var model = new EditablePostModel { Title = "test1", CategoryId = category.Id, Content = "Lorem ipsum dolor amet banh mi art party church-key bitters, vinyl pabst jean shorts echo park farm-to-table mixtape. Tumeric meditation umami pok pok raw denim. Aesthetic drinking vinegar iPhone" }; // action var result = await _sut.Post(model) as JsonResult; var jsonResult = (EditablePostModel)result.Value; // assert Assert.NotNull(jsonResult); Assert.Equal(160, jsonResult.Blurb.Length); }