101 lines
3.2 KiB
Python
101 lines
3.2 KiB
Python
import json
|
|
import xml.etree.ElementTree as ET
|
|
|
|
import pytest
|
|
|
|
import funkwhale_api
|
|
from funkwhale_api.subsonic import renderers
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"data,expected",
|
|
[
|
|
(
|
|
{"hello": "world"},
|
|
{
|
|
"status": "ok",
|
|
"version": "1.16.0",
|
|
"type": "funkwhale",
|
|
"funkwhaleVersion": funkwhale_api.__version__,
|
|
"serverVersion": funkwhale_api.__version__,
|
|
"openSubsonic": "true",
|
|
"hello": "world",
|
|
},
|
|
),
|
|
(
|
|
{
|
|
"hello": "world",
|
|
"error": {"code": 10, "message": "something went wrong"},
|
|
},
|
|
{
|
|
"status": "failed",
|
|
"version": "1.16.0",
|
|
"type": "funkwhale",
|
|
"funkwhaleVersion": funkwhale_api.__version__,
|
|
"serverVersion": funkwhale_api.__version__,
|
|
"openSubsonic": "true",
|
|
"hello": "world",
|
|
"error": {"code": 10, "message": "something went wrong"},
|
|
},
|
|
),
|
|
(
|
|
{"hello": "world", "detail": "something went wrong"},
|
|
{
|
|
"status": "failed",
|
|
"version": "1.16.0",
|
|
"type": "funkwhale",
|
|
"funkwhaleVersion": funkwhale_api.__version__,
|
|
"serverVersion": funkwhale_api.__version__,
|
|
"openSubsonic": "true",
|
|
"hello": "world",
|
|
"error": {"code": 0, "message": "something went wrong"},
|
|
},
|
|
),
|
|
],
|
|
)
|
|
def test_structure_payload(data, expected):
|
|
assert renderers.structure_payload(data) == expected
|
|
|
|
|
|
def test_json_renderer():
|
|
data = {"hello": "world"}
|
|
expected = {
|
|
"subsonic-response": {
|
|
"status": "ok",
|
|
"version": "1.16.0",
|
|
"type": "funkwhale",
|
|
"funkwhaleVersion": funkwhale_api.__version__,
|
|
"serverVersion": funkwhale_api.__version__,
|
|
"openSubsonic": "true",
|
|
"hello": "world",
|
|
}
|
|
}
|
|
renderer = renderers.SubsonicJSONRenderer()
|
|
assert json.loads(renderer.render(data)) == expected
|
|
|
|
|
|
def test_xml_renderer_dict_to_xml():
|
|
payload = {
|
|
"hello": "world",
|
|
"item": [{"this": 1, "value": "text"}, {"some": "node"}],
|
|
"list": [1, 2],
|
|
"some-tag": renderers.TagValue("foo"),
|
|
}
|
|
expected = """<?xml version="1.0" encoding="UTF-8"?>
|
|
<key hello="world"><item this="1">text</item><item some="node" /><list>1</list><list>2</list><some-tag>foo</some-tag></key>""" # noqa
|
|
result = renderers.dict_to_xml_tree("key", payload)
|
|
exp = ET.fromstring(expected)
|
|
assert ET.tostring(result) == ET.tostring(exp)
|
|
|
|
|
|
def test_xml_renderer():
|
|
payload = {"hello": "world"}
|
|
expected = '<?xml version="1.0" encoding="UTF-8"?>\n<subsonic-response funkwhaleVersion="{}" hello="world" openSubsonic="true" serverVersion="{}" status="ok" type="funkwhale" version="1.16.0" xmlns="http://subsonic.org/restapi" />' # noqa
|
|
version = funkwhale_api.__version__
|
|
expected = expected.format(version, version).encode()
|
|
|
|
renderer = renderers.SubsonicXMLRenderer()
|
|
rendered = renderer.render(payload)
|
|
|
|
assert rendered == expected
|