public void Create_UserIdIsLessOrEqualToZero_ThrowsArgumentOutOfRangeException() { // Arrange int articleId = 1; string commentText = "comment_text"; ICommentService target = new CommentService(new Mock<IUnitOfWork>().Object, this._commentValidationMock.Object, this._serviceSettings); // Act and Assert Assert.Throws<ArgumentOutOfRangeException>(() => target.Create(-1, articleId, commentText)); Assert.Throws<ArgumentOutOfRangeException>(() => target.Create(0, articleId, commentText)); }
public void Create_CommentTextIsNull_ThrowsArgumentNullException() { // Arrange int userId = 1; int articleId = 2; ICommentService target = new CommentService(new Mock<IUnitOfWork>().Object, this._commentValidationMock.Object, this._serviceSettings); // Act and Assert Assert.Throws<ArgumentNullException>(() => target.Create(userId, articleId, null)); }
public void Create_NonexistentUserId_ThrowsUserNotFoundException() { // Arrange int userId = 1; int articleId = 2; string commentText = "comment_text"; // Arrange - mock userRepository Mock<IUserRepository> userRepositoryMock = new Mock<IUserRepository>(); userRepositoryMock.Setup(r => r.GetById(userId)) .Returns((User)null); // Arrange - mock unitOfWork Mock<IUnitOfWork> unitOfWorkMock = new Mock<IUnitOfWork>(); unitOfWorkMock.SetupGet(u => u.UserRepository) .Returns(userRepositoryMock.Object); // Arrange - create target ICommentService target = new CommentService(unitOfWorkMock.Object, this._commentValidationMock.Object, this._serviceSettings); // Act and Assert Assert.Throws<UserNotFoundException>(() => target.Create(userId, articleId, commentText)); userRepositoryMock.Verify(r => r.GetById(userId), Times.Once); }
public void Create_AllCredentialsAreValid_CreatesAndReturnsComment() { // Arrange User user = new User { UserId = 1 }; Article article = new Article { ArticleId = 2 }; string commentText = "comment_text"; string validatedCommentText = "validated_comment_text"; // Arrange - mock userRepository Mock<IUserRepository> userRepositoryMock = new Mock<IUserRepository>(); userRepositoryMock.Setup(r => r.GetById(user.UserId)) .Returns(user); // Arrange - mock articleRepository Mock<IArticleRepository> articleRepositoryMock = new Mock<IArticleRepository>(); articleRepositoryMock.Setup(r => r.GetById(article.ArticleId)) .Returns(article); // Arrange - mock commentRepository Mock<ICommentRepository> commentRepositoryMock = new Mock<ICommentRepository>(); // Arrange - mock unitOfWork Mock<IUnitOfWork> unitOfWorkMock = new Mock<IUnitOfWork>(); unitOfWorkMock.SetupGet(u => u.UserRepository) .Returns(userRepositoryMock.Object); unitOfWorkMock.SetupGet(u => u.ArticleRepository) .Returns(articleRepositoryMock.Object); unitOfWorkMock.SetupGet(u => u.CommentRepository) .Returns(commentRepositoryMock.Object); // Arrange - mock commentValidation this._commentValidationMock.Setup(v => v.ValidateCommentText(commentText)) .Returns(validatedCommentText); // Arrange - create target ICommentService target = new CommentService(unitOfWorkMock.Object, this._commentValidationMock.Object, this._serviceSettings); // Act Comment comment = target.Create(user.UserId, article.ArticleId, commentText); // Assert Assert.IsNotNull(comment); Assert.AreEqual(user.UserId, comment.UserId); Assert.AreEqual(article.ArticleId, comment.ArticleId); Assert.AreEqual(validatedCommentText, comment.Text); Assert.IsTrue(new DateTime() != comment.Date); userRepositoryMock.Verify(r => r.GetById(user.UserId), Times.Once); articleRepositoryMock.Verify(r => r.GetById(article.ArticleId), Times.Once); commentRepositoryMock.Verify( r => r.Insert( It.Is<Comment>(c => c.UserId == user.UserId && c.ArticleId == article.ArticleId && c.Text == validatedCommentText)), Times.Once); unitOfWorkMock.Verify(u => u.Save(), Times.Once); this._commentValidationMock.Verify(v => v.ValidateCommentText(commentText), Times.Once); }