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