"""Tests for the API utilities."""
from collections import namedtuple
from unittest.mock import MagicMock
from marshmallow import fields
from marshmallow import Schema
from marshmallow import validate
import pytest
from podcast import config
from podcast.utils import api_utils
from podcast.utils.exc import OwsError
Context = namedtuple('Context', 'identity_uuid context_type')
class DummyEpisodeSchema(Schema):
"""Dummy schema for testing purposes."""
episode_number = fields.Integer(validate=validate.Range(min=1))
def test_clean_html():
"""Test clean html."""
assert api_utils.clean_html('strong') == 'strong'
assert api_utils.clean_html('
p
') == 'p
'
assert api_utils.clean_html('em') == 'em'
assert api_utils.clean_html('u') == 'u'
assert api_utils.clean_html('') == ''
assert api_utils.clean_html('li') == 'li'
assert api_utils.clean_html('a') == 'a'
assert api_utils.clean_html('
description with br tags
') == '
description with br tags
'
assert api_utils.clean_html('attribute_gone') \
== 'attribute_gone'
assert api_utils.clean_html('') \
== '<script>script</script>'
def test_asset_url(monkeypatch):
"""Test url for output assets."""
monkeypatch.setattr(config, 'OUTPUT_CDN_BASE_URL', 'mybucket.com')
result = api_utils.asset_url('filename.mp3')
assert result == 'https://mybucket.com/filename.mp3'
def test_get_user_id_uuid(monkeypatch):
"""Test get uuid."""
context = Context(identity_uuid='abcabc', context_type='profile')
monkeypatch.setattr(api_utils, '_get_request_context', MagicMock(return_value=context))
result = api_utils._get_uuid()
assert result == 'abcabc'
def test_get_user_id_error(monkeypatch):
"""Test no user."""
context = Context(identity_uuid=None, context_type='error')
monkeypatch.setattr(api_utils, '_get_request_context', MagicMock(return_value=context))
with pytest.raises(OwsError):
api_utils._get_uuid()