import datetime as dt from unittest import mock import pytest from news.app import get_articles, get_sources, add_source, get_source, delete_source from news.models import NewsArticle, NewsSource, Category, Tag # Sources def test_get_empty__news_sources(rb_session): assert [] == get_sources(rb_session) 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() assert 1 == len(get_sources(rb_session)) def test_add_news_source(rb_session): 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) assert 201 == result.status assert 'location' in result.headers.keys() def test_add_news_source_error(rb_session): """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) print(result.headers) assert 400 == result.status def test_get_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 = 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_articles(rb_session): assert get_articles(rb_session) == [] def test_get_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'], publish_date=dt.datetime.utcnow(), news_blob='article content', news_source=source, tags=[Tag(tag_name='article')] ) rb_session.add(article) rb_session.flush() assert 1 == len(get_articles(rb_session))