"""Test the direct delivery ERN XML model."""
import hashlib
from flexmock import flexmock
from deliveryhistory.connectors import s3
from deliveryhistory.models import delivery_xml
def _ern(right_share_percentages):
"""Build a minimal ERN file with the given RightSharePercentage values."""
controllers = ''.join(
'{0}'
''.format(value)
for value in right_share_percentages
)
return (
''
''
''
'{0}'
''
''
).format(controllers).encode('utf-8')
def test_get_delivery_type_takedown():
"""A RightSharePercentage of 0 marks the delivery as a takedown."""
(flexmock(s3)
.should_receive('get_object_body')
.and_return(_ern([0])))
assert delivery_xml.get_delivery_type(123) == delivery_xml.DELIVERY_TYPE_TAKEDOWN
def test_get_delivery_type_not_takedown():
"""A non-zero RightSharePercentage is not a takedown."""
(flexmock(s3)
.should_receive('get_object_body')
.and_return(_ern([100])))
assert delivery_xml.get_delivery_type(123) is None
def test_get_delivery_type_missing_file():
"""A missing ERN file resolves to no delivery type."""
(flexmock(s3)
.should_receive('get_object_body')
.and_return(None))
assert delivery_xml.get_delivery_type(123) is None
def test_get_delivery_type_no_job_id():
"""A missing job id resolves to no delivery type without hitting S3."""
assert delivery_xml.get_delivery_type(None) is None
def test_get_delivery_type_non_numeric_percentage():
"""A non-numeric RightSharePercentage is ignored; no type is resolved."""
(flexmock(s3)
.should_receive('get_object_body')
.and_return(_ern(['not-a-number'])))
assert delivery_xml.get_delivery_type(123) is None
def test_build_xml_key():
"""The S3 key is the md5 of the job id under the metadata prefix."""
digest = hashlib.md5(b'123').hexdigest()
assert delivery_xml._build_xml_key(123) == 'metadata/{0}-0.xml'.format(digest)