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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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))
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)
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)
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))
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')
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)
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)