added NewsSource routes with tests
parent
095ef0b1db
commit
a02d696f9f
@ -0,0 +1,13 @@
|
||||
from marshmallow import Schema, fields
|
||||
|
||||
|
||||
class NewsSourceSchema(Schema):
|
||||
id = fields.Int(dump_only=True)
|
||||
created_date = fields.DateTime(dump_only=True)
|
||||
modified_date = fields.DateTime()
|
||||
url = fields.URL()
|
||||
source_name = fields.Str(required=True, error_messages={'required': 'NewsSource name is a required field'})
|
||||
source_type = fields.Str(required=True, error_messages={'required': 'NewsSource tyoe is a required field'})
|
||||
|
||||
class Meta:
|
||||
ordered = True
|
@ -1,5 +1,143 @@
|
||||
from news.app import welcome
|
||||
import datetime as dt
|
||||
from unittest import mock
|
||||
|
||||
def test_welcome_route():
|
||||
message = {"message": "welcome to news"}
|
||||
assert message == welcome()
|
||||
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))
|
||||
|
Loading…
Reference in New Issue