예제 #1
0
        public async Task GetCommentToEditOrDelete_WithValidCommentId_ShouldReturnComment()
        {
            //Arrange
            var db = this.SetDb();

            var service = await this.Setup(db);

            var postModel = new PostInputViewModel
            {
                Title       = "Test Post",
                Author      = "*****@*****.**",
                FullContent = "Some test post content",
                Tags        = "Baking, Cakes"
            };

            await service.CreatePost(postModel);

            var commentModel = new CommentInputViewModel
            {
                AuthorName = "*****@*****.**",
                Content    = "Test comment",
                PostId     = 1
            };

            await service.CreateComment(commentModel);

            //Act
            var comment = service.GetCommentToEditOrDelete(1);

            var expectedCommentId = 1;
            var actualCommentId   = comment.Id;

            //Assert
            Assert.Equal(expectedCommentId, actualCommentId);
        }
예제 #2
0
        public async Task GetCommentToEditOrDelete_WithInValidCommentId_ShouldThrow()
        {
            //Arrange
            var db = this.SetDb();

            var service = await this.Setup(db);

            var postModel = new PostInputViewModel
            {
                Title       = "Test Post",
                Author      = "*****@*****.**",
                FullContent = "Some test post content",
                Tags        = "Baking, Cakes"
            };

            await service.CreatePost(postModel);

            var commentModel = new CommentInputViewModel
            {
                AuthorName = "*****@*****.**",
                Content    = "Test comment",
                PostId     = 1
            };

            await service.CreateComment(commentModel);

            //Act

            //Assert
            await Assert.ThrowsAsync <NullReferenceException>(async() => await service.GetCommentToEditOrDelete(2));
        }
예제 #3
0
        public async Task CreateComment_WithValidData_ShouldAddCommentPost()
        {
            //Arrange
            var db = this.SetDb();

            var service = await this.Setup(db);

            var postModel = new PostInputViewModel
            {
                Title       = "Test Post",
                Author      = "*****@*****.**",
                FullContent = "Some test post content",
                Tags        = "Baking, Cakes"
            };

            await service.CreatePost(postModel);

            var commentModel = new CommentInputViewModel
            {
                AuthorName = "*****@*****.**",
                Content    = "Test comment",
                PostId     = 1
            };

            //Act
            await service.CreateComment(commentModel);

            var comment = this.commentRepo.All().First();

            //Assert
            Assert.Contains <Comment>(comment, postRepo.All().First().Comments);
        }
예제 #4
0
        public async Task <IActionResult> Create(string id, CommentInputViewModel inputModel)
        {
            if (!this.ModelState.IsValid)
            {
                return(this.Redirect("Error404"));
            }

            var comment = await this.commentsService.CreateCommentAsync(id, inputModel);

            if (comment.ProductId != null)
            {
                return(this.LocalRedirect($"/Products/Details?id={id}"));
            }

            if (comment.PostId != null)
            {
                return(this.LocalRedirect($"/Posts/Details?id={id}"));
            }

            if (comment.ProgramId != null)
            {
                return(this.LocalRedirect($"/Programs/Details?id={id}"));
            }

            return(this.LocalRedirect("/Home/Index"));
        }
예제 #5
0
        public async Task CreateCommentAsyncShouldThrowExceptionIfUserIsNull()
        {
            var options = new DbContextOptionsBuilder <MyCalisthenicAppDbContext>()
                          .UseInMemoryDatabase(databaseName: Guid.NewGuid().ToString())
                          .Options;

            var dbContext = new MyCalisthenicAppDbContext(options);

            IHttpContextAccessor httpContextAccessor = new HttpContextAccessor();

            var usersService = new UsersService(httpContextAccessor, dbContext, null);


            var mockMapper = new MapperConfiguration(cfg =>
            {
                cfg.AddProfile(new MyCalisthenicAppProfile());
            });

            var mapper = mockMapper.CreateMapper();

            var commentsService = new CommentsService(dbContext, mapper, usersService);

            var commentModel = new CommentInputViewModel
            {
                Text = CommentText,
            };

            var exception = await Assert.ThrowsAsync <NullReferenceException>(async() => await commentsService.CreateCommentAsync(PostId, commentModel));

            Assert.IsType <NullReferenceException>(exception);
        }
예제 #6
0
        public async Task CreateComment(CommentInputViewModel model)
        {
            if (model == null)
            {
                throw new NullReferenceException("Sorry, couldn't process your comment.");
            }

            var content = model.Content;

            model.AuthorId = this.userRepo.All().SingleOrDefault(u => u.UserName == model.AuthorName).Id;

            var comment = this.mapper.Map <CommentInputViewModel, Comment>(model);

            this.commentRepo.Add(comment);

            try
            {
                await this.commentRepo.SaveChangesAsync();
            }
            catch (Exception e)
            {
                this.logger.LogDebug(e.Message);

                throw new InvalidOperationException("Sorry, couldn't process your comment.");
            }
        }
