public void Can_Create_Category()
        {
            //Arrange
            Mock <ICategoryRepository> categoryRepositoryMock = new Mock <ICategoryRepository>();
            Mock <IUrlManager>         urlManagerMock         = new Mock <IUrlManager>();
            string mUrl = "mock url";

            urlManagerMock.Setup(m => m.GetEditUrl(It.IsAny <Category>())).Returns(mUrl);
            Mock <IModerationProcessor> moderationProcessorMock = new Mock <IModerationProcessor>();

            BlogContentCreator target = new BlogContentCreator(urlManagerMock.Object,
                                                               moderationProcessorMock.Object);
            var category = new Category
            {
                Name = "mock name"
            };

            //Act
            var result = target.CreateCategory(category, categoryRepositoryMock.Object);

            //Assert
            categoryRepositoryMock.Verify(m => m.SaveCategory(It.IsAny <Category>()));           //some category is saved
            categoryRepositoryMock.Verify(m => m.SaveCategory(category));                        //our category is saved
            urlManagerMock.Verify(m => m.GetEditUrl(category));                                  //edit url is retrieved
            moderationProcessorMock.Verify(m => m.ProcessModeration(category.ToString(), mUrl)); //reported to moderator (e.g. e-mail is sended)
            Assert.AreEqual(result, (int)CategoryCreateReturns.Success);
        }
        public void Not_Create_Category_Twice()
        {
            //Arrange
            Mock <ICategoryRepository> categoryRepositoryMock = new Mock <ICategoryRepository>();

            categoryRepositoryMock.Setup(m => m.Categories).Returns(new Category[] { new Category {
                                                                                         Id = 0, Name = "exist category"
                                                                                     } }.AsQueryable());
            Mock <IUrlManager> urlManagerMock = new Mock <IUrlManager>();
            string             mUrl           = "mock url";

            urlManagerMock.Setup(m => m.GetEditUrl(It.IsAny <Category>())).Returns(mUrl);
            Mock <IModerationProcessor> moderationProcessorMock = new Mock <IModerationProcessor>();

            BlogContentCreator target = new BlogContentCreator(urlManagerMock.Object,
                                                               moderationProcessorMock.Object);
            var category = new Category
            {
                Id   = 1,
                Name = "exist category"
            };

            //Act
            var result = target.CreateCategory(category, categoryRepositoryMock.Object);

            //Assert
            categoryRepositoryMock.Verify(m => m.SaveCategory(category), Times.Never);                        //our category isn't saved
            moderationProcessorMock.Verify(m => m.ProcessModeration(category.ToString(), mUrl), Times.Never); //didn't report to moderator (e.g. e-mail isn't sended)
            Assert.AreEqual(result, (int)CategoryCreateReturns.AlreadyExist);                                 //system report that operation failed
        }
        public void Can_Create_Post()
        {
            //Arrange
            Mock <IPostRepository> postRepositoryMock = new Mock <IPostRepository>();
            Mock <IUrlManager>     urlManagerMock     = new Mock <IUrlManager>();
            string mUrl = "mock url";

            urlManagerMock.Setup(m => m.GetEditUrl(It.IsAny <Post>())).Returns(mUrl);
            Mock <IModerationProcessor> moderationProcessorMock = new Mock <IModerationProcessor>();

            BlogContentCreator target = new BlogContentCreator(urlManagerMock.Object,
                                                               moderationProcessorMock.Object);
            var p = new Post
            {
                Title = "Test Post",
                Text  = "test, test, test!"
            };

            //Act
            var result = target.CreatePost(p, postRepositoryMock.Object);

            //Assert
            postRepositoryMock.Verify(m => m.SavePost(It.IsAny <Post>()));                //some post is saved
            postRepositoryMock.Verify(m => m.SavePost(p));                                //our post is saved
            urlManagerMock.Verify(m => m.GetEditUrl(p));                                  //edit url is retrieved
            moderationProcessorMock.Verify(m => m.ProcessModeration(p.ToString(), mUrl)); //reported to moderator (e.g. e-mail is sended)
            Assert.AreEqual(result, (int)PostCreateReturns.Success);
        }