예제 #1
0
 def testTagShow(self):
     tag1 = Tag(name='First tag')
     tag2 = Tag(name='Second tag')
     post1 = build_post(tags=[tag1, tag2])
     post2 = build_post(tags=[tag1])
     post3 = build_post(tags=[tag2])
     post4 = build_post(published_at=None, tags=[tag1, tag2])
     post1_title = post1.title
     post2_title = post2.title
     post3_title = post3.title
     post4_title = post4.title
     self.db.session.add(post1)
     self.db.session.add(post2)
     self.db.session.add(post3)
     self.db.session.add(post4)
     self.db.session.commit()
     resp = self.app.get('/tags/first-tag')
     self.assertEqual(resp.status_code, 200)
     self.assertTrue(post1_title.encode('utf-8') in resp.data)
     self.assertTrue(post2_title.encode('utf-8') in resp.data)
     self.assertFalse(post3_title.encode('utf-8') in resp.data)
     self.assertFalse(post4_title.encode('utf-8') in resp.data)
     resp = self.app.get('/tags/second-tag')
     self.assertEqual(resp.status_code, 200)
     self.assertTrue(post1_title.encode('utf-8') in resp.data)
     self.assertFalse(post2_title.encode('utf-8') in resp.data)
     self.assertTrue(post3_title.encode('utf-8') in resp.data)
     self.assertFalse(post4_title.encode('utf-8') in resp.data)
예제 #2
0
 def testPostIndexExcludesUnpublishedPosts(self):
     post1 = build_post()
     post2 = build_post(published_at=None)
     post1_title = post1.title
     post2_title = post2.title
     self.db.session.add(post1)
     self.db.session.add(post2)
     self.db.session.commit()
     resp = self.app.get('/posts')
     self.assertEqual(resp.status_code, 200)
     self.assertTrue(post1_title.encode('utf-8') in resp.data)
     self.assertFalse(post2_title.encode('utf-8') in resp.data)
예제 #3
0
 def testPostIndexExcludesFuturePublishedPosts(self):
     post1 = build_post()
     post2 = build_post(published_at=datetime.utcnow() + timedelta(days=10))
     post1_title = post1.title
     post2_title = post2.title
     self.db.session.add(post1)
     self.db.session.add(post2)
     self.db.session.commit()
     resp = self.app.get('/posts')
     self.assertEqual(resp.status_code, 200)
     self.assertTrue(post1_title.encode('utf-8') in resp.data)
     self.assertFalse(post2_title.encode('utf-8') in resp.data)
예제 #4
0
 def testPostsAdmin(self):
     user = build_user(user_type='admin')
     post = build_post(user=user)
     other_post = build_post()
     post_title = post.title
     other_post_title = other_post.title
     self.db.session.add(user)
     self.db.session.add(post)
     self.db.session.add(other_post)
     self.db.session.commit()
     self.login_user(user)
     resp = self.app.get('/admin')
     self.assertEqual(resp.status_code, 200)
     self.assertTrue(post_title.encode('utf-8') in resp.data)
     self.assertTrue(other_post_title.encode('utf-8') in resp.data)
예제 #5
0
 def testPostIndex(self):
     post1 = build_post()
     post2 = build_post()
     post1_title = post1.title
     post1_slug = post1.slug
     post2_title = post2.title
     post2_slug = post2.slug
     self.db.session.add(post1)
     self.db.session.add(post2)
     self.db.session.commit()
     resp = self.app.get('/posts')
     self.assertEqual(resp.status_code, 200)
     self.assertTrue(post1_title.encode('utf-8') in resp.data)
     self.assertTrue(post2_title.encode('utf-8') in resp.data)
     self.assertTrue(b'/posts/' + post1_slug.encode('utf-8') in resp.data)
     self.assertTrue(b'/posts/' + post2_slug.encode('utf-8') in resp.data)
예제 #6
0
 def testPostCommentNotLoggedIn(self):
     post = build_post()
     slug = post.slug
     self.db.session.add(post)
     self.db.session.commit()
     resp = self.app.post('/posts/' + slug + '/comments')
     self.assertEqual(resp.status_code, 401)
예제 #7
0
 def testPostUpdateDuplicateSlug(self):
     user = build_user(user_type='user')
     post = build_post(user=user)
     other_post = build_post()
     slug = post.slug
     other_slug = other_post.slug
     self.db.session.add(user)
     self.db.session.add(post)
     self.db.session.add(other_post)
     self.db.session.commit()
     self.login_user(user)
     post = Post.query.filter(Post.slug == slug).first()
     resp = self.app.post(
         '/posts/' + slug,
         data={'title': 'New title', 'body': post.body, 'slug': other_slug})
     self.assertEqual(resp.status_code, 200)
     self.assertTrue(b'This slug is taken.' in resp.data)