예제 #7
0
        public async Task GetAllMyComments_WithComments_ShouldReturnUserComment()
        {
            //Arrange
            var db = this.SetDb();

            var service = await this.Setup(db);

            var postModel = new PostInputViewModel
            {
                Title       = "Test Post",
                Author      = "*****@*****.**",
                FullContent = "Some test post content",
                Tags        = "Baking, Cakes"
            };

            await service.CreatePost(postModel);

            var commentModel = new CommentInputViewModel
            {
                AuthorName = "*****@*****.**",
                Content    = "Test comment",
                PostId     = 1
            };

            await service.CreateComment(commentModel);

            //Act
            var comments = service.GetAllMyComments("*****@*****.**");

            //Assert
            Assert.NotEmpty(comments);
        }
예제 #8
0
        public async Task GetAllCommentsPerPost_WithValidPost_ShouldReturnAllComments()
        {
            //Arrange
            var db = this.SetDb();

            var service = await this.Setup(db);

            var postModel = new PostInputViewModel
            {
                Title       = "Test Post",
                Author      = "*****@*****.**",
                FullContent = "Some test post content",
                Tags        = "Baking, Cakes"
            };

            await service.CreatePost(postModel);

            var commentModel = new CommentInputViewModel
            {
                AuthorName = "*****@*****.**",
                Content    = "Test comment",
                PostId     = 1
            };

            await service.CreateComment(commentModel);

            //Act
            var result = await service.GetAllCommentsPerPost(1);

            var expectedCount = 1;
            var actualCount   = result.Comments.Count();

            //Assert
            Assert.Equal(expectedCount, actualCount);
        }
예제 #9
0
        public async Task <IActionResult> Create(CommentInputViewModel input)
        {
            var userId = this.userManager.GetUserId(this.User);

            await this.commentsService.Create(input.PostId, userId, input.Content);

            return(this.RedirectToAction("ById", "Posts", new { id = input.PostId }));
        }
예제 #10
0
        public async Task <Comment> CreateCommentAsync(string id, CommentInputViewModel commentModel)
        {
            var userId = this.usersService.GetLoggedUserId();

            var userFromDb = await this.usersService.GetLoggedUserByIdAsync(userId);

            if (userFromDb == null)
            {
                throw new NullReferenceException(string.Format(ServicesConstants.InvalidUserId, userId));
            }

            Comment comment = null;

            if (this.dbContext.Products.Any(p => p.Id == id))
            {
                comment = new Comment
                {
                    Text      = commentModel.Text,
                    AuthorId  = userId,
                    Author    = userFromDb,
                    ProductId = id,
                };
            }

            if (this.dbContext.Post.Any(p => p.Id == id))
            {
                comment = new Comment
                {
                    Text     = commentModel.Text,
                    AuthorId = userId,
                    Author   = userFromDb,
                    PostId   = id,
                };
            }

            if (this.dbContext.Programs.Any(pc => pc.Id == id))
            {
                comment = new Comment
                {
                    Text      = commentModel.Text,
                    AuthorId  = userId,
                    Author    = userFromDb,
                    ProgramId = id,
                };
            }

            await this.dbContext.Comments.AddAsync(comment);

            await this.dbContext.SaveChangesAsync();

            return(comment);
        }
예제 #11
0
        public async Task UpdateComment_WithValidModel_ShouldSaveUpdatedComment()
        {
            //Arrange
            var db = this.SetDb();

            var service = await this.Setup(db);

            var postModel = new PostInputViewModel
            {
                Title       = "Test Post",
                Author      = "*****@*****.**",
                FullContent = "Some test post content",
                Tags        = "Baking, Cakes"
            };

            await service.CreatePost(postModel);

            var commentModel = new CommentInputViewModel
            {
                AuthorName = "*****@*****.**",
                Content    = "Test comment content",
                PostId     = 1
            };

            await service.CreateComment(commentModel);

            var comment = await this.commentRepo.GetByIdAsync(1);

            db.Entry(comment).State = EntityState.Detached;

            var model = this.Mapper.Map <Comment, EditCommentViewModel>(comment);

            model.FullContent = model.FullContent;
            model.Content     = "Edit content.";

            //Act
            await service.UpdateComment(model);

            var expectedCommentContent = "Edit content.";
            var actualCommentContent   = (await this.commentRepo.GetByIdAsync(1)).Content;

            //Assert
            Assert.Equal(expectedCommentContent, actualCommentContent);
        }
예제 #12
0
        public async Task MarkCommentAsDeleted_WithValidModel_ShouldMarkCommentAsDeleted()
        {
            //Arrange
            var db = this.SetDb();

            var service = await this.Setup(db);

            var postModel = new PostInputViewModel
            {
                Title       = "Test Post",
                Author      = "*****@*****.**",
                FullContent = "Some test post content",
                Tags        = "Baking, Cakes"
            };

            await service.CreatePost(postModel);

            var commentModel = new CommentInputViewModel
            {
                AuthorName = "*****@*****.**",
                Content    = "Test comment",
                PostId     = 1
            };

            await service.CreateComment(commentModel);

            var comment = await this.commentRepo.GetByIdAsync(1);

            var model = this.Mapper.Map <Comment, EditCommentViewModel>(comment);

            model.FullContent = this.sanitizer.Sanitize(model.FullContent);
            model.Content     = this.sanitizer.Sanitize(model.Content);

            //Act
            await service.MarkCommentAsDeleted(model);

            var expectedCommentIsDeleted = true;
            var actualCommentIsDeleted   = comment.IsDeleted;

            //Assert
            Assert.Equal(expectedCommentIsDeleted, actualCommentIsDeleted);
        }
