1
0
mirror of https://github.com/spl0k/supysonic.git synced 2024-09-19 19:01:03 +00:00

Use test discovery rather than explicit suites

This commit is contained in:
Alban Féron 2021-11-20 21:01:00 +01:00
parent 8ab9f444b7
commit b4e737c243
No known key found for this signature in database
GPG Key ID: 8CE0313646D16165
14 changed files with 48 additions and 174 deletions

View File

@ -16,7 +16,7 @@ jobs:
- 3.7 - 3.7
- 3.8 - 3.8
- 3.9 - 3.9
- "3.10" #- "3.10"
fail-fast: false fail-fast: false
steps: steps:
- name: Checkout - name: Checkout
@ -31,8 +31,8 @@ jobs:
pip install -r ci-requirements.txt pip install -r ci-requirements.txt
- name: Run tests - name: Run tests
run: | run: |
coverage run setup.py test coverage run -m unittest
coverage run -a setup.py test --test-suite tests.with_net coverage run -a -m unittest tests.net.suite
- name: Upload coverage - name: Upload coverage
uses: codecov/codecov-action@v1.0.15 uses: codecov/codecov-action@v1.0.15
if: ${{ !cancelled() }} if: ${{ !cancelled() }}

View File

@ -13,7 +13,7 @@ Current supported features are:
* user or random playlists * user or random playlists
* cover art * cover art
* starred tracks/albums and ratings * starred tracks/albums and ratings
* [Last.FM][lastfm] scrobbling * [Last.fm][lastfm] scrobbling
* Jukebox mode * Jukebox mode
Supysonic currently targets the version 1.10.2 of the Subsonic API. For more Supysonic currently targets the version 1.10.2 of the Subsonic API. For more
@ -65,9 +65,13 @@ in-browser debugging among other things. To start said server:
$ export FLASK_ENV=development $ export FLASK_ENV=development
$ flask run $ flask run
And there's also the tests: And there's also the tests (which require `lxml` to run):
$ python setup.py test $ pip install lxml
$ python setup.py test --test-suite tests.with_net $ python -m unittest
$ python -m unittest tests.net.suite
The last command runs a few tests that make HTTP requests to remote third-party
services (namely Last.fm and ChartLyrics).
[flask]: https://flask.palletsprojects.com/ [flask]: https://flask.palletsprojects.com/

View File

@ -9,7 +9,4 @@
from setuptools import setup from setuptools import setup
if __name__ == "__main__": if __name__ == "__main__":
setup( setup()
test_suite="tests.suite",
tests_require=["lxml"],
)

View File

@ -6,35 +6,11 @@
# #
# Distributed under terms of the GNU AGPLv3 license. # Distributed under terms of the GNU AGPLv3 license.
import unittest import os.path
from . import base
from . import managers
from . import api
from . import frontend
from .issue85 import Issue85TestCase
from .issue101 import Issue101TestCase
from .issue129 import Issue129TestCase
from .issue133 import Issue133TestCase
from .issue139 import Issue139TestCase
from .issue148 import Issue148TestCase
from .issue221 import Issue221TestCase
def suite(): def load_tests(loader, tests, pattern):
suite = unittest.TestSuite() this_dir = os.path.dirname(__file__)
tests.addTests(loader.discover(start_dir=this_dir, pattern="test*.py"))
suite.addTest(base.suite()) tests.addTests(loader.discover(start_dir=this_dir, pattern="issue*.py"))
suite.addTest(managers.suite()) return tests
suite.addTest(api.suite())
suite.addTest(frontend.suite())
suite.addTest(unittest.makeSuite(Issue85TestCase))
suite.addTest(unittest.makeSuite(Issue101TestCase))
suite.addTest(unittest.makeSuite(Issue129TestCase))
suite.addTest(unittest.makeSuite(Issue133TestCase))
suite.addTest(unittest.makeSuite(Issue139TestCase))
suite.addTest(unittest.makeSuite(Issue148TestCase))
suite.addTest(unittest.makeSuite(Issue221TestCase))
return suite

View File

@ -4,39 +4,3 @@
# Copyright (C) 2017 Alban 'spl0k' Féron # Copyright (C) 2017 Alban 'spl0k' Féron
# #
# Distributed under terms of the GNU AGPLv3 license. # Distributed under terms of the GNU AGPLv3 license.
import unittest
from .test_response_helper import suite as rh_suite
from .test_api_setup import ApiSetupTestCase
from .test_system import SystemTestCase
from .test_user import UserTestCase
from .test_chat import ChatTestCase
from .test_search import SearchTestCase
from .test_playlist import PlaylistTestCase
from .test_browse import BrowseTestCase
from .test_album_songs import AlbumSongsTestCase
from .test_annotation import AnnotationTestCase
from .test_media import MediaTestCase
from .test_transcoding import TranscodingTestCase
from .test_radio import RadioStationTestCase
def suite():
suite = unittest.TestSuite()
suite.addTest(rh_suite())
suite.addTest(unittest.makeSuite(ApiSetupTestCase))
suite.addTest(unittest.makeSuite(SystemTestCase))
suite.addTest(unittest.makeSuite(UserTestCase))
suite.addTest(unittest.makeSuite(ChatTestCase))
suite.addTest(unittest.makeSuite(SearchTestCase))
suite.addTest(unittest.makeSuite(PlaylistTestCase))
suite.addTest(unittest.makeSuite(BrowseTestCase))
suite.addTest(unittest.makeSuite(AlbumSongsTestCase))
suite.addTest(unittest.makeSuite(AnnotationTestCase))
suite.addTest(unittest.makeSuite(MediaTestCase))
suite.addTest(unittest.makeSuite(TranscodingTestCase))
suite.addTest(unittest.makeSuite(RadioStationTestCase))
return suite

