|
|
|
@ -3,14 +3,17 @@ from unittest import mock
|
|
|
|
|
|
|
|
|
|
import pytest
|
|
|
|
|
|
|
|
|
|
from news.app import get_articles, get_sources, add_source, get_source, delete_source
|
|
|
|
|
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):
|
|
|
|
|
assert [] == get_sources(rb_session)
|
|
|
|
|
result = get_sources(rb_session)
|
|
|
|
|
assert 200 == result.status
|
|
|
|
|
assert [] == result.content
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_get_news_sources(rb_session):
|
|
|
|
@ -22,44 +25,36 @@ def test_get_news_sources(rb_session):
|
|
|
|
|
rb_session.add(test_source)
|
|
|
|
|
rb_session.flush()
|
|
|
|
|
|
|
|
|
|
assert 1 == len(get_sources(rb_session))
|
|
|
|
|
result = get_sources(rb_session)
|
|
|
|
|
assert 200 == result.status
|
|
|
|
|
assert 1 == len(result.content)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_add_news_source(rb_session):
|
|
|
|
|
def test_add_news_source(rb_session, router):
|
|
|
|
|
test_source = {
|
|
|
|
|
'source_name': 'TEST',
|
|
|
|
|
'source_type': 'website',
|
|
|
|
|
'url': 'http://money.test.com'
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
mock_router = mock.Mock()
|
|
|
|
|
mock_router.configure_mock(
|
|
|
|
|
**{"reverse_url.return_value": "/mylocation"}
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
result = add_source(rb_session, test_source, mock_router)
|
|
|
|
|
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):
|
|
|
|
|
def test_add_news_source_error(rb_session, router):
|
|
|
|
|
"""Testing with missing required field"""
|
|
|
|
|
test_source = {
|
|
|
|
|
'source_type': 'website',
|
|
|
|
|
'url': 'http://money.test.com'
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
mock_router = mock.Mock()
|
|
|
|
|
mock_router.configure_mock(
|
|
|
|
|
**{"reverse_url.return_value": "/mylocation"}
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
result = add_source(rb_session, test_source, mock_router)
|
|
|
|
|
result = add_source(rb_session, test_source, router)
|
|
|
|
|
print(result.headers)
|
|
|
|
|
assert 400 == result.status
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_get_news_source(rb_session):
|
|
|
|
|
def test_get_news_source_by_id(rb_session):
|
|
|
|
|
test_source = NewsSource(url='http://money.test.com',
|
|
|
|
|
source_name='TEST',
|
|
|
|
|
source_type='website',
|
|
|
|
@ -117,11 +112,133 @@ def test_delete_news_source_404(rb_session):
|
|
|
|
|
|
|
|
|
|
# Articles
|
|
|
|
|
|
|
|
|
|
def test_get_empty_articles(rb_session):
|
|
|
|
|
assert get_articles(rb_session) == []
|
|
|
|
|
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_get_articles(rb_session):
|
|
|
|
|
def test_delete_article_404(rb_session):
|
|
|
|
|
source = NewsSource(url='http://money.test.com',
|
|
|
|
|
source_name='TEST',
|
|
|
|
|
source_type='website',
|
|
|
|
@ -131,7 +248,7 @@ def test_get_articles(rb_session):
|
|
|
|
|
article = NewsArticle(url='http://money.test.com/article',
|
|
|
|
|
title='article',
|
|
|
|
|
authors=['drew', 'jesse'],
|
|
|
|
|
publish_date=dt.datetime.utcnow(),
|
|
|
|
|
published_date=dt.datetime.utcnow(),
|
|
|
|
|
news_blob='article content',
|
|
|
|
|
news_source=source,
|
|
|
|
|
tags=[Tag(tag_name='article')]
|
|
|
|
@ -140,4 +257,6 @@ def test_get_articles(rb_session):
|
|
|
|
|
rb_session.add(article)
|
|
|
|
|
rb_session.flush()
|
|
|
|
|
|
|
|
|
|
assert 1 == len(get_articles(rb_session))
|
|
|
|
|
result = delete_article(rb_session, 2)
|
|
|
|
|
|
|
|
|
|
assert 404 == result.status
|
|
|
|
|