def add_comment(cls, post_id, user_id, content): if not is_id_valid(post_id): raise InvalidFieldError("post id is invalid", ["post_id"]) # not need to check user id for logged in user # if not is_id_valid(user_id): # raise InvalidFieldError("user id is invalid", ["user_id"]) post = DBPost.get_by_id(post_id) if not post: raise PostNotFoundError(post_id=post_id) if len(content) < 10: raise InvalidFieldError("comment is too short", ["content"]) args = { "post_id": post_id, "user_id": user_id, "content": content } comment = DBComment(**args) try: comment.save() return comment except: return None
def test_delete_post_by_manager(self): args = { "user_id": 1, "post_id": 2 } Post.delete_post(**args) post = DBPost.get_by_id(2) self.assertIsNone(post)
def test_delete_post_all_field_valid(self): args = { "user_id": 1, "post_id": 1 } Post.delete_post(**args) post = DBPost.get_by_id(1) self.assertIsNone(post)
def get_post(cls, post_id): if not is_id_valid(post_id): raise InvalidFieldError("Post id is invalid", ["post_id"]) post = DBPost.get_by_id(post_id) # if post: # comments = post.comments.all() # # post.comments = comments return post
def delete_post(cls, user_id, post_id): user = DBUser.get_by_id(user_id) if not user: raise UserNotFoundError("User with id = %d does not exist" % user_id) if not is_id_valid(post_id): raise InvalidFieldError("Post id is invalid", ["post_id"]) post = DBPost.get_by_id(post_id) if not post: raise PostNotFoundError(post_id=post_id) # only allow author and manager to delete post if post.author.id != user_id and user.role != "manager": raise AccessDeniedError("You don't have permission to delete this post.") post.delete()
def test_add_post_without_title(self): args ={ "user_id": 2, "title": "", "content": "<p>Sed itaque dignissimos eligendi reprehenderit, nesciunt ducimus voluptates dolores suscipit fugit ipsam aperiam praesentium laborum odit qui libero ipsum tempora, eos quis hic, sapiente perspiciatis amet labore voluptatibus alias. Vitae.</p>", "feature_image":"http://www.keenthemes.com/preview/metronic/theme/assets/global/plugins/jcrop/demos/demo_files/image1.jpg", "tags": "wallpaper, nature", "categories":"Uncategorized", "draft": True, } p = Post.add_post(**args) self.assertIsNotNone(p) post = DBPost.get_by_id(p.id) self.assertEqual(post.user_id, args["user_id"]) self.assertGreater(len(post.title), 0) self.assertEqual(post.content, args["content"]) self.assertEqual(post.feature_image, args["feature_image"]) self.assertEqual(post.tags, args["tags"]) self.assertEqual(post.categories, args["categories"])
def update_post(cls, user_id, post_id, title=None, content=None, feature_image=None, tags=None, categories=None, draft=False): # only allow author or manager to edit post user = DBUser.get_by_id(user_id) if not user: raise UserNotFoundError("User with id = %d does not exist" % user_id) if not is_id_valid(post_id): raise InvalidFieldError("Post id is invalid", ["post_id"]) post = DBPost.get_by_id(post_id) if not post: raise PostNotFoundError(post_id=post_id) if post.author.id != user_id and user.role != "manager": raise AccessDeniedError("You cannot edit post not published by you.") if title: post.title = title if content: post.content = content elif content is not None and len(content) == 0: raise InvalidFieldError("Post's content cannot be empty", ["content"]) if feature_image: post.feature_image = feature_image if tags: post.tags = tags if categories: post.categories = ",".join("`%s`"%cat for cat in categories) post.update() return post