View File

@ -194,15 +194,5 @@ class ResponseHelperXMLTestCase(TestBase, UnwrapperMixin.create_from(XMLFormatte
self.assertEqual(lists[2].text, "final string") self.assertEqual(lists[2].text, "final string")
def suite():
suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(ResponseHelperJsonTestCase))
suite.addTest(unittest.makeSuite(ResponseHelperJsonpTestCase))
suite.addTest(unittest.makeSuite(ResponseHelperXMLTestCase))
return suite
if __name__ == "__main__": if __name__ == "__main__":
unittest.main() unittest.main()

View File

@ -4,27 +4,3 @@
# Copyright (C) 2017 Alban 'spl0k' Féron # Copyright (C) 2017 Alban 'spl0k' Féron
# #
# Distributed under terms of the GNU AGPLv3 license. # Distributed under terms of the GNU AGPLv3 license.
import unittest
from .test_cli import CLITestCase
from .test_cache import CacheTestCase
from .test_config import ConfigTestCase
from .test_db import DbTestCase
from .test_scanner import ScannerTestCase
from .test_secret import SecretTestCase
from .test_watcher import suite as watcher_suite
def suite():
suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(CacheTestCase))
suite.addTest(unittest.makeSuite(ConfigTestCase))
suite.addTest(unittest.makeSuite(DbTestCase))
suite.addTest(unittest.makeSuite(ScannerTestCase))
suite.addTest(watcher_suite())
suite.addTest(unittest.makeSuite(CLITestCase))
suite.addTest(unittest.makeSuite(SecretTestCase))
return suite

View File

@ -344,14 +344,5 @@ class CoverWatcherTestCase(WatcherTestCase):
self._sleep() self._sleep()
def suite():
suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(AudioWatcherTestCase))
suite.addTest(unittest.makeSuite(CoverWatcherTestCase))
return suite
if __name__ == "__main__": if __name__ == "__main__":
unittest.main() unittest.main()

View File

@ -4,21 +4,3 @@
# Copyright (C) 2017 Alban 'spl0k' Féron # Copyright (C) 2017 Alban 'spl0k' Féron
# #
# Distributed under terms of the GNU AGPLv3 license. # Distributed under terms of the GNU AGPLv3 license.
import unittest
from .test_login import LoginTestCase
from .test_folder import FolderTestCase
from .test_playlist import PlaylistTestCase
from .test_user import UserTestCase
def suite():
suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(LoginTestCase))
suite.addTest(unittest.makeSuite(FolderTestCase))
suite.addTest(unittest.makeSuite(PlaylistTestCase))
suite.addTest(unittest.makeSuite(UserTestCase))
return suite

View File

@ -5,17 +5,3 @@
# 2017 Óscar García Amor # 2017 Óscar García Amor
# #
# Distributed under terms of the GNU AGPLv3 license. # Distributed under terms of the GNU AGPLv3 license.
import unittest
from .test_manager_folder import FolderManagerTestCase
from .test_manager_user import UserManagerTestCase
def suite():
suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(FolderManagerTestCase))
suite.addTest(unittest.makeSuite(UserManagerTestCase))
return suite

28
tests/net/__init__.py Normal file
View File

@ -0,0 +1,28 @@
# This file is part of Supysonic.
# Supysonic is a Python implementation of the Subsonic server API.
#
# Copyright (C) 2021 Alban 'spl0k' Féron
#
# Distributed under terms of the GNU AGPLv3 license.
import importlib
import os
import os.path
import unittest
from unittest.suite import TestSuite
def load_tests(loader, tests, pattern):
# Skip these tests from discovery
return tests
suite = TestSuite()
for e in os.scandir(os.path.dirname(__file__)):
if not e.name.startswith("test") or not e.name.endswith(".py"):
continue
module = importlib.import_module("tests.net." + e.name[:-3])
tests = unittest.defaultTestLoader.loadTestsFromModule(module)
suite.addTests(tests)

View File

@ -12,7 +12,7 @@ from supysonic.lastfm import LastFm
class LastFmTestCase(unittest.TestCase): class LastFmTestCase(unittest.TestCase):
""" Designed only to have coverage on the most important method """ """Designed only to have coverage on the most important method"""
def test_request(self): def test_request(self):
logging.getLogger("supysonic.lastfm").addHandler(logging.NullHandler()) logging.getLogger("supysonic.lastfm").addHandler(logging.NullHandler())

View File

@ -14,7 +14,7 @@ from pony.orm import db_session
from supysonic.db import Folder, Artist, Album, Track from supysonic.db import Folder, Artist, Album, Track
from .apitestbase import ApiTestBase from ..api.apitestbase import ApiTestBase
class LyricsTestCase(ApiTestBase): class LyricsTestCase(ApiTestBase):

View File

@ -1,20 +0,0 @@
# This file is part of Supysonic.
# Supysonic is a Python implementation of the Subsonic server API.
#
# Copyright (C) 2019 Alban 'spl0k' Féron
#
# Distributed under terms of the GNU AGPLv3 license.
import unittest
from .api.test_lyrics import LyricsTestCase
from .base.test_lastfm import LastFmTestCase
def suite():
suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(LastFmTestCase))
suite.addTest(unittest.makeSuite(LyricsTestCase))
return suite