"""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()