예제 #8
0
 def testPostShowFound(self):
     post = build_post()
     self.db.session.add(post)
     self.db.session.commit()
     resp = self.app.get('/posts/' + post.slug)
     self.assertEqual(resp.status_code, 200)
     self.assertTrue(post.title.encode('utf-8') in resp.data)
     self.assertTrue(post.body.encode('utf-8') in resp.data)
     self.assertTrue(post.user.username.encode('utf-8') in resp.data)
예제 #9
0
 def testPostDeleteWrongUser(self):
     user = build_user(user_type='user')
     post = build_post()
     slug = post.slug
     self.db.session.add(user)
     self.db.session.add(post)
     self.db.session.commit()
     self.login_user(user)
     resp = self.app.post('/posts/' + slug + '/destroy')
     self.assertEqual(resp.status_code, 401)
예제 #10
0
 def testPostShowUnpublishedAdmin(self):
     post = build_post(published_at=None)
     slug = post.slug
     user = build_user(user_type='admin')
     self.db.session.add(post)
     self.db.session.add(user)
     self.db.session.commit()
     self.login_user(user)
     resp = self.app.get('/posts/' + slug)
     self.assertEqual(resp.status_code, 200)
예제 #11
0
 def testPostEditAsAuthor(self):
     user = build_user(user_type='user')
     post = build_post(user=user)
     slug = post.slug
     self.db.session.add(post)
     self.db.session.commit()
     self.login_user(user)
     resp = self.app.get('/posts/' + slug + '/edit')
     self.assertEqual(resp.status_code, 200)
     self.assertTrue(slug.encode('utf-8') in resp.data)
예제 #12
0
 def testPostEditAsUserNotAuthor(self):
     user = build_user(user_type='user')
     post = build_post()
     slug = post.slug
     self.db.session.add(user)
     self.db.session.add(post)
     self.db.session.commit()
     self.login_user(user)
     resp = self.app.get('/posts/' + slug + '/edit')
     self.assertEqual(resp.status_code, 401)
예제 #13
0
 def testPostUpdateWrongUser(self):
     user = build_user(user_type='user')
     post = build_post()
     slug = post.slug
     self.db.session.add(user)
     self.db.session.add(post)
     self.db.session.commit()
     self.login_user(user)
     resp = self.app.post(
         '/posts/' + slug,
         data={'title': 'New title', 'body': 'New body', 'slug': 'new'})
     self.assertEqual(resp.status_code, 401)
예제 #14
0
 def testPostEditWithTags(self):
     user = build_user(user_type='user')
     tags = [Tag(name='First tag'), Tag(name='Second tag')]
     post = build_post(user=user, tags=tags)
     slug = post.slug
     self.db.session.add(post)
     self.db.session.commit()
     self.login_user(user)
     resp = self.app.get('/posts/' + slug + '/edit')
     self.assertEqual(resp.status_code, 200)
     self.assertTrue(b'First tag' in resp.data)
     self.assertTrue(b'Second tag' in resp.data)
예제 #15
0
 def testPostDelete(self):
     user = build_user(user_type='user')
     post = build_post(user=user)
     slug = post.slug
     self.db.session.add(user)
     self.db.session.add(post)
     self.db.session.commit()
     self.login_user(user)
     resp = self.app.post('/posts/' + slug + '/destroy')
     self.assert_redirected(resp, '/admin')
     self.assert_flashes('Post deleted', 'success')
     post = Post.query.filter(Post.slug == slug).first()
     self.assertIsNone(post)
예제 #16
0
 def testPostCreateDuplicateSlug(self):
     user = build_user(user_type='user')
     post = build_post()
     slug = post.slug
     self.db.session.add(user)
     self.db.session.add(post)
     self.db.session.commit()
     self.login_user(user)
     resp = self.app.post(
         '/posts',
         data={'title': 'My post', 'body': 'Posting it', 'slug': slug})
     self.assertEqual(resp.status_code, 200)
     self.assertTrue(b'This slug is taken.' in resp.data)
예제 #17
0
 def testPostCommentNoBody(self):
     user = build_user(user_type='commenter')
     post = build_post()
     slug = post.slug
     self.db.session.add(user)
     self.db.session.add(post)
     self.db.session.commit()
     self.login_user(user)
     resp = self.app.post('/posts/' + slug + '/comments',
                          data={'body': ''})
     self.assertEqual(resp.status_code, 200)
     comment = Comment.query.first()
     self.assertIsNone(comment)
     self.assertTrue(b'This field is required.' in resp.data)
