Browse Source

Add initial tests

Denis K 9 years ago
parent
commit
d75a732e5f

+ 0 - 0
jet/tests/__init__.py


+ 33 - 0
jet/tests/dashboard.py

@@ -0,0 +1,33 @@
+from jet import modules
+from jet.dashboard import Dashboard
+
+
+class TestIndexDashboard(Dashboard):
+    columns = 3
+    init_with_context_called = False
+
+    class Media:
+        js = ('file.js', 'file2.js')
+        css = ('file.css', 'file2.css')
+
+    def init_with_context(self, context):
+        self.init_with_context_called = True
+        self.available_children.append(modules.LinkList)
+        self.available_children.append(modules.Feed)
+
+        # append a recent actions module
+        self.children.append(modules.RecentActions(
+            'Recent Actions',
+            10,
+            column=0,
+            order=1
+        ))
+
+        # append a feed module
+        self.children.append(modules.Feed(
+            'Latest Django News',
+            feed_url='http://www.djangoproject.com/rss/weblog/',
+            limit=5,
+            column=1,
+            order=1
+        ))

+ 11 - 0
jet/tests/models.py

@@ -0,0 +1,11 @@
+from django.db import models
+from django.utils.encoding import python_2_unicode_compatible
+
+
+@python_2_unicode_compatible
+class TestModel(models.Model):
+    field1 = models.CharField(max_length=255)
+    field2 = models.IntegerField()
+
+    def __str__(self):
+        return '%s%d' % (self.field1, self.field2)

+ 44 - 0
jet/tests/settings.py

@@ -0,0 +1,44 @@
+from django.conf import global_settings
+
+SECRET_KEY = '!DJANGO_JET_TESTS!'
+
+DEBUG = True
+TEMPLATE_DEBUG = DEBUG
+DEBUG_PROPAGATE_EXCEPTIONS = True
+
+ROOT_URLCONF = 'jet.tests.urls'
+
+INSTALLED_APPS = (
+    'jet',
+    'django.contrib.auth',
+    'django.contrib.contenttypes',
+    'django.contrib.sessions',
+    'django.contrib.sites',
+    'django.contrib.messages',
+    'django.contrib.admin',
+    'jet.tests',
+)
+
+TEMPLATE_CONTEXT_PROCESSORS = global_settings.TEMPLATE_CONTEXT_PROCESSORS + (
+    'django.core.context_processors.request',
+)
+
+DATABASES = {
+    'default': {
+        'ENGINE': 'django.db.backends.sqlite3',
+    }
+}
+
+TIME_ZONE = 'UTC'
+LANGUAGE_CODE = 'en-US'
+USE_I18N = True
+USE_L10N = True
+
+MEDIA_ROOT = ''
+MEDIA_URL = ''
+
+STATIC_URL = '/static/'
+
+
+
+

+ 65 - 0
jet/tests/test_dashboard.py

@@ -0,0 +1,65 @@
+from django.contrib.auth.models import User
+from django.test import TestCase, Client
+from jet.modules import LinkList, RecentActions
+from jet.models import UserDashboardModule
+from jet.tests.dashboard import TestIndexDashboard
+
+
+class DashboardTestCase(TestCase):
+    class Request:
+        def __init__(self, user):
+            self.user = user
+
+    def setUp(self):
+        self._login()
+        self._init_dashboard()
+
+    def _login(self):
+        username = 'admin'
+        email = 'admin@example.com'
+        password = 'admin'
+        self.admin = Client()
+        self.admin_user = User.objects.create_superuser(username, email, password)
+        return self.admin.login(username=username, password=password)
+
+    def _init_dashboard(self):
+        UserDashboardModule.objects.create(
+            title='',
+            module='jet.modules.LinkList',
+            app_label=None,
+            user=self.admin_user.pk,
+            column=0,
+            order=0
+        )
+        UserDashboardModule.objects.create(
+            title='',
+            module='jet.modules.RecentActions',
+            app_label=None,
+            user=self.admin_user.pk,
+            column=0,
+            order=1
+        )
+        self.dashboard = TestIndexDashboard({'request': self.Request(self.admin_user)})
+
+    def test_custom_columns(self):
+        self.assertEqual(self.dashboard.columns, 3)
+
+    def test_init_with_context_called(self):
+        self.assertTrue(self.dashboard.init_with_context_called)
+
+    def test_load_modules(self):
+        self.assertEqual(len(self.dashboard.modules), 2)
+        self.assertTrue(isinstance(self.dashboard.modules[0], LinkList))
+        self.assertTrue(isinstance(self.dashboard.modules[1], RecentActions))
+
+    def test_media(self):
+        media = self.dashboard.media()
+        self.assertEqual(len(media.js), 2)
+        self.assertEqual(media.js[0], 'file.js')
+        self.assertEqual(media.js[1], 'file2.js')
+        self.assertEqual(len(media.css), 2)
+        self.assertEqual(media.css[0], 'file.css')
+        self.assertEqual(media.css[1], 'file2.css')
+
+
+

