Пример #1
0
        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());
        }
Пример #2
0
        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" } }));
            }
        }
Пример #3
0
        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());
        }
Пример #4
0
        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);
        }