Files
django-dav-events/tests/test_suite.py
heinzel 811983abfe
All checks were successful
buildbot/django-dav-events--test Build done.
Make tox work with python 3.11
2023-05-24 09:47:38 +02:00

96 lines
2.8 KiB
Python

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import datetime
import os
import shutil
import sys
import django
from django.test.utils import get_runner
from dav_base.tests.utils import mkdtemp
# from dav_base.console_scripts.admin import DJANGO_MAIN_MODULE
DJANGO_MAIN_MODULE = 'main'
TMP_BASE_DIR = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), 'tmp')
class DjangoEnvironment:
@staticmethod
def _install_djangoproject(path, modules=None):
cmd = 'django-dav-admin setup "{}"'.format(path)
os.system(cmd)
if modules is not None:
for mod in modules:
cmd = 'django-dav-admin enable_module "{}" "{}"'.format(path, mod)
os.system(cmd)
def __init__(self, path=None, remove_after=True,
enable_modules=None):
self.path = path
self._remove_after = remove_after
self._original_sys_path = None
self._modified_sys_path = None
if enable_modules is not None:
self._enable_modules = enable_modules
else:
self._enable_modules = []
self.settings = None
def __enter__(self):
if self.path is None:
prefix = 'testrun-{datetime}-'.format(
datetime=datetime.datetime.now().strftime('%Y%m%d-%H%M')
)
self.path = mkdtemp(prefix=prefix, base_dir=TMP_BASE_DIR)
self._install_djangoproject(self.path, modules=self._enable_modules)
self._original_sys_path = sys.path
sys.path.append(self.path)
self._modified_sys_path = sys.path
os.environ['DJANGO_SETTINGS_MODULE'] = '{}.settings'.format(DJANGO_MAIN_MODULE)
django.setup()
from django.conf import settings # pylint: disable=import-outside-toplevel
self.settings = settings
return self
def __exit__(self, *args):
if self._modified_sys_path is not None and self._original_sys_path is not None:
if sys.path == self._modified_sys_path:
sys.path = self._original_sys_path
if self._remove_after:
shutil.rmtree(self.path)
class TestSuite:
@staticmethod
def run():
modules = ['dav_auth', 'dav_events', 'dav_registration', 'dav_event_office']
tests = ['dav_base'] + modules
test_tags = None
exclude_test_tags = ['browser']
with DjangoEnvironment(enable_modules=modules) as env:
test_runner_class = get_runner(env.settings)
test_runner = test_runner_class(tags=test_tags, exclude_tags=exclude_test_tags)
failures = test_runner.run_tests(tests)
return bool(failures)
def __call__(self):
sys.exit(self.run())
def main():
test_suite = TestSuite()
test_suite()
if __name__ == '__main__':
main()