예제 #18
0
 def testPostComment(self):
     user = build_user(user_type='commenter')
     post = build_post()
     slug = post.slug
     self.db.session.add(user)
     self.db.session.add(post)
     self.db.session.commit()
     self.login_user(user)
     user_id = user.id
     resp = self.app.post('/posts/' + slug + '/comments',
                          data={'body': 'First!'})
     self.assert_redirected(resp, '/posts/' + slug + '/comments')
     comment = Comment.query.first()
     self.assertEqual(comment.body, 'First!')
     self.assertEqual(comment.user_id, user_id)
     self.assertEqual(comment.post.slug, slug)
예제 #19
0
 def testPostUpdatePublishingSpecificTime(self):
     user = build_user(user_type='user')
     post = build_post(user=user, published_at=None)
     slug = post.slug
     self.db.session.add(user)
     self.db.session.add(post)
     self.db.session.commit()
     self.login_user(user)
     post = Post.query.filter(Post.slug == slug).first()
     resp = self.app.post(
         '/posts/' + slug,
         data={'title': 'New title', 'body': post.body, 'slug': post.slug,
               'published_at': '2017-06-01T08:30'})
     self.assert_redirected(resp, '/posts/' + post.slug)
     new_post = Post.query.filter(Post.slug == post.slug).first()
     self.assertTrue(new_post.published)
     self.assertEqual(new_post.published_at, datetime(2017, 6, 1, 8, 30))
예제 #20
0
 def testPostUpdate(self):
     user = build_user(user_type='user')
     post = build_post(user=user)
     slug = post.slug
     self.db.session.add(user)
     self.db.session.add(post)
     self.db.session.commit()
     self.login_user(user)
     post = Post.query.filter(Post.slug == slug).first()
     resp = self.app.post(
         '/posts/' + slug,
         data={'title': 'New title', 'body': post.body, 'slug': post.slug})
     self.assert_redirected(resp, '/posts/' + post.slug)
     new_post = Post.query.filter(Post.slug == slug).first()
     self.assertEqual(new_post.title, 'New title')
     self.assertEqual(new_post.slug, post.slug)
     self.assertEqual(new_post.body, post.body)
예제 #21
0
 def testPostUpdateMissingData(self):
     user = build_user(user_type='user')
     post = build_post(user=user)
     slug = post.slug
     old_title = post.title
     self.db.session.add(user)
     self.db.session.add(post)
     self.db.session.commit()
     self.login_user(user)
     post = Post.query.filter(Post.slug == slug).first()
     resp = self.app.post(
         '/posts/' + slug,
         data={'title': '', 'body': post.body, 'slug': post.slug})
     self.assertEqual(resp.status_code, 200)
     self.assertTrue(b'This field is required' in resp.data)
     post = Post.query.filter(Post.slug == slug).first()
     self.assertEqual(post.title, old_title)
예제 #22
0
 def testPostUpdatePublishing(self):
     user = build_user(user_type='user')
     post = build_post(user=user, published_at=None)
     slug = post.slug
     self.db.session.add(user)
     self.db.session.add(post)
     self.db.session.commit()
     self.login_user(user)
     post = Post.query.filter(Post.slug == slug).first()
     resp = self.app.post(
         '/posts/' + slug,
         data={'title': 'New title', 'body': post.body, 'slug': post.slug,
               'published': True})
     self.assert_redirected(resp, '/posts/' + post.slug)
     new_post = Post.query.filter(Post.slug == slug).first()
     self.assertTrue(new_post.published)
     self.assertTrue(new_post.published_at)
     diff = datetime.utcnow() - new_post.published_at
     self.assertTrue(diff < timedelta(minutes=1))
예제 #23
0
 def testPostUpdateWithTags(self):
     user = build_user(user_type='user')
     tags = [Tag(name='First tag'), Tag(name='Second tag')]
     post = build_post(user=user, tags=tags)
     slug = post.slug
     self.db.session.add(user)
     self.db.session.add(post)
     self.db.session.commit()
     self.login_user(user)
     post = Post.query.filter(Post.slug == slug).first()
     resp = self.app.post(
         '/posts/' + slug,
         data={
             'title': 'New title',
             'body': post.body,
             'slug': post.slug,
             'tag_names': 'Second tag, New tag'})
     self.assert_redirected(resp, '/posts/' + post.slug)
     new_post = Post.query.filter(Post.slug == slug).first()
     self.assertEqual(len(new_post.tags), 2)
     self.assertEqual(new_post.tag_names, 'Second tag, New tag')
예제 #24
0
 def testPostShowUnpublished(self):
     post = build_post(published_at=None)
     self.db.session.add(post)
     self.db.session.commit()
     resp = self.app.get('/posts/' + post.slug)
     self.assertEqual(resp.status_code, 404)
예제 #25
0
 def testPostShowFoundHTMLBody(self):
     post = build_post(body='<p>Some html</p><p>In here</p>')
     self.db.session.add(post)
     self.db.session.commit()
     resp = self.app.get('/posts/' + post.slug)
     self.assertTrue(post.body.encode('utf-8') in resp.data)