diff --git a/fabfile.py b/fabfile.py index 08a84a310..298c9bc5b 100644 --- a/fabfile.py +++ b/fabfile.py @@ -31,7 +31,7 @@ def coverage_report_plain(): Runs all tests and prints the coverage report. """ test() - local('coverage report -m') + local('coverage report -m --fail-under=73') def coverage(): diff --git a/tests/config/test_config.py b/tests/config/test_config.py index 808e96875..fd16a5c5d 100644 --- a/tests/config/test_config.py +++ b/tests/config/test_config.py @@ -13,6 +13,7 @@ from django.contrib.auth.models import Permission from django.contrib.contenttypes.models import ContentType from django.dispatch import receiver from django.test.client import Client +from mock import patch from openslides.config.api import (config, ConfigGroup, ConfigGroupedPage, ConfigPage, ConfigVariable) @@ -210,6 +211,18 @@ class ConfigFormTest(TestCase): text = '' self.assertContains(response=response, text=text, status_code=200) + @patch('openslides.config.views.FormView.get_context_data') + def test_extra_stylefiles_other_context(self, mock_get_context_data): + """ + Tests the view with empty context data at the beginning. + """ + mock_get_context_data.return_value = {} + response = self.client_manager.get('/config/testgroupedpage1/') + text1 = '' + text2 = '' + self.assertContains(response=response, text=text1, status_code=200) + self.assertContains(response=response, text=text2, status_code=200) + class ConfigWeightTest(TestCase): diff --git a/tests/core/test_views.py b/tests/core/test_views.py index 687b8eeee..27f5f90de 100644 --- a/tests/core/test_views.py +++ b/tests/core/test_views.py @@ -9,16 +9,53 @@ """ from django.test.client import Client +from mock import MagicMock, patch from openslides import get_version +from openslides.agenda.models import Item from openslides.participant.models import User from openslides.utils.test import TestCase class VersionViewTest(TestCase): - def test_get(self): + def setUp(self): User.objects.create_user('CoreMaximilian', 'xxx@xx.xx', 'default') - client = Client() - client.login(username='CoreMaximilian', password='default') - response = client.get('/version/') + self.client = Client() + self.client.login(username='CoreMaximilian', password='default') + + def test_get(self): + response = self.client.get('/version/') self.assertContains(response, get_version(), status_code=200) + + @patch('openslides.core.views.settings') + def test_with_missing_plugin(self, mock_settings): + """ + Tests that an not existing app does not appear on the version view. + """ + mock_settings.INSTALLED_PLUGINS = ('unexisting_app_nvhbkdfgmnsd',) + response = self.client.get('/version/') + self.assertNotContains(response, 'unexisting_app_nvhbkdfgmnsd', status_code=200) + + @patch('openslides.core.views.settings') + @patch('openslides.core.views.import_module') + def test_with_plugin_without_version(self, mock_import_module, mock_settings): + """ + Tests that an exisiting app does not appear in the version view if + there are no version data. + """ + mock_settings.INSTALLED_PLUGINS = ('existing_app_without_version',) + mock_module = MagicMock(spec=['some_useless_attribute_ghbnckj756j36']) + mock_import_module.configure_mock(return_value=mock_module) + response = self.client.get('/version/') + self.assertNotContains(response, 'unexisting_app_nvhbkdfgmnsd', status_code=200) + + +class SearchViewTest(TestCase): + def test_simple_search(self): + Item.objects.create(title='agenda_item_bnghfdjkgndkjdfg') + User.objects.create_user('CoreMaximilian', 'xxx@xx.xx', 'default') + self.client = Client() + self.client.login(username='CoreMaximilian', password='default') + response = self.client.get('/search/?q=agenda_item_bnghfd') + text = 'agenda_item_bnghfdjkgndkjdfg' + self.assertContains(response, text) diff --git a/tests/test_init.py b/tests/test_init.py index 0683d8dd1..9845d03b8 100644 --- a/tests/test_init.py +++ b/tests/test_init.py @@ -7,6 +7,10 @@ :license: GNU GPL, see LICENSE for more details. """ +import tempfile + +from mock import MagicMock, patch + from openslides import get_git_commit_id, get_version from openslides.utils.test import TestCase @@ -24,10 +28,28 @@ class InitTest(TestCase): self.assertEqual(get_version(version=(2, 5, 3, 'alpha', 0), release=True), '2.5.3a0') self.assertEqual(get_version(version=(2, 5, 3, 'final', 0), release=True), '2.5.3') - def test_get_git_commit_id(self): + def test_get_git_commit_id_general(self): """ Tests the lenght of the git commit id. """ git_commit_id = get_git_commit_id() if not git_commit_id == 'unknown': self.assertEqual(len(git_commit_id), 40) + + @patch('__builtin__.open', MagicMock(side_effect=IOError)) + def test_get_commit_id_unknown(self): + """ + Tests unknown git commit id. + """ + self.assertEqual(get_git_commit_id(), 'unknown') + + @patch('__builtin__.open') + def test_get_commit_id_without_ref(self, mock): + """ + Tests reading the content of the git_commit_id file. + """ + with tempfile.TemporaryFile() as git_file: + git_file.write('test_id_ahyuGo7yefai7Nai') + git_file.seek(0) + mock.return_value = git_file + self.assertEqual(get_git_commit_id(), 'test_id_ahyuGo7yefai7Nai') diff --git a/tests/utils/test_main.py b/tests/utils/test_main.py index 0e1122c2b..f43a726df 100644 --- a/tests/utils/test_main.py +++ b/tests/utils/test_main.py @@ -12,13 +12,18 @@ import os import sys from django.core.exceptions import ImproperlyConfigured +from mock import MagicMock, patch from openslides.utils.main import ( get_browser_url, + get_database_path_from_settings, get_default_settings_path, get_default_user_data_path, + get_port, + get_portable_paths, get_user_data_path_values, setup_django_settings_module, + start_browser, UNIX_VERSION, WINDOWS_PORTABLE_VERSION) from openslides.utils.test import TestCase @@ -64,3 +69,31 @@ class TestFunctions(TestCase): self.assertEqual(get_browser_url('123.456.789.365', 80), 'http://123.456.789.365') self.assertEqual(get_browser_url('0.0.0.0', 6789), 'http://localhost:6789') self.assertEqual(get_browser_url('0.0.0.0', 80), 'http://localhost') + + def test_get_port(self): + class MyException(Exception): + pass + self.assertEqual(get_port('localhost', 8234), 8234) + with patch('openslides.utils.main.socket') as mock_socket: + mock_socket.error = MyException + mock_socket.socket().listen = MagicMock(side_effect=MyException) + self.assertEqual(get_port('localhost', 80), 8000) + + @patch('openslides.utils.main.time') + @patch('openslides.utils.main.webbrowser') + def test_start_browser(self, mock_webbrowser, mock_time): + browser_mock = MagicMock() + mock_webbrowser.get.return_value = browser_mock + start_browser('http://localhost:8234') + browser_mock.open.assert_called_with('http://localhost:8234') + + def test_get_database_path_from_settings_memory(self): + self.assertEqual(get_database_path_from_settings(), ':memory:') + + @patch('openslides.utils.main.get_win32_portable_path') + def test_get_portable_paths(self, mock_get_win32_portable_path): + mock_get_win32_portable_path.return_value = '/test_path_AhgheeGee1eixaeYe1ra' + self.assertEqual(get_portable_paths('database'), '/test_path_AhgheeGee1eixaeYe1ra/openslides/database.sqlite') + self.assertEqual(get_portable_paths('media'), '/test_path_AhgheeGee1eixaeYe1ra/openslides/media/') + self.assertEqual(get_portable_paths('whoosh_index'), '/test_path_AhgheeGee1eixaeYe1ra/openslides/whoosh_index/') + self.assertRaisesMessage(TypeError, 'Unknown type unknown_string', get_portable_paths, 'unknown_string')