From 8179c35189f33c9bb68ce6f94683f7b6f4b4108c Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Tue, 14 Mar 2017 23:47:40 -0400 Subject: [PATCH] Simplify test runner by adding a new option '--mayan-apps' that automatically tests all Mayan apps that report to have tests. Change the app flag that indicates when an app has test from 'test' to the more explicit 'has_test'. Signed-off-by: Roberto Rosario --- .gitlab-ci.yml | 6 ++-- .travis.yml | 6 ++-- Makefile | 5 ++- mayan/apps/acls/apps.py | 2 +- mayan/apps/authentication/apps.py | 2 +- mayan/apps/cabinets/apps.py | 2 +- mayan/apps/checkouts/apps.py | 2 +- mayan/apps/common/apps.py | 2 +- mayan/apps/common/tests/runner.py | 45 ++++++++++---------------- mayan/apps/converter/apps.py | 2 +- mayan/apps/django_gpg/apps.py | 2 +- mayan/apps/document_comments/apps.py | 2 +- mayan/apps/document_indexing/apps.py | 2 +- mayan/apps/document_signatures/apps.py | 2 +- mayan/apps/document_states/apps.py | 2 +- mayan/apps/documents/apps.py | 2 +- mayan/apps/dynamic_search/apps.py | 2 +- mayan/apps/events/apps.py | 2 +- mayan/apps/folders/apps.py | 2 +- mayan/apps/linking/apps.py | 2 +- mayan/apps/lock_manager/apps.py | 2 +- mayan/apps/mailer/apps.py | 2 +- mayan/apps/metadata/apps.py | 2 +- mayan/apps/motd/apps.py | 2 +- mayan/apps/navigation/apps.py | 2 +- mayan/apps/ocr/apps.py | 2 +- mayan/apps/permissions/apps.py | 2 +- mayan/apps/smart_settings/apps.py | 2 +- mayan/apps/sources/apps.py | 2 +- mayan/apps/statistics/apps.py | 2 +- mayan/apps/tags/apps.py | 2 +- mayan/apps/user_management/apps.py | 2 +- tox.ini | 2 +- 33 files changed, 56 insertions(+), 64 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index b0d172677e..94741880ab 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -21,7 +21,7 @@ test:mysql: - pip install mysql-python - apt-get install -qq mysql-client - mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD" -e "set global character_set_server=utf8mb4;" - - coverage run manage.py test --settings=mayan.settings.testing.gitlab-ci.db_mysql --nomigrations + - coverage run manage.py test --mayan-apps --settings=mayan.settings.testing.gitlab-ci.db_mysql --nomigrations - bash <(curl https://raw.githubusercontent.com/codecov/codecov-bash/master/codecov) -t $CODECOV_TOKEN tags: - mysql @@ -30,12 +30,12 @@ test:postgres: - apt-get install -qq libpq-dev - pip install -r requirements/testing.txt - pip install psycopg2 - - coverage run manage.py test --settings=mayan.settings.testing.gitlab-ci.db_postgres --nomigrations + - coverage run manage.py test --mayan-apps --settings=mayan.settings.testing.gitlab-ci.db_postgres --nomigrations - bash <(curl https://raw.githubusercontent.com/codecov/codecov-bash/master/codecov) -t $CODECOV_TOKEN tags: - postgres test:sqlite: script: - pip install -r requirements/testing.txt - - coverage run manage.py test --settings=mayan.settings.testing.gitlab-ci --nomigrations + - coverage run manage.py test --mayan-apps --settings=mayan.settings.testing.gitlab-ci --nomigrations - bash <(curl https://raw.githubusercontent.com/codecov/codecov-bash/master/codecov) -t $CODECOV_TOKEN diff --git a/.travis.yml b/.travis.yml index 9591074dfa..0e6e7d9293 100644 --- a/.travis.yml +++ b/.travis.yml @@ -17,9 +17,9 @@ before_script: - mysql -e 'create database mayan_edms;' - psql -c 'create database mayan_edms;' -U postgres script: - - if [[ $DB == mysql ]]; then coverage run manage.py test --settings=mayan.settings.testing.travis.db_mysql --nomigrations; fi - - if [[ $DB == postgres ]]; then coverage run manage.py test --settings=mayan.settings.testing.travis.db_postgres --nomigrations; fi - - if [[ $DB == sqlite ]]; then coverage run manage.py test --settings=mayan.settings.testing.base --nomigrations; fi + - if [[ $DB == mysql ]]; then coverage run manage.py test --mayan-apps --settings=mayan.settings.testing.travis.db_mysql --nomigrations; fi + - if [[ $DB == postgres ]]; then coverage run manage.py test --mayan-apps --settings=mayan.settings.testing.travis.db_postgres --nomigrations; fi + - if [[ $DB == sqlite ]]; then coverage run manage.py test --mayan-apps --settings=mayan.settings.testing.base --nomigrations; fi after_success: - coveralls branches: diff --git a/Makefile b/Makefile index 03613c6bf1..2d59c8bf65 100644 --- a/Makefile +++ b/Makefile @@ -7,7 +7,7 @@ help: @echo "clean-pyc - Remove Python artifacts." @echo "clean - Remove Python and build artifacts." - @echo "test - Run all tests." + @echo "test-all - Run all tests." @echo "test MODULE= - Run tests for a single App, module or test class." @echo "docs_serve - Run the livehtml documentation generator." @@ -56,6 +56,9 @@ clean-pyc: test: ./manage.py test $(MODULE) --settings=mayan.settings.testing --nomigrations +test-all: + ./manage.py test --mayan-apps --settings=mayan.settings.testing --nomigrations + # Documentation diff --git a/mayan/apps/acls/apps.py b/mayan/apps/acls/apps.py index 9f3404e80b..8825df70b2 100644 --- a/mayan/apps/acls/apps.py +++ b/mayan/apps/acls/apps.py @@ -10,8 +10,8 @@ from .links import link_acl_create, link_acl_delete, link_acl_permissions class ACLsApp(MayanAppConfig): + has_tests = True name = 'acls' - test = True verbose_name = _('ACLs') def ready(self): diff --git a/mayan/apps/authentication/apps.py b/mayan/apps/authentication/apps.py index 85942e587c..aeb0ca7a3c 100644 --- a/mayan/apps/authentication/apps.py +++ b/mayan/apps/authentication/apps.py @@ -12,8 +12,8 @@ logger = logging.getLogger(__name__) class AuthenticationApp(MayanAppConfig): + has_tests = True name = 'authentication' - test = True verbose_name = _('Authentication') def ready(self): diff --git a/mayan/apps/cabinets/apps.py b/mayan/apps/cabinets/apps.py index 42087ddbc3..9bd2b0ef34 100644 --- a/mayan/apps/cabinets/apps.py +++ b/mayan/apps/cabinets/apps.py @@ -28,8 +28,8 @@ from .permissions import ( class CabinetsApp(MayanAppConfig): + has_tests = True name = 'cabinets' - test = True verbose_name = _('Cabinets') def ready(self): diff --git a/mayan/apps/checkouts/apps.py b/mayan/apps/checkouts/apps.py index 759f5fcfdd..2f57b48efa 100644 --- a/mayan/apps/checkouts/apps.py +++ b/mayan/apps/checkouts/apps.py @@ -30,8 +30,8 @@ from .tasks import task_check_expired_check_outs # NOQA class CheckoutsApp(MayanAppConfig): + has_tests = True name = 'checkouts' - test = True verbose_name = _('Checkouts') def ready(self): diff --git a/mayan/apps/common/apps.py b/mayan/apps/common/apps.py index 2e8dd36642..a415d5e7c3 100644 --- a/mayan/apps/common/apps.py +++ b/mayan/apps/common/apps.py @@ -71,8 +71,8 @@ class MayanAppConfig(apps.AppConfig): class CommonApp(MayanAppConfig): app_url = '' + has_tests = True name = 'common' - test = True verbose_name = _('Common') def ready(self): diff --git a/mayan/apps/common/tests/runner.py b/mayan/apps/common/tests/runner.py index db617c46d6..f600cf0353 100644 --- a/mayan/apps/common/tests/runner.py +++ b/mayan/apps/common/tests/runner.py @@ -1,41 +1,30 @@ from __future__ import unicode_literals -import os - from django import apps -from django.conf import settings from django.test.runner import DiscoverRunner class MayanTestRunner(DiscoverRunner): @classmethod def add_arguments(cls, parser): - DiscoverRunner.add_arguments(parser) + parser.add_argument( + '--mayan-apps', action='store_true', default=False, + dest='mayan_apps', + help='Test all Mayan apps that report to have tests.' + ) + + def __init__(self, *args, **kwargs): + self.mayan_apps = kwargs.pop('mayan_apps') + super(MayanTestRunner, self).__init__(*args, **kwargs) def build_suite(self, *args, **kwargs): - self.top_level = os.path.join(settings.BASE_DIR, 'apps') - - test_suit = super(MayanTestRunner, self).build_suite(*args, **kwargs) - - new_suite = self.test_suite() - # Apps that report they have tests + if self.mayan_apps: + args = list(args) + args[0] = [ + app.name for app in apps.apps.get_app_configs() if getattr( + app, 'has_tests', False + ) + ] - test_apps = [ - app.name for app in apps.apps.get_app_configs() if getattr(app, 'test', False) - ] - - # Filter the test cases reported by the test runner by the apps that - # reported tests - - for test_case in test_suit: - app_label = repr(test_case.__class__).split("'")[1].split('.')[0] - if app_label in test_apps: - new_suite.addTest(test_case) - - print '-' * 10 - print 'Apps to test: {}'.format(', '.join(test_apps)) - print 'Total test cases: {}'.format(new_suite.countTestCases()) - print '-' * 10 - - return new_suite + return super(MayanTestRunner, self).build_suite(*args, **kwargs) diff --git a/mayan/apps/converter/apps.py b/mayan/apps/converter/apps.py index 40b54d6bc0..a04056c761 100644 --- a/mayan/apps/converter/apps.py +++ b/mayan/apps/converter/apps.py @@ -14,8 +14,8 @@ from .licenses import * # NOQA class ConverterApp(MayanAppConfig): + has_tests = True name = 'converter' - test = True verbose_name = _('Converter') def ready(self): diff --git a/mayan/apps/django_gpg/apps.py b/mayan/apps/django_gpg/apps.py index 381a745894..14de67f9ad 100644 --- a/mayan/apps/django_gpg/apps.py +++ b/mayan/apps/django_gpg/apps.py @@ -26,8 +26,8 @@ from .permissions import ( class DjangoGPGApp(MayanAppConfig): app_url = 'gpg' + has_tests = True name = 'django_gpg' - test = True verbose_name = _('Django GPG') def ready(self): diff --git a/mayan/apps/document_comments/apps.py b/mayan/apps/document_comments/apps.py index 905af2c7cf..da6e219132 100644 --- a/mayan/apps/document_comments/apps.py +++ b/mayan/apps/document_comments/apps.py @@ -20,8 +20,8 @@ from .permissions import ( class DocumentCommentsApp(MayanAppConfig): app_namespace = 'comments' app_url = 'comments' + has_tests = True name = 'document_comments' - test = True verbose_name = _('Document comments') def ready(self): diff --git a/mayan/apps/document_indexing/apps.py b/mayan/apps/document_indexing/apps.py index 2e95e0c807..3c19e832e3 100644 --- a/mayan/apps/document_indexing/apps.py +++ b/mayan/apps/document_indexing/apps.py @@ -44,8 +44,8 @@ from .widgets import get_instance_link, index_instance_item_link, node_level class DocumentIndexingApp(MayanAppConfig): app_namespace = 'indexing' app_url = 'indexing' + has_tests = True name = 'document_indexing' - test = True verbose_name = _('Document indexing') def ready(self): diff --git a/mayan/apps/document_signatures/apps.py b/mayan/apps/document_signatures/apps.py index eecfad9102..b5901b8bb4 100644 --- a/mayan/apps/document_signatures/apps.py +++ b/mayan/apps/document_signatures/apps.py @@ -46,8 +46,8 @@ logger = logging.getLogger(__name__) class DocumentSignaturesApp(MayanAppConfig): app_namespace = 'signatures' app_url = 'signatures' + has_tests = True name = 'document_signatures' - test = True verbose_name = _('Document signatures') def ready(self): diff --git a/mayan/apps/document_states/apps.py b/mayan/apps/document_states/apps.py index 01b43c550e..c7fdaf1ebb 100644 --- a/mayan/apps/document_states/apps.py +++ b/mayan/apps/document_states/apps.py @@ -36,8 +36,8 @@ from .permissions import permission_workflow_transition class DocumentStatesApp(MayanAppConfig): app_url = 'states' + has_tests = True name = 'document_states' - test = True verbose_name = _('Document states') def ready(self): diff --git a/mayan/apps/documents/apps.py b/mayan/apps/documents/apps.py index 936d87d7e0..8e0468f6a8 100644 --- a/mayan/apps/documents/apps.py +++ b/mayan/apps/documents/apps.py @@ -82,8 +82,8 @@ from .widgets import DocumentThumbnailWidget, DocumentPageThumbnailWidget class DocumentsApp(MayanAppConfig): + has_tests = True name = 'documents' - test = True verbose_name = _('Documents') def ready(self): diff --git a/mayan/apps/dynamic_search/apps.py b/mayan/apps/dynamic_search/apps.py index 4a3fc58685..44f2495171 100644 --- a/mayan/apps/dynamic_search/apps.py +++ b/mayan/apps/dynamic_search/apps.py @@ -11,8 +11,8 @@ from .links import link_search, link_search_advanced, link_search_again class DynamicSearchApp(MayanAppConfig): app_namespace = 'search' app_url = 'search' + has_tests = True name = 'dynamic_search' - test = True verbose_name = _('Dynamic search') def ready(self): diff --git a/mayan/apps/events/apps.py b/mayan/apps/events/apps.py index 620171d205..b866d0d459 100644 --- a/mayan/apps/events/apps.py +++ b/mayan/apps/events/apps.py @@ -13,8 +13,8 @@ from .widgets import event_type_link class EventsApp(MayanAppConfig): + has_tests = True name = 'events' - test = True verbose_name = _('Events') def ready(self): diff --git a/mayan/apps/folders/apps.py b/mayan/apps/folders/apps.py index 0d1a0eed95..8de30eb12b 100644 --- a/mayan/apps/folders/apps.py +++ b/mayan/apps/folders/apps.py @@ -28,8 +28,8 @@ from .permissions import ( class FoldersApp(MayanAppConfig): + has_tests = True name = 'folders' - test = True verbose_name = _('Folders') def ready(self): diff --git a/mayan/apps/linking/apps.py b/mayan/apps/linking/apps.py index 41eb9df8cc..82403ae1ca 100644 --- a/mayan/apps/linking/apps.py +++ b/mayan/apps/linking/apps.py @@ -29,8 +29,8 @@ from .permissions import ( class LinkingApp(MayanAppConfig): + has_tests = True name = 'linking' - test = True verbose_name = _('Linking') def ready(self): diff --git a/mayan/apps/lock_manager/apps.py b/mayan/apps/lock_manager/apps.py index 9ad96c81d5..27e11f8bd1 100644 --- a/mayan/apps/lock_manager/apps.py +++ b/mayan/apps/lock_manager/apps.py @@ -5,6 +5,6 @@ from django.utils.translation import ugettext_lazy as _ class LockManagerApp(apps.AppConfig): + has_tests = True name = 'lock_manager' - test = True verbose_name = _('Lock manager') diff --git a/mayan/apps/mailer/apps.py b/mayan/apps/mailer/apps.py index a333eb3d23..aacea96688 100644 --- a/mayan/apps/mailer/apps.py +++ b/mayan/apps/mailer/apps.py @@ -21,8 +21,8 @@ from .permissions import ( class MailerApp(MayanAppConfig): + has_tests = True name = 'mailer' - test = True verbose_name = _('Mailer') def ready(self): diff --git a/mayan/apps/metadata/apps.py b/mayan/apps/metadata/apps.py index bbac674ad4..4463d936d9 100644 --- a/mayan/apps/metadata/apps.py +++ b/mayan/apps/metadata/apps.py @@ -47,8 +47,8 @@ logger = logging.getLogger(__name__) class MetadataApp(MayanAppConfig): + has_tests = True name = 'metadata' - test = True verbose_name = _('Metadata') def ready(self): diff --git a/mayan/apps/motd/apps.py b/mayan/apps/motd/apps.py index afb6c8f132..af38dfa4c0 100644 --- a/mayan/apps/motd/apps.py +++ b/mayan/apps/motd/apps.py @@ -17,8 +17,8 @@ logger = logging.getLogger(__name__) class MOTDApp(MayanAppConfig): + has_tests = True name = 'motd' - test = True verbose_name = _('Message of the day') def ready(self): diff --git a/mayan/apps/navigation/apps.py b/mayan/apps/navigation/apps.py index e529d10406..c7289ffb0b 100644 --- a/mayan/apps/navigation/apps.py +++ b/mayan/apps/navigation/apps.py @@ -6,6 +6,6 @@ from common.apps import MayanAppConfig class NavigationApp(MayanAppConfig): + has_tests = True name = 'navigation' - test = True verbose_name = _('Navigation') diff --git a/mayan/apps/ocr/apps.py b/mayan/apps/ocr/apps.py index 97aef9d214..e0e7042552 100644 --- a/mayan/apps/ocr/apps.py +++ b/mayan/apps/ocr/apps.py @@ -48,8 +48,8 @@ def document_version_ocr_submit(self): class OCRApp(MayanAppConfig): + has_tests = True name = 'ocr' - test = True verbose_name = _('OCR') def ready(self): diff --git a/mayan/apps/permissions/apps.py b/mayan/apps/permissions/apps.py index 9cc06178c1..2547e0aaf6 100644 --- a/mayan/apps/permissions/apps.py +++ b/mayan/apps/permissions/apps.py @@ -17,8 +17,8 @@ from .links import ( class PermissionsApp(MayanAppConfig): + has_tests = True name = 'permissions' - test = True verbose_name = _('Permissions') def ready(self): diff --git a/mayan/apps/smart_settings/apps.py b/mayan/apps/smart_settings/apps.py index 7032b084db..6825455503 100644 --- a/mayan/apps/smart_settings/apps.py +++ b/mayan/apps/smart_settings/apps.py @@ -13,8 +13,8 @@ from .widgets import setting_widget class SmartSettingsApp(MayanAppConfig): app_namespace = 'settings' app_url = 'settings' + has_tests = True name = 'smart_settings' - test = True verbose_name = _('Smart settings') def ready(self): diff --git a/mayan/apps/sources/apps.py b/mayan/apps/sources/apps.py index e05c3ee4e6..acfb5d6724 100644 --- a/mayan/apps/sources/apps.py +++ b/mayan/apps/sources/apps.py @@ -33,8 +33,8 @@ from .widgets import StagingFileThumbnailWidget class SourcesApp(MayanAppConfig): + has_tests = True name = 'sources' - test = True verbose_name = _('Sources') def ready(self): diff --git a/mayan/apps/statistics/apps.py b/mayan/apps/statistics/apps.py index ba0f36b43f..d0909ad7c4 100644 --- a/mayan/apps/statistics/apps.py +++ b/mayan/apps/statistics/apps.py @@ -19,8 +19,8 @@ from .tasks import task_execute_statistic # NOQA - Force registration of task class StatisticsApp(MayanAppConfig): + has_tests = True name = 'statistics' - test = True verbose_name = _('Statistics') def ready(self): diff --git a/mayan/apps/tags/apps.py b/mayan/apps/tags/apps.py index c0c39ef7cd..397eb2bcfc 100644 --- a/mayan/apps/tags/apps.py +++ b/mayan/apps/tags/apps.py @@ -29,8 +29,8 @@ from .widgets import widget_document_tags, widget_single_tag class TagsApp(MayanAppConfig): + has_tests = True name = 'tags' - test = True verbose_name = _('Tags') def ready(self): diff --git a/mayan/apps/user_management/apps.py b/mayan/apps/user_management/apps.py index 08a7e0a5a3..ddc721a655 100644 --- a/mayan/apps/user_management/apps.py +++ b/mayan/apps/user_management/apps.py @@ -37,8 +37,8 @@ def get_users(): class UserManagementApp(MayanAppConfig): app_url = 'accounts' + has_tests = True name = 'user_management' - test = True verbose_name = _('User management') def ready(self): diff --git a/tox.ini b/tox.ini index 5f801bcb01..25f3cdf28e 100644 --- a/tox.ini +++ b/tox.ini @@ -12,7 +12,7 @@ basepython = py35: python3.5 commands= - coverage run {envdir}/bin/django-admin.py test --settings=mayan.settings.testing --nomigrations + coverage run {envdir}/bin/django-admin.py test --mayan-apps --settings=mayan.settings.testing --nomigrations deps = -rrequirements/testing-no-django.txt