From cd5979eea047a5e971c7c8e3e3316fcb123f53c6 Mon Sep 17 00:00:00 2001 From: Griatch Date: Sat, 2 Feb 2019 01:17:36 +0100 Subject: [PATCH] Refactor unit test runner and one new unit test --- evennia/server/tests/__init__.py | 0 evennia/server/tests/test_initial_setup.py | 19 +++++++++ .../server/{tests.py => tests/test_misc.py} | 41 ++----------------- evennia/server/tests/testrunner.py | 27 ++++++++++++ evennia/settings_default.py | 4 +- 5 files changed, 52 insertions(+), 39 deletions(-) create mode 100644 evennia/server/tests/__init__.py create mode 100644 evennia/server/tests/test_initial_setup.py rename evennia/server/{tests.py => tests/test_misc.py} (73%) create mode 100644 evennia/server/tests/testrunner.py diff --git a/evennia/server/tests/__init__.py b/evennia/server/tests/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/evennia/server/tests/test_initial_setup.py b/evennia/server/tests/test_initial_setup.py new file mode 100644 index 0000000000..b08bde14e0 --- /dev/null +++ b/evennia/server/tests/test_initial_setup.py @@ -0,0 +1,19 @@ +""" +Test initial startup procedure + +""" + +from mock import MagicMock, patch +from django.conf import settings +from django.test import TestCase + +from evennia.server import initial_setup + + +class TestInitialSetup(TestCase): + + @patch("evennia.server.initial_setup.AccountDB") + def test_get_god_account(self, mocked_accountdb): + mocked_accountdb.objects.get = MagicMock(return_value=1) + self.assertEqual(initial_setup.get_god_account(), 1) + mocked_accountdb.objects.get.assert_called_with(id=1) diff --git a/evennia/server/tests.py b/evennia/server/tests/test_misc.py similarity index 73% rename from evennia/server/tests.py rename to evennia/server/tests/test_misc.py index 4d7f271417..e48ff6984b 100644 --- a/evennia/server/tests.py +++ b/evennia/server/tests/test_misc.py @@ -1,28 +1,11 @@ # -*- coding: utf-8 -*- """ -Unit testing of the 'objects' Evennia component. +Testing various individual functionalities in the server package. -Runs as part of the Evennia's test suite with 'manage.py test" - -Please add new tests to this module as needed. - -Guidelines: - A 'test case' is testing a specific component and is defined as a class - inheriting from unittest.TestCase. The test case class can have a method - setUp() that creates and sets up the testing environment. - All methods inside the test case class whose names start with 'test' are - used as test methods by the runner. Inside the test methods, special member - methods assert*() are used to test the behaviour. """ -try: - from django.utils.unittest import TestCase -except ImportError: - from django.test import TestCase -try: - from django.utils import unittest -except ImportError: - import unittest +import unittest +from django.test import TestCase from evennia.server.validators import EvenniaPasswordValidator from evennia.utils.test_resources import EvenniaTest @@ -31,23 +14,7 @@ from django.test.runner import DiscoverRunner from evennia.server.throttle import Throttle -from .deprecations import check_errors - - -class EvenniaTestSuiteRunner(DiscoverRunner): - """ - This test runner only runs tests on the apps specified in evennia/ - avoid running the large number of tests defined by Django - """ - - def build_suite(self, test_labels, extra_tests=None, **kwargs): - """ - Build a test suite for Evennia. test_labels is a list of apps to test. - If not given, a subset of settings.INSTALLED_APPS will be used. - """ - import evennia - evennia._init() - return super(EvenniaTestSuiteRunner, self).build_suite(test_labels, extra_tests=extra_tests, **kwargs) +from ..deprecations import check_errors class MockSettings(object): diff --git a/evennia/server/tests/testrunner.py b/evennia/server/tests/testrunner.py new file mode 100644 index 0000000000..fb222c88c6 --- /dev/null +++ b/evennia/server/tests/testrunner.py @@ -0,0 +1,27 @@ +""" +Main test-suite runner of Evennia. The runner collates tests from +all over the code base and runs them. + +Runs as part of the Evennia's test suite with 'evennia test evennia" + +""" +from django.test.runner import DiscoverRunner + + +class EvenniaTestSuiteRunner(DiscoverRunner): + """ + Pointed to by the TEST_RUNNER setting. + This test runner only runs tests on the apps specified in evennia/ + avoid running the large number of tests defined by Django + + """ + + def build_suite(self, test_labels, extra_tests=None, **kwargs): + """ + Build a test suite for Evennia. test_labels is a list of apps to test. + If not given, a subset of settings.INSTALLED_APPS will be used. + """ + import evennia + evennia._init() + return super(EvenniaTestSuiteRunner, self).build_suite( + test_labels, extra_tests=extra_tests, **kwargs) diff --git a/evennia/settings_default.py b/evennia/settings_default.py index be06f46f7f..f3f899c249 100644 --- a/evennia/settings_default.py +++ b/evennia/settings_default.py @@ -831,9 +831,9 @@ AUTH_USERNAME_VALIDATORS = [ {'NAME': 'evennia.server.validators.EvenniaUsernameAvailabilityValidator'}] # Use a custom test runner that just tests Evennia-specific apps. -TEST_RUNNER = 'evennia.server.tests.EvenniaTestSuiteRunner' +TEST_RUNNER = 'evennia.server.tests.testrunner.EvenniaTestSuiteRunner' -# Messages and Bootstrap don't classify events the same way; this setting maps +# Messages and Bootstrap don't classify events the same way; this setting maps # messages.error() to Bootstrap 'danger' classes. MESSAGE_TAGS = { messages.ERROR: 'danger',