Browse Source

Update setup/testrunner/dev/dockerfile

rafalp 6 years ago
parent
commit
96a68ffba6
6 changed files with 98 additions and 155 deletions
  1. 0 1
      Dockerfile
  2. 1 2
      dev
  3. 71 0
      devproject/test_settings.py
  4. 7 7
      requirements.txt
  5. 18 144
      runtests.py
  6. 1 1
      setup.py

+ 0 - 1
Dockerfile

@@ -5,7 +5,6 @@ FROM python:3.6
 
 ENV PYTHONUNBUFFERED 1
 ENV IN_MISAGO_DOCKER 1
-ENV PATH "$PATH:/srv/misago"
 
 # Install dependencies in one single command/layer
 RUN apt-get update && apt-get install -y \

+ 1 - 2
dev

@@ -197,8 +197,7 @@ rebuild() {
 
 # Run tests suite
 test() {
-    docker-compose run --rm misago runtests.py $1
-    docker-compose stop
+    docker-compose run --rm misago pytest $1
 }
 
 # Make messages

+ 71 - 0
devproject/test_settings.py

@@ -0,0 +1,71 @@
+import os
+
+from .settings import *  # pylint: disable-all
+
+# Use test DB
+DATABASES = {
+    'default': {
+        'ENGINE': 'django.db.backends.postgresql_psycopg2',
+        'NAME': os.environ['POSTGRES_TEST_DB'],
+        'USER': os.environ['POSTGRES_USER'],
+        'PASSWORD': os.environ['POSTGRES_PASSWORD'],
+        'HOST': os.environ['POSTGRES_HOST'],
+        'PORT': 5432,
+    }
+}
+
+# Use in-memory cache
+CACHES = {
+    'default': {
+        'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
+        'LOCATION': 'uniqu3-sn0wf14k3'
+    }
+}
+
+# Disable Debug Toolbar
+DEBUG_TOOLBAR_CONFIG = {}
+INTERNAL_IPS = []
+
+# Disable account validation via Stop Forum Spam
+MISAGO_NEW_REGISTRATIONS_VALIDATORS = (
+    'misago.users.validators.validate_gmail_email',
+)
+
+# Store mails in memory
+EMAIL_BACKEND = 'django.core.mail.backends.locmem.EmailBackend'
+
+# Use MD5 password hashing to speed up test suite
+PASSWORD_HASHERS = (
+    'django.contrib.auth.hashers.MD5PasswordHasher',
+)
+
+# Default misago address to test address
+MISAGO_ADDRESS = 'http://testserver/'
+
+# Use english search config
+MISAGO_SEARCH_CONFIG = 'english'
+
+# Register test post validator
+MISAGO_POST_VALIDATORS = [
+    'misago.core.testproject.validators.test_post_validator',
+]
+
+# Register test post search filter
+MISAGO_POST_SEARCH_FILTERS = [
+    'misago.core.testproject.searchfilters.test_filter',
+]
+
+# Additional overrides for Travis-CI
+if os.environ.get('TRAVIS'):
+    DATABASES = {
+        'default': {
+            'ENGINE': 'django.db.backends.postgresql_psycopg2',
+            'NAME': 'travis_ci_test',
+            'USER': 'postgres',
+            'PASSWORD': '',
+            'HOST': '127.0.0.1',
+            'PORT': '',
+        }
+    }
+
+    TEST_NAME = 'travis_ci_test'

+ 7 - 7
requirements.txt

@@ -6,13 +6,13 @@
 #
 beautifulsoup4==4.6.3
 bleach==2.1.4
-certifi==2018.8.24        # via requests
+certifi==2018.10.15       # via requests
 chardet==3.0.4            # via requests
 django-crispy-forms==1.6.1
 django-debug-toolbar==1.8
 django-htmlmin==0.10.0
 django-mptt==0.8.7
-django==1.11.15
+django==1.11.16
 djangorestframework==3.6.4
 faker==0.8.18
 html5lib==0.999999999
@@ -21,18 +21,18 @@ ipaddress==1.0.22         # via faker
 markdown==2.6.11
 misago-social-auth-app-django==2.1.0
 oauthlib==2.1.0           # via requests-oauthlib, social-auth-core
-olefile==0.45.1           # via pillow
+olefile==0.46             # via pillow
 pillow==4.1.1
 psycopg2-binary==2.7.5
 pyjwt==1.6.4              # via social-auth-core
-python-dateutil==2.7.3    # via faker
-pytz==2018.5
+python-dateutil==2.7.5    # via faker
+pytz==2018.7
 requests-oauthlib==1.0.0  # via social-auth-core
 requests==2.20.0
 six==1.11.0               # via bleach, faker, html5lib, misago-social-auth-app-django, python-dateutil, social-auth-core
-social-auth-core==1.7.0   # via misago-social-auth-app-django
+social-auth-core==2.0.0   # via misago-social-auth-app-django
 sqlparse==0.2.4           # via django-debug-toolbar
 text-unidecode==1.2       # via faker
 unidecode==0.4.21
-urllib3==1.23             # via requests
+urllib3==1.24.1           # via requests
 webencodings==0.5.1       # via html5lib

+ 18 - 144
runtests.py

@@ -1,149 +1,23 @@
 #!/usr/bin/env python
 import os
-import pwd
-import shutil
 import sys
 
-from django import setup
 
-
-TEST_RUNNER_PATH = os.path.dirname(os.path.abspath(__file__))
-
-sys.path.append(os.path.dirname(os.path.abspath(__file__)))
-
-
-def runtests():
-    args, kwargs = parse_args()
-    setup_testproject()
-    run_django(*args, **kwargs)
-
-
-def parse_args():
-    args = []
-    kwargs = {
-        'verbosity': 1,
-        'noinput': True,
-    }
-
-    sys_argv = sys.argv[1:]
-    if sys_argv and sys_argv[0] == 'test':
-        sys_argv = sys_argv[1:]
-
-    for arg in sys_argv:
-        if arg == '--verbose':
-            kwargs['verbosity'] = 2
-        else:
-            args.append(arg)
-
-    return args, kwargs
-
-
-def setup_testproject():
-    project_template_path = os.path.join(TEST_RUNNER_PATH, 'misago/project_template')
-
-    test_project_path = os.path.join(TEST_RUNNER_PATH, "testproject")
-    if os.path.exists(test_project_path):
-        shutil.rmtree(test_project_path)
-
-    shutil.copytree(project_template_path, test_project_path)
-
-    module_init_path = os.path.join(test_project_path, '__init__.py')
-    with open(module_init_path, "w") as py_file:
-        py_file.write('')
-
-    settings_path = os.path.join(
-        test_project_path, 'project_name', 'settings.py')
-
-    with open(settings_path, "r") as py_file:
-        settings_file = py_file.read()
-
-        # Do some configuration magic
-        settings_file = settings_file.replace('{{ project_name }}', 'testproject.project_name')
-        settings_file = settings_file.replace('{{ secret_key }}', 't3stpr0j3ct')
-
-        settings_file += """
-# disable account validation via Stop Forum Spam
-MISAGO_NEW_REGISTRATIONS_VALIDATORS = (
-    'misago.users.validators.validate_gmail_email',
-)
-
-# store mails in memory
-EMAIL_BACKEND = 'django.core.mail.backends.locmem.EmailBackend'
-
-# use in-memory cache
-CACHES = {
-    'default': {
-        'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
-        'LOCATION': 'uniqu3-sn0wf14k3'
-    }
-}
-
-# Use MD5 password hashing to speed up test suite
-PASSWORD_HASHERS = (
-    'django.contrib.auth.hashers.MD5PasswordHasher',
-)
-
-# Default misago address to test address
-MISAGO_ADDRESS = 'http://testserver/'
-
-# Use english search config
-MISAGO_SEARCH_CONFIG = 'english'
-
-
-# Register test post validator
-MISAGO_POST_VALIDATORS = [
-    'misago.core.testproject.validators.test_post_validator',
-]
-
-
-# Register test post search filter
-MISAGO_POST_SEARCH_FILTERS = [
-    'misago.core.testproject.searchfilters.test_filter',
-]
-"""
-
-    if os.environ.get('TRAVIS'):
-        settings_file += """
-
-DATABASES = {
-    'default': {
-        'ENGINE': 'django.db.backends.postgresql_psycopg2',
-        'NAME': 'travis_ci_test',
-        'USER': 'postgres',
-        'PASSWORD': '',
-        'HOST': '127.0.0.1',
-        'PORT': '',
-    }
-}
-
-TEST_NAME = 'travis_ci_test'
-"""
-    else:
-        settings_file += """
-DATABASES = {
-    'default': {
-        'ENGINE': 'django.db.backends.postgresql_psycopg2',
-        'NAME': os.environ['POSTGRES_TEST_DB'],
-        'USER': os.environ['POSTGRES_USER'],
-        'PASSWORD': os.environ['POSTGRES_PASSWORD'],
-        'HOST': os.environ['POSTGRES_HOST'],
-        'PORT': 5432,
-    }
-}
-"""
-
-    with open(settings_path, "w") as py_file:
-        py_file.write(settings_file)
-
-    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "testproject.project_name.settings")
-
-
-def run_django(*args, **kwargs):
-    setup()
-
-    from django.core.management import call_command
-    sys.exit(call_command('test', *args, **kwargs))
-
-
-if __name__ == '__main__':
-    runtests()
+if __name__ == "__main__":
+    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "devproject.test_settings")
+    try:
+        from django.core.management import execute_from_command_line
+    except ImportError:
+        # The above import may fail for some other reason. Ensure that the
+        # issue is really that Django is missing to avoid masking other
+        # exceptions on Python 2.
+        try:
+            import django
+        except ImportError:
+            raise ImportError(
+                "Couldn't import Django. Are you sure it's installed and "
+                "available on your PYTHONPATH environment variable? Did you "
+                "forget to activate a virtual environment?"
+            )
+        raise
+    execute_from_command_line(["manage.py", "test"] + sys.argv[1:])

+ 1 - 1
setup.py

@@ -38,7 +38,7 @@ setup(
     install_requires=REQUIREMENTS,
     packages=find_packages(exclude=EXCLUDE_FROM_PACKAGES),
     include_package_data=True,
-    test_suite="runtests.runtests",
+    test_suite="runtests.py",
     classifiers=[
         'Development Status :: 4 - Beta',
         'Environment :: Web Environment',