diff --git a/runtests.py b/runtests.py new file mode 100755 index 0000000..49e4c58 --- /dev/null +++ b/runtests.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- + +import os +import sys + +import django +from django.conf import settings +from django.test.utils import get_runner + + +def runtests(): + os.environ['DJANGO_SETTINGS_MODULE'] = 'tests.settings' + django.setup() + TestRunner = get_runner(settings) + test_runner = TestRunner() + failures = test_runner.run_tests(['tests']) + sys.exit(bool(failures)) + +if __name__ == '__main__': + runtests() + diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/settings.py b/tests/settings.py new file mode 100644 index 0000000..67b60ae --- /dev/null +++ b/tests/settings.py @@ -0,0 +1,50 @@ +# -*- coding: utf-8 -*- + +import django +import os + +BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + +SECRET_KEY = 'django-admin-interface' + +ALLOWED_HOSTS = ['*'] + +INSTALLED_APPS = [ + + 'admin_interface', + 'flat_responsive', + 'flat', #if django version < 1.9 + 'colorfield', + + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', +] + +MIDDLEWARE_CLASSES = [ + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.common.CommonMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', +] + +TEMPLATES = [{ + 'BACKEND': 'django.template.backends.django.DjangoTemplates', + 'DIRS': [], + 'APP_DIRS': True, + 'OPTIONS': {}, +},] + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), + } +} + +MEDIA_ROOT = os.path.join(BASE_DIR, 'admin_interface/public/media/') +MEDIA_URL = '/media/' + +STATIC_ROOT = os.path.join(BASE_DIR, 'admin_interface/public/static/') +STATIC_URL = '/static/' + diff --git a/tests/tests.py b/tests/tests.py new file mode 100644 index 0000000..3ae922e --- /dev/null +++ b/tests/tests.py @@ -0,0 +1,83 @@ +# -*- coding: utf-8 -*- + +from django.conf import settings +from django.test import TestCase +from django.template import Context, Template + +import os +import shutil + +from admin_interface.models import Theme + + +class AdminInterfaceTestCase(TestCase): + + def setUp(self): + pass + + def tearDown(self): + shutil.rmtree(settings.MEDIA_ROOT, ignore_errors=True) + pass + + def __render_template(self, string, context=None): + + context = context or {} + context = Context(context) + return Template(string).render(context) + + def __test_active_theme(self): + + theme = Theme.get_active_theme() + print( theme ) + self.assertTrue(theme != None) + self.assertTrue(theme.active) + self.assertEqual(Theme.objects.filter( active = True ).count(), 1); + + def test_default_theme_created_if_no_themes(self): + + Theme.objects.all().delete() + self.__test_active_theme() + + def test_default_theme_created_if_all_themes_deleted(self): + + Theme.objects.all().delete() + self.__test_active_theme() + + def test_default_theme_activated_on_save_if_no_active_themes(self): + + Theme.objects.all().delete() + theme = Theme.get_active_theme() + theme.active = False + theme.save() + self.__test_active_theme() + + def test_default_theme_activated_after_update_if_no_active_themes(self): + + Theme.objects.all().delete() + Theme.objects.all().update( active = False ) + self.__test_active_theme() + + def test_default_theme_activated_on_active_theme_deleted(self): + + Theme.objects.all().delete() + theme_1 = Theme.objects.create( name = 'Custom 1', active = True ) + theme_2 = Theme.objects.create( name = 'Custom 2', active = True ) + theme_3 = Theme.objects.create( name = 'Custom 3', active = True ) + Theme.objects.filter( pk = Theme.get_active_theme().pk ).delete() + self.assertEqual( Theme.get_active_theme().pk, 1 ) + + def test_last_theme_activated_on_multiple_themes_created(self): + + Theme.objects.all().delete() + theme_1 = Theme.objects.create( name = 'Custom 1', active = True ) + theme_2 = Theme.objects.create( name = 'Custom 2', active = True ) + theme_3 = Theme.objects.create( name = 'Custom 3', active = True ) + self.assertEqual( Theme.get_active_theme().pk, theme_3.pk ) + self.__test_active_theme() + + def test_templatetags(self): + + Theme.objects.all().delete() + rendered = self.__render_template('{% load admin_interface_tags %}{% get_admin_interface_theme as theme %}{{ theme.name }}') + self.assertEqual(rendered, 'Django') +