import datetime
import re
from unittest.mock import patch, Mock
import arrow
from lxml import etree
from federation.entities.base import Post, Profile
from federation.entities.diaspora.entities import DiasporaPost
from federation.entities.diaspora.utils import (
get_full_xml_representation, format_dt, add_element_to_doc)
from federation.entities.utils import get_base_attributes
class TestGetBaseAttributes:
def test_get_base_attributes_returns_only_intended_attributes(self, diasporapost, diasporaprofile):
entity = diasporapost
attrs = get_base_attributes(entity).keys()
assert set(attrs) == {
'activity', 'actor_id', 'created_at', 'guid', 'handle', 'id',
'provider_display_name', 'public', 'raw_content'}
entity = diasporaprofile
attrs = get_base_attributes(entity).keys()
assert set(attrs) == {
'created_at', 'guid', 'handle', 'id', 'image_urls', 'inboxes',
'name', 'nsfw', 'public', 'raw_content', 'tag_list'}
class TestGetFullXMLRepresentation:
@patch.object(DiasporaPost, "validate", new=Mock())
def test_returns_xml_document(self):
entity = Post()
document = get_full_xml_representation(entity, "")
document = re.sub(r".*", "", document) # Dates are annoying to compare
assert document == "" \
"false" \
""
class TestFormatDt:
def test_formatted_string_returned_from_tz_aware_datetime(self):
dt = arrow.get(datetime.datetime(2017, 1, 28, 3, 2, 3), "Europe/Helsinki").datetime
assert format_dt(dt) == "2017-01-28T01:02:03Z"
def test_add_element_to_doc():
# Replacing value
doc = etree.fromstring("foobarbarfoo"
"")
add_element_to_doc(doc, "parent_author_signature", "newsig")
assert etree.tostring(doc) == b"foobarnewsig" \
b""
# Adding value to an empty tag
doc = etree.fromstring("foobar")
add_element_to_doc(doc, "parent_author_signature", "newsig")
assert etree.tostring(doc) == b"foobarnewsig" \
b""
# Adding missing tag
doc = etree.fromstring("foobar")
add_element_to_doc(doc, "parent_author_signature", "newsig")
assert etree.tostring(doc) == b"foobarnewsig" \
b""