def test_body_field_required(post_user): author = get_user_by_username('post_user') failing_post = Post(title='Testing', author=author) db.session.add(failing_post) with pytest.raises(IntegrityError) as excinfo: db.session.commit() assert 'NOT NULL constraint failed: post.body' in str(excinfo.value)
def test_default_values(post_user): author = get_user_by_username('post_user') post = Post(title='Testing', body='Test Body', author=author) db.session.add(post) db.session.commit() new_post = Post.query.filter_by(title='Testing').first() assert new_post.status == Post.DRAFT assert new_post.created_on is not None assert new_post.modified_on is not None
def test_user_posts_only_filters_out_posts(users_with_posts): author2 = get_user_by_username('post_user2') posts = get_posts(user=author2, user_posts_only=True) post_ids = [post.id for post in posts] user_post_ids = Post.query.with_entities( Post.id).filter_by(user_id=author2.id).all() assert all([post_id[0] in post_ids for post_id in user_post_ids]) assert len(post_ids) == len(user_post_ids)
def test_cascade_delete(post_user): author = get_user_by_username('post_user') post = Post(title='Testing', body='Test Body', author=author) db.session.add(post) db.session.commit() db.session.delete(author) db.session.commit() new_post = Post.query.filter_by(title='Testing').first() assert new_post is None
def test_status_can_have_choices_only(post_user): author = get_user_by_username('post_user') with pytest.raises(KeyError) as excinfo: post = Post( title='Testing', body='Test Body', status='ABC', author=author ) assert 'ABC' in str(excinfo.value)
def test_post_created_with_minimum_fields(post_user): title = 'Test' body = 'Testing Post' author = get_user_by_username('post_user') post = Post(title=title, body=body, author=author) db.session.add(post) db.session.commit() new_post = Post.query.filter_by(title='Test').first() assert new_post.title == title assert new_post.body == body assert new_post.author == author
def test_result_sorted_by_created_on(users_with_posts): author2 = get_user_by_username('post_user2') posts = get_posts(user=author2) print(posts) for idx, post in enumerate(posts): try: next_post = posts[idx + 1] timedelta = post.created_on - next_post.created_on assert timedelta.microseconds > 0 except IndexError: pass
def test_all_user_posts_are_included(users_with_posts): author1 = get_user_by_username('post_user1') posts = get_posts(user=author1) post_ids = [post.id for post in posts] published_post_ids = Post.query.with_entities( Post.id).filter_by(status=Post.PUBLISHED).values() user_post_ids = Post.query.with_entities( Post.id).filter_by(user_id=author1.id).values() assert all([post_id in post_ids for post_id in published_post_ids]) assert all([post_id in post_ids for post_id in user_post_ids])
def test_modified_date_changes(post_user): author = get_user_by_username('post_user') post = Post(title='Testing', body='Test Body', author=author) db.session.add(post) db.session.commit() assert post.modified_on is not None old_value = post.modified_on # update the post post.title = 'Published' db.session.commit() timedelta = post.modified_on - old_value assert timedelta.microseconds > 0
def test_method_called_with_user_posts_only_argument_for_query_params(test_client, users_with_posts): m_get_posts = mock.MagicMock(return_value=[]) with mock.patch('api.post.views.get_posts', m_get_posts): headers = {'Authorization': 'Token post_user2_token'} response = test_client.get('/posts?filter=mine', headers=headers) assert m_get_posts.called args, kwargs = m_get_posts.call_args assert args == () assert kwargs == { 'user': get_user_by_username('post_user2'), 'user_posts_only': True }
def test_method_called_with_user_for_logged_in_user(test_client, users_with_posts): m_get_posts = mock.MagicMock(return_value=[]) with mock.patch('api.post.views.get_posts', m_get_posts): headers = {'Authorization': 'Token post_user1_token'} response = test_client.get('/posts', headers=headers) assert m_get_posts.called args, kwargs = m_get_posts.call_args assert args == () assert kwargs == { 'user': get_user_by_username('post_user1'), 'user_posts_only': False }
def test_post_author_is_logged_in_user(test_client, user_with_hashed_password): data = { 'title': 'Post 1', 'body': 'First post', 'status': Post.PUBLISHED } headers = { 'Authorization': 'Token secret_token_3' } response = test_client.post( '/posts', data=data, headers=headers ) expected_user = get_user_by_username('new_user_with_hashed_password') post = Post.query.get(json.loads(response.data)['id']) assert post.user_id == expected_user.id
def test_create_post_creates_new_post(post_user): title = 'Testing Post' body = 'Thisi is a test' status = Post.UNPUBLISHED author = get_user_by_username('post_user') initial_count = Post.query.count() post = create_post( title=title, body=body, status=status, author=author ) assert isinstance(post, Post) assert post.title == title assert post.body == body assert post.status == status assert post.author == author assert Post.query.count() == initial_count + 1
def test_given_username_get_user_by_username_returns_user(init_database): username = '******' user = get_user_by_username(username) assert isinstance(user, User) assert user.username == 'testing_user1'
def test_given_invalid_username_get_user_by_username_returns_none(init_database): username = '******' user = get_user_by_username(username) assert user is None