1
0
mirror of https://github.com/spl0k/supysonic.git synced 2024-12-22 17:06:17 +00:00

Remove the ability to skip XSD validation in tests

We have int folder ids for long now, this isn't needed anymore
This commit is contained in:
Alban Féron 2020-11-09 12:03:05 +01:00
parent 1be526b8d2
commit e0946c0e32
No known key found for this signature in database
GPG Key ID: 8CE0313646D16165
3 changed files with 11 additions and 22 deletions

View File

@ -1,9 +1,7 @@
# coding: utf-8
#
# This file is part of Supysonic. # This file is part of Supysonic.
# Supysonic is a Python implementation of the Subsonic server API. # Supysonic is a Python implementation of the Subsonic server API.
# #
# Copyright (C) 2017-2018 Alban 'spl0k' Féron # Copyright (C) 2017-2020 Alban 'spl0k' Féron
# #
# Distributed under terms of the GNU AGPLv3 license. # Distributed under terms of the GNU AGPLv3 license.
@ -45,9 +43,7 @@ class ApiTestBase(TestBase):
path = path_replace_regexp.sub(r"/sub:\1", path) path = path_replace_regexp.sub(r"/sub:\1", path)
return elem.xpath(path, namespaces=NSMAP) return elem.xpath(path, namespaces=NSMAP)
def _make_request( def _make_request(self, endpoint, args={}, tag=None, error=None, skip_post=False):
self, endpoint, args={}, tag=None, error=None, skip_post=False, skip_xsd=False
):
""" """
Makes both a GET and POST requests against the API, assert both get the same response. Makes both a GET and POST requests against the API, assert both get the same response.
If the user isn't provided with the 'u' and 'p' in 'args', the default 'alice' is used. If the user isn't provided with the 'u' and 'p' in 'args', the default 'alice' is used.
@ -58,7 +54,6 @@ class ApiTestBase(TestBase):
:param tag: topmost expected element, right beneath 'subsonic-response' :param tag: topmost expected element, right beneath 'subsonic-response'
:param error: if the given 'args' should produce an error at 'endpoint', this is the expected error code :param error: if the given 'args' should produce an error at 'endpoint', this is the expected error code
:param skip_post: don't do the POST request :param skip_post: don't do the POST request
:param skip_xsd: skip XSD validation
:return: a 2-tuple (resp, child) if no error, where 'resp' is the full response object, 'child' a :return: a 2-tuple (resp, child) if no error, where 'resp' is the full response object, 'child' a
'lxml.etree.Element' mathching 'tag' (if any). If there's an error (when expected), only returns 'lxml.etree.Element' mathching 'tag' (if any). If there's an error (when expected), only returns
@ -81,8 +76,7 @@ class ApiTestBase(TestBase):
self.assertEqual(rg.data, rp.data) self.assertEqual(rg.data, rp.data)
xml = etree.fromstring(rg.data) xml = etree.fromstring(rg.data)
if not skip_xsd: self.schema.assert_(xml)
self.schema.assert_(xml)
if xml.get("status") == "ok": if xml.get("status") == "ok":
self.assertIsNone(error) self.assertIsNone(error)

View File

@ -1,5 +1,4 @@
#!/usr/bin/env python #!/usr/bin/env python
# coding: utf-8
# #
# This file is part of Supysonic. # This file is part of Supysonic.
# Supysonic is a Python implementation of the Subsonic server API. # Supysonic is a Python implementation of the Subsonic server API.
@ -53,15 +52,15 @@ class AnnotationTestCase(ApiTestBase):
def test_star(self): def test_star(self):
self._make_request("star", error=10) self._make_request("star", error=10)
self._make_request("star", {"id": "unknown"}, error=0, skip_xsd=True) self._make_request("star", {"id": "unknown"}, error=0)
self._make_request("star", {"albumId": "unknown"}, error=0) self._make_request("star", {"albumId": "unknown"}, error=0)
self._make_request("star", {"artistId": "unknown"}, error=0) self._make_request("star", {"artistId": "unknown"}, error=0)
self._make_request("star", {"id": str(uuid.uuid4())}, error=70, skip_xsd=True) self._make_request("star", {"id": str(uuid.uuid4())}, error=70)
self._make_request("star", {"albumId": str(uuid.uuid4())}, error=70) self._make_request("star", {"albumId": str(uuid.uuid4())}, error=70)
self._make_request("star", {"artistId": str(uuid.uuid4())}, error=70) self._make_request("star", {"artistId": str(uuid.uuid4())}, error=70)
self._make_request("star", {"id": str(self.artistid)}, error=70, skip_xsd=True) self._make_request("star", {"id": str(self.artistid)}, error=70)
self._make_request("star", {"id": str(self.albumid)}, error=70, skip_xsd=True) self._make_request("star", {"id": str(self.albumid)}, error=70)
self._make_request("star", {"id": str(self.trackid)}, skip_post=True) self._make_request("star", {"id": str(self.trackid)}, skip_post=True)
with db_session: with db_session:
prefs = ClientPrefs.get( prefs = ClientPrefs.get(
@ -70,12 +69,12 @@ class AnnotationTestCase(ApiTestBase):
self.assertIn( self.assertIn(
"starred", Track[self.trackid].as_subsonic_child(self.user, prefs) "starred", Track[self.trackid].as_subsonic_child(self.user, prefs)
) )
self._make_request("star", {"id": str(self.trackid)}, error=0, skip_xsd=True) self._make_request("star", {"id": str(self.trackid)}, error=0)
self._make_request("star", {"id": str(self.folderid)}, skip_post=True) self._make_request("star", {"id": str(self.folderid)}, skip_post=True)
with db_session: with db_session:
self.assertIn("starred", Folder[self.folderid].as_subsonic_child(self.user)) self.assertIn("starred", Folder[self.folderid].as_subsonic_child(self.user))
self._make_request("star", {"id": str(self.folderid)}, error=0, skip_xsd=True) self._make_request("star", {"id": str(self.folderid)}, error=0)
self._make_request("star", {"albumId": str(self.folderid)}, error=0) self._make_request("star", {"albumId": str(self.folderid)}, error=0)
self._make_request("star", {"albumId": str(self.artistid)}, error=70) self._make_request("star", {"albumId": str(self.artistid)}, error=70)
@ -107,7 +106,7 @@ class AnnotationTestCase(ApiTestBase):
) )
self._make_request("unstar", error=10) self._make_request("unstar", error=10)
self._make_request("unstar", {"id": "unknown"}, error=0, skip_xsd=True) self._make_request("unstar", {"id": "unknown"}, error=0)
self._make_request("unstar", {"albumId": "unknown"}, error=0) self._make_request("unstar", {"albumId": "unknown"}, error=0)
self._make_request("unstar", {"artistId": "unknown"}, error=0) self._make_request("unstar", {"artistId": "unknown"}, error=0)

View File

@ -69,11 +69,7 @@ class BrowseTestCase(ApiTestBase):
self.assertEqual(Track.select().count(), 18) self.assertEqual(Track.select().count(), 18)
def test_get_music_folders(self): def test_get_music_folders(self):
# Do not validate against the XSD here, this is the only place where the API should return ids as ints rv, child = self._make_request("getMusicFolders", tag="musicFolders")
# all our ids are uuids :/
rv, child = self._make_request(
"getMusicFolders", tag="musicFolders", skip_xsd=True
)
self.assertEqual(len(child), 2) self.assertEqual(len(child), 2)
self.assertSequenceEqual( self.assertSequenceEqual(
sorted(self._xpath(child, "./musicFolder/@name")), sorted(self._xpath(child, "./musicFolder/@name")),