public void MarkAsDeleted(BlogPost blogPost, int userId)
        {
            var deletionUser = LookupRepository.LoadForId<BlogUser>(userId);

            if (deletionUser == null)
                throw new UnknownUserException(userId);

            blogPost.MarkAsDeleted(deletionUser);
            BlogPostRepository.SaveOrUpdate(blogPost);
        }
        public void MarkAsDeleted_WHEN_User_Is_Null_Throws_ArgumentNullException()
        {
            var imageReference1 = GetImageReference();
            var post = new BlogPost("ABC", "description", "fullText", imageReference1, DateTime.Now, new BlogUser());

            post.MarkAsDeleted(null as BlogUser);
        }
        public void MarkAsDeleted_GIVEN_Already_Marked_As_Deleted_WHEN_MarkAsDeleted_Called_A_Second_Time_With_A_Differnt_User_THEN_Does_Not_Update_DeletedByUser()
        {
            TimeSpan waitBetweenUpdates = new TimeSpan(0, 0, 0, 0, 500);

            var deletionUser1 = new BlogUser { Id = 1, Forenames = "Joe", Surname = "Bloggs" };
            var deletionUser2 = new BlogUser { Id = 2, Forenames = "Scrooge", Surname = "Bloggs" };

            var imageReference1 = GetImageReference();
            var post = new BlogPost("ABC", "description", "fullText", imageReference1, DateTime.Now, new BlogUser());

            post.MarkAsDeleted(deletionUser1);
            post.MarkAsDeleted(deletionUser2);

            post.DeletedByUser.ShouldEqual(deletionUser1);
        }
        public void MarkAsDeleted_Sets_DeletedDate_To_Now_And_DeletedByUser_Property_To_deltedByUser_parameter()
        {
            var deletionUser = new BlogUser { Id = 1, Forenames = "Joe", Surname = "Bloggs" };

            var imageReference1 = GetImageReference();
            var post = new BlogPost("ABC", "description", "fullText", imageReference1, DateTime.Now, new BlogUser());

            post.MarkAsDeleted(deletionUser);

            post.DeletedDate.ShouldBeWithinLast(new TimeSpan(0, 0, 10));
            post.DeletedByUser.ShouldEqual(deletionUser);
        }
        public void MarkAsDeleted_GIVEN_Already_Marked_As_Deleted_WHEN_MarkAsDeleted_Called_A_Second_Time_THEN_Does_Not_Update_DeletedDate()
        {
            TimeSpan waitBetweenUpdates = new TimeSpan(0, 0, 0, 0, 100);

            var deletionUser = new BlogUser { Id = 1, Forenames = "Joe", Surname = "Bloggs" };

            var imageReference1 = GetImageReference();
            var post = new BlogPost("ABC", "description", "fullText", imageReference1, DateTime.Now, new BlogUser());

            post.MarkAsDeleted(deletionUser);

            Thread.Sleep(waitBetweenUpdates);

            post.MarkAsDeleted(deletionUser);

            post.DeletedDate.ShouldNotBeWithinLast(waitBetweenUpdates);
        }