You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
news/tests/test_app_routes.py

263 lines
8.1 KiB
Python

import datetime as dt
from unittest import mock
import pytest
from news.app import get_articles, get_sources, add_source, get_source, delete_source, add_article, get_article, \
delete_article
from news.models import NewsArticle, NewsSource, Category, Tag
# Sources
def test_get_empty__news_sources(rb_session):
result = get_sources(rb_session)
assert 200 == result.status
assert [] == result.content
def test_get_news_sources(rb_session):
test_source = NewsSource(url='http://money.test.com',
source_name='TEST',
source_type='website',
categories=[Category(category_name='finance')]
)
rb_session.add(test_source)
rb_session.flush()
result = get_sources(rb_session)
assert 200 == result.status
assert 1 == len(result.content)
def test_add_news_source(rb_session, router):
test_source = {
'source_name': 'TEST',
'source_type': 'website',
'url': 'http://money.test.com'
}
result = add_source(rb_session, test_source, router)
assert 201 == result.status
assert 'location' in result.headers.keys()
def test_add_news_source_error(rb_session, router):
"""Testing with missing required field"""
test_source = {
'source_type': 'website',
'url': 'http://money.test.com'
}
result = add_source(rb_session, test_source, router)
print(result.headers)
assert 400 == result.status
def test_get_news_source_by_id(rb_session):
test_source = NewsSource(url='http://money.test.com',
source_name='TEST',
source_type='website',
categories=[Category(category_name='finance')]
)
rb_session.add(test_source)
rb_session.flush()
result = get_source(rb_session, 1)
assert 200 == result.status
def test_get_news_source_404_error(rb_session):
test_source = NewsSource(url='http://money.test.com',
source_name='TEST',
source_type='website',
categories=[Category(category_name='finance')]
)
rb_session.add(test_source)
rb_session.flush()
result = get_source(rb_session, 2)
assert 404 == result.status
def test_delete_news_source(rb_session):
test_source = NewsSource(url='http://money.test.com',
source_name='TEST',
source_type='website',
categories=[Category(category_name='finance')]
)
rb_session.add(test_source)
rb_session.flush()
result = delete_source(rb_session, 1)
assert 200 == result.status
def test_delete_news_source_404(rb_session):
test_source = NewsSource(url='http://money.test.com',
source_name='TEST',
source_type='website',
categories=[Category(category_name='finance')]
)
rb_session.add(test_source)
rb_session.flush()
result = delete_source(rb_session, 2)
assert 404 == result.status
# Articles
def test_get_empty_news_articles(rb_session):
result = get_articles(rb_session)
assert 200 == result.status
assert [] == result.content
def test_get_news_articles(rb_session):
source = NewsSource(url='http://money.test.com',
source_name='TEST',
source_type='website',
categories=[Category(category_name='finance')]
)
article = NewsArticle(url='http://money.test.com/article',
title='article',
authors=['drew', 'jesse'],
published_date=dt.datetime.utcnow(),
news_blob='article content',
news_source=source,
tags=[Tag(tag_name='article')]
)
rb_session.add(article)
rb_session.flush()
result = get_articles(rb_session)
assert 200 == result.status
assert 1 == len(result.content)
def test_add_news_article(rb_session, router):
news_source = NewsSource(url='http://money.test.com',
source_name='TEST',
source_type='website',
categories=[Category(category_name='finance')]
)
rb_session.add(news_source)
rb_session.flush()
news_article_data = {
"news_source_id": 1,
"url": "http://money.test.com/article",
"title": "article",
"authors": ["drew", "jesse"],
"published_date": dt.datetime.utcnow(),
"news_blob": "Here's all the great content"
}
result = add_article(rb_session, news_article_data, router)
assert 201 == result.status
def test_add_news_article_error(rb_session, router):
"""Testing with missing required field"""
news_source = NewsSource(url='http://money.test.com',
source_name='TEST',
source_type='website',
categories=[Category(category_name='finance')]
)
rb_session.add(news_source)
rb_session.flush()
news_article_data = {
"news_source_id": 1,
"title": "article",
"authors": ["drew", "jesse"],
"published_date": dt.datetime.utcnow(),
"news_blob": "Here's all the great content"
}
result = add_article(rb_session, news_article_data, router)
assert 400 == result.status
def test_get_article_by_id(rb_session):
source = NewsSource(url='http://money.test.com',
source_name='TEST',
source_type='website',
categories=[Category(category_name='finance')]
)
article = NewsArticle(url='http://money.test.com/article',
title='article',
authors=['drew', 'jesse'],
published_date=dt.datetime.utcnow(),
news_blob='article content',
news_source=source,
tags=[Tag(tag_name='article')]
)
rb_session.add(article)
rb_session.flush()
result = get_article(rb_session, 1)
assert 200 == result.status
def test_delete_article_by_id(rb_session):
source = NewsSource(url='http://money.test.com',
source_name='TEST',
source_type='website',
categories=[Category(category_name='finance')]
)
article = NewsArticle(url='http://money.test.com/article',
title='article',
authors=['drew', 'jesse'],
published_date=dt.datetime.utcnow(),
news_blob='article content',
news_source=source,
tags=[Tag(tag_name='article')]
)
rb_session.add(article)
rb_session.flush()
result = delete_article(rb_session, 1)
assert 200 == result.status
def test_delete_article_404(rb_session):
source = NewsSource(url='http://money.test.com',
source_name='TEST',
source_type='website',
categories=[Category(category_name='finance')]
)
article = NewsArticle(url='http://money.test.com/article',
title='article',
authors=['drew', 'jesse'],
published_date=dt.datetime.utcnow(),
news_blob='article content',
news_source=source,
tags=[Tag(tag_name='article')]
)
rb_session.add(article)
rb_session.flush()
result = delete_article(rb_session, 2)
assert 404 == result.status