예제 #13
0
        public async Task UpdateComment_WithEmptyContent_ShouldThrow()
        {
            //Arrange
            var db = this.SetDb();

            var service = await this.Setup(db);

            var postModel = new PostInputViewModel
            {
                Title       = "Test Post",
                Author      = "*****@*****.**",
                FullContent = "Some test post content",
                Tags        = "Baking, Cakes"
            };

            await service.CreatePost(postModel);

            var commentModel = new CommentInputViewModel
            {
                AuthorName = "*****@*****.**",
                Content    = "Test comment content",
                PostId     = 1
            };

            await service.CreateComment(commentModel);

            var comment = await this.commentRepo.GetByIdAsync(1);

            db.Entry(comment).State = EntityState.Detached;

            var model = this.Mapper.Map <Comment, EditCommentViewModel>(comment);

            model.Content = "";

            //Act

            //Assert
            await Assert.ThrowsAsync <NullReferenceException>(async() => await service.UpdateComment(model));
        }
        public async Task <IActionResult> CommentOn(CommentInputViewModel viewModel)
        {
            var user = await _userManager.GetUserAsync(HttpContext.User);

            if (user == null)
            {
                return(Json(new { success = false, message = "你未登录,正在为你跳转到登录页!", code = 403 }));
            }
            if (ModelState.IsValid)
            {
                if (_commentService.LoadEntity(m => m.Commentator.Id == user.Id && m.CloudProduct.Id == viewModel.ProductId) != null)
                {
                    return(Json(new { success = false, message = "你已经点评过该产品了,不能重复点评,可以去补充您的点评!" }));
                }
                var product = _cloudProductService.LoadEntity(m => m.Id == viewModel.ProductId);
                if (product != null)
                {
                    var comment = _commentService.AddEntity(new Comment
                    {
                        Commentator  = user,
                        Content      = viewModel.Content,
                        Score        = viewModel.Score,
                        CloudProduct = product
                    });
                    if (_commentService.SaveChanges())
                    {
                        return(Json(new { success = true, message = "点评成功!", data = comment.ToViewModel() }));
                    }
                }
                else
                {
                    return(Json(new { success = false, message = "该服务商不存在,刷新后重试!" }));
                }
            }

            return(Json(new { success = false, message = "请认真填写点评!" }));
        }
예제 #15
0
        public async Task GetPostDetailById_WithCommentValidId_ShouldReturnPostDetails()
        {
            //Arrange
            var db = this.SetDb();

            var service = await this.Setup(db);

            var postModelA = new PostInputViewModel
            {
                Title       = "Test Post A",
                Author      = "*****@*****.**",
                FullContent = "Some test post content",
                Tags        = "Baking, Cakes"
            };

            await service.CreatePost(postModelA);

            var commentModel = new CommentInputViewModel
            {
                AuthorName = "*****@*****.**",
                Content    = "Test comment",
                PostId     = 1
            };

            await service.CreateComment(commentModel);

            //Act
            var post = service.GetPostDetailById(1);

            var expectedComments = 1;
            var actualComments   = post.Comments.Count();

            //Assert
            Assert.NotNull(post);
            Assert.Equal(expectedComments, actualComments);
            Assert.IsType <PostDetailsViewModel>(post);
        }
예제 #16
0
        public async Task GetCommentToEditOrDelete_WithDeletedPost_ShouldThrow()
        {
            //Arrange
            var db = this.SetDb();

            var service = await this.Setup(db);

            var postModel = new PostInputViewModel
            {
                Title       = "Test Post",
                Author      = "*****@*****.**",
                FullContent = "Some test post content",
                Tags        = "Baking, Cakes"
            };

            await service.CreatePost(postModel);

            var commentModel = new CommentInputViewModel
            {
                AuthorName = "*****@*****.**",
                Content    = "Test comment",
                PostId     = 1
            };

            await service.CreateComment(commentModel);

            var post = await this.postRepo.GetByIdAsync(1);

            post.IsDeleted = true;
            await this.postRepo.SaveChangesAsync();

            //Act

            //Assert
            await Assert.ThrowsAsync <InvalidOperationException
                                      >(async() => await service.GetCommentToEditOrDelete(1));
        }
예제 #17
0
        public async Task CreateComment_WithNullComment_ShouldThrow()
        {
            //Arrange
            var db = this.SetDb();

            var service = await this.Setup(db);

            var postModel = new PostInputViewModel
            {
                Title       = "Test Post",
                Author      = "*****@*****.**",
                FullContent = "Some test post content",
                Tags        = "Baking, Cakes"
            };

            await service.CreatePost(postModel);

            CommentInputViewModel commentModel = null;

            //Act

            //Assert
            await Assert.ThrowsAsync <NullReferenceException>(async() => await service.CreateComment(commentModel));
        }