import datetime
import pytest
import feedgenerator
FIXT_FEED = dict(
title="Poynter E-Media Tidbits",
link="http://www.poynter.org/column.asp?id=31",
description="""A group Weblog by the sharpest minds in online media/journalism/publishing.
Umlauts: äöüßÄÖÜ
Chinese: 老师是四十四,是不是?
Finnish: Mustan kissan paksut posket. (ah, no special chars) Kärpänen sanoi kärpäselle: tuu kattoon kattoon ku kaveri tapettiin tapettiin.
""",
language="en"
)
FIXT_ITEM = dict(
title="Hello",
link="http://www.holovaty.com/täst/",
description="Testing.",
content="Full content of our testing entry.",
pubdate=datetime.datetime(2016,8,11,0,0,0,0),
)
EXPECTED_RESULT_RSS = """
Poynter E-Media Tidbitshttp://www.poynter.org/column.asp?id=31A group Weblog by the sharpest minds in online media/journalism/publishing.
Umlauts: äöüßÄÖÜ
Chinese: 老师是四十四,是不是?
Finnish: Mustan kissan paksut posket. (ah, no special chars) Kärpänen sanoi kärpäselle: tuu kattoon kattoon ku kaveri tapettiin tapettiin.
en%DATE%Hellohttp://www.holovaty.com/t%C3%A4st/Testing.Thu, 11 Aug 2016 00:00:00 -0000"""
EXPECTED_RESULT_ATOM = """
Poynter E-Media Tidbitshttp://www.poynter.org/column.asp?id=31%DATE%A group Weblog by the sharpest minds in online media/journalism/publishing.
Umlauts: äöüßÄÖÜ
Chinese: 老师是四十四,是不是?
Finnish: Mustan kissan paksut posket. (ah, no special chars) Kärpänen sanoi kärpäselle: tuu kattoon kattoon ku kaveri tapettiin tapettiin.
Hello2016-08-11T00:00:00Z2016-08-11T00:00:00Ztag:www.holovaty.com,2016-08-11:/t%C3%A4st/Testing.Full content of our testing entry."""
ENCODING = 'utf-8'
def build_expected_rss_result(feed, expected_result, encoding):
# Result's date is of course different from the date in the fixture.
# So make them equal!
d = feedgenerator.rfc2822_date(feed.latest_post_date())
s = expected_result.replace('%DATE%', d)
if encoding:
return s.encode(encoding)
else:
return s
def build_expected_atom_result(feed, expected_result, encoding):
# Result's date is of course different from the date in the fixture.
# So make them equal!
d = feedgenerator.rfc3339_date(feed.latest_post_date())
s = expected_result.replace('%DATE%', d)
if encoding:
return s.encode(encoding)
else:
return s
def test_000_types():
for k, v in FIXT_FEED.items():
assert isinstance(v, str)
for k, v in FIXT_ITEM.items():
if k == "pubdate" or k == "updateddate":
assert isinstance(v, datetime.datetime)
else:
assert isinstance(v, str)
assert isinstance(EXPECTED_RESULT_RSS, str)
def test_001_string_results_rss():
#import ipdb; ipdb.set_trace()
feed = feedgenerator.Rss201rev2Feed(**FIXT_FEED)
feed.add_item(**FIXT_ITEM)
result = feed.writeString(ENCODING)
# On Python 3, result of feedgenerator is a unicode string!
# So do not encode our expected_result.
expected_result = build_expected_rss_result(feed, EXPECTED_RESULT_RSS, None)
assert isinstance(result, type(expected_result))
assert result == expected_result
def test_002_string_results_atom():
#import ipdb; ipdb.set_trace()
feed = feedgenerator.Atom1Feed(**FIXT_FEED)
feed.add_item(**FIXT_ITEM)
result = feed.writeString(ENCODING)
# On Python 3, result of feedgenerator is a unicode string!
# So do not encode our expected_result.
expected_result = build_expected_atom_result(feed, EXPECTED_RESULT_ATOM, None)
assert isinstance(result, type(expected_result))
assert result == expected_result
@pytest.mark.parametrize("description, subtitle, fragment, nonfragment", [
# Neither description nor subtitle are provided
(None, None, None, ""),
("", "", None, ""),
# Description is provided
("description", None, "description", None),
("description", "", "description", None),
# Subtitle is provided
(None, "subtitle", "subtitle", None),
("", "subtitle", "subtitle", None),
# Both description & subtitle are provided; subtitle takes precedence
("description", "subtitle", "subtitle", "description"),
])
def test_subtitle(description, subtitle, fragment, nonfragment):
"""Test regression for https://github.com/getpelican/feedgenerator/issues/30.
We test against all four possible combinations of description x
subtitle parameters and additionally for None and "".
description, subtitle are the values for the respective
feed-parameters.
fragment and nonfragment are text fragments that should be in the
expected result or not.
"""
FIXT_FEED = dict(
title="title",
link="https://example.com",
description=description,
subtitle=subtitle,
)
feed = feedgenerator.Atom1Feed(**FIXT_FEED)
result = feed.writeString(ENCODING)
if fragment:
assert fragment in result
if nonfragment:
assert nonfragment not in result