+ 19 - 0
jet/tests/test_utils.py

@@ -0,0 +1,19 @@
+from django.test import TestCase
+from jet.tests.models import TestModel
+from jet.utils import JsonResponse, get_model_instance_label
+
+
+class UtilsTestCase(TestCase):
+    def test_json_response(self):
+        response = JsonResponse({'str': 'string', 'int': 1})
+        self.assertEqual(response.content, '{"int": 1, "str": "string"}')
+        self.assertEqual(response.get('Content-Type'), 'application/json')
+
+    def test_get_model_instance_label(self):
+        field1 = 'value'
+        field2 = 2
+        pinned_application = TestModel.objects.create(field1=field1, field2=field2)
+        self.assertEqual(get_model_instance_label(pinned_application), '%s%d' % (field1, field2))
+
+
+

+ 212 - 0
jet/tests/test_views.py

@@ -0,0 +1,212 @@
+import json
+from django.contrib.auth.models import User
+from django.core.urlresolvers import reverse
+from django.test import TestCase, Client
+from jet.modules import LinkList
+from jet.models import UserDashboardModule, Bookmark
+
+
+class ViewsTestCase(TestCase):
+    def setUp(self):
+        self.assertTrue(self._login())
+
+    def _login(self):
+        username = 'admin'
+        email = 'admin@example.com'
+        password = 'admin'
+        self.admin = Client()
+        self.admin_user = User.objects.create_superuser(username, email, password)
+        return self.admin.login(username=username, password=password)
+
+    def test_module_update_view(self):
+        title = 'Quick links Test'
+        new_title = title + '2'
+        new_layout = 'stacked'
+        module = UserDashboardModule.objects.create(
+            title=title,
+            module='jet.modules.LinkList',
+            app_label=None,
+            user=self.admin_user.pk,
+            column=0,
+            order=0,
+            settings='{"layout": "inline"}',
+            children='[]'
+        )
+        response = self.admin.get(reverse('jet:update_module', kwargs={'pk': module.pk}))
+
+        self.assertEqual(response.status_code, 200)
+        self.assertTrue(response.context['module'] is not None)
+        self.assertTrue(isinstance(response.context['module'], LinkList))
+        self.assertEqual(response.context['module'].title, title)
+
+        post = {
+            'title': new_title,
+            'layout': new_layout,
+            'children-TOTAL_FORMS': '2',
+            'children-INITIAL_FORMS': '1',
+            'children-MIN_NUM_FORMS': '0',
+            'children-MAX_NUM_FORMS': '1000',
+            'children-0-url': 'http://docs.djangoproject.com/',
+            'children-0-title': 'Django documentation',
+            'children-0-external': 'on',
+            'children-1-url': '',
+            'children-1-title': '',
+            'children-__prefix__-url': '',
+            'children-__prefix__-title': '',
+            '_save': 'Save'
+        }
+
+        self.admin.post(reverse('jet:update_module', kwargs={'pk': module.pk}), post)
+        module = UserDashboardModule.objects.get(pk=module.pk)
+        settings = json.loads(module.settings)
+        self.assertEqual(module.title, new_title)
+        self.assertEqual(settings['layout'], new_layout)
+
+        module.delete()
+
+    def test_add_bookmark_view(self):
+        url = 'http://test.com/'
+        title = 'Title'
+        response = self.admin.post(reverse('jet:add_bookmark'), {'url': url, 'title': title})
+        self.assertEqual(response.status_code, 200)
+        response = json.loads(response.content)
+        self.assertFalse(response['error'])
+        self.assertNotEqual(response['id'], None)
+        bookmark = Bookmark.objects.get(pk=response['id'])
+        self.assertNotEqual(bookmark, None)
+        self.assertEqual(bookmark.title, title)
+        self.assertEqual(bookmark.url, url)
+
+    def test_add_bookmark_view_unauthorized(self):
+        url = 'http://test.com/'
+        title = 'Title'
+        response = self.client.post(reverse('jet:add_bookmark'), {'url': url, 'title': title})
+        self.assertEqual(response.status_code, 200)
+        response = json.loads(response.content)
+        self.assertTrue(response['error'])
+
+    def test_remove_bookmark_view(self):
+        url = 'http://test.com/'
+        title = 'Title'
+        bookmark = Bookmark.objects.create(url=url, title=title, user=self.admin_user.pk)
+        response = self.admin.post(reverse('jet:remove_bookmark'), {'id': bookmark.id})
+        self.assertEqual(response.status_code, 200)
+        response = json.loads(response.content)
+        self.assertFalse(response['error'])
+        self.assertFalse(Bookmark.objects.filter(pk=bookmark.pk).exists())
+
+    def test_toggle_application_pin_view(self):
+        app_label = 'test_app'
+
+        response = self.admin.post(reverse('jet:toggle_application_pin'), {'app_label': app_label})
+        self.assertEqual(response.status_code, 200)
+        response = json.loads(response.content)
+        self.assertFalse(response['error'])
+        self.assertTrue(response['pinned'])
+
+        response = self.admin.post(reverse('jet:toggle_application_pin'), {'app_label': app_label})
+        self.assertEqual(response.status_code, 200)
+        response = json.loads(response.content)
+        self.assertFalse(response['error'])
+        self.assertFalse(response['pinned'])
+
+    def test_update_dashboard_modules_view(self):
+        app_label = None
+        module_0 = UserDashboardModule.objects.create(
+            title='',
+            module='jet.modules.LinkList',
+            app_label=app_label,
+            user=self.admin_user.pk,
+            column=0,
+            order=0
+        )
+        module_1 = UserDashboardModule.objects.create(
+            title='',
+            module='jet.modules.LinkList',
+            app_label=app_label,
+            user=self.admin_user.pk,
+            column=0,
+            order=1
+        )
+        response = self.admin.post(reverse('jet:update_dashboard_modules'), {
+            'app_label': '',
+            'modules': json.dumps([
+                {'id': module_0.pk, 'column': 0, 'order': 1},
+                {'id': module_1.pk, 'column': 0, 'order': 0}
+            ])
+        })
+
+        self.assertEqual(response.status_code, 200)
+        response = json.loads(response.content)
+        self.assertFalse(response['error'])
+
+        module_0 = UserDashboardModule.objects.get(pk=module_0.pk)
+        module_1 = UserDashboardModule.objects.get(pk=module_1.pk)
+
+        self.assertEqual(module_0.order, 1)
+        self.assertEqual(module_1.order, 0)
+
+        module_0.delete()
+        module_1.delete()
+
+    def test_add_user_dashboard_module_view(self):
+        response = self.admin.post(reverse('jet:add_user_dashboard_module_view'), {
+            'app_label': '',
+            'type': 'available_children',
+            'module': 0
+        })
+
+        self.assertEqual(response.status_code, 200)
+        response = json.loads(response.content)
+        self.assertFalse(response['error'])
+        self.assertNotEqual(response['id'], None)
+        module = UserDashboardModule.objects.get(pk=response['id'])
+        self.assertNotEqual(module, None)
+
+    def test_update_dashboard_module_collapse_view(self):
+        module = UserDashboardModule.objects.create(
+            title='',
+            module='jet.modules.LinkList',
+            app_label=None,
+            user=self.admin_user.pk,
+            column=0,
+            order=0
+        )
+        response = self.admin.post(reverse('jet:update_dashboard_module_collapse'), {
+            'id': module.pk, 'collapsed': True
+        })
+        self.assertEqual(response.status_code, 200)
+        response = json.loads(response.content)
+        self.assertFalse(response['error'])
+        self.assertTrue(response['collapsed'])
+
+        module = UserDashboardModule.objects.get(pk=module.pk)
+        response = self.admin.post(reverse('jet:update_dashboard_module_collapse'), {
+            'id': module.pk, 'collapsed': False
+        })
+        self.assertEqual(response.status_code, 200)
+        response = json.loads(response.content)
+        self.assertFalse(response['error'])
+        self.assertFalse(response['collapsed'])
+
+        module.delete()
+
+    def test_remove_dashboard_module_view(self):
+        module = UserDashboardModule.objects.create(
+            title='',
+            module='jet.modules.LinkList',
+            app_label=None,
+            user=self.admin_user.pk,
+            column=0,
+            order=0
+        )
+        response = self.admin.post(reverse('jet:remove_dashboard_module'), {'id': module.pk})
+        self.assertEqual(response.status_code, 200)
+        response = json.loads(response.content)
+        self.assertFalse(response['error'])
+        self.assertFalse(UserDashboardModule.objects.filter(pk=module.pk).exists())
+
+
+
+
+

+ 11 - 0
jet/tests/urls.py

@@ -0,0 +1,11 @@
+from django.conf.urls import patterns, include, url
+from django.contrib import admin
+
+admin.autodiscover()
+
+urlpatterns = patterns(
+    '',
+    url(r'^jet/', include('jet.urls', 'jet')),
+    url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
+    url(r'^admin/', include(admin.site.urls)),
+)

+ 10 - 0
manage.py

@@ -0,0 +1,10 @@
+#!/usr/bin/env python
+import os
+import sys
+
+if __name__ == "__main__":
+    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "jet.tests.settings")
+
+    from django.core.management import execute_from_command_line
+
+    execute_from_command_line(sys.argv)