1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
|
# encoding: utf-8
from __future__ import absolute_import, division, print_function, unicode_literals
from django.conf import settings
from django.core.management import call_command
from django.test import TestCase
from mock import call, patch
__all__ = ['CoreManagementCommandsTestCase']
class CoreManagementCommandsTestCase(TestCase):
@patch("haystack.management.commands.update_index.Command.update_backend")
def test_update_index_default_using(self, m):
"""update_index uses default index when --using is not present"""
call_command('update_index')
for k in settings.HAYSTACK_CONNECTIONS:
self.assertTrue(call('core', k) in m.call_args_list)
@patch("haystack.management.commands.update_index.Command.update_backend")
def test_update_index_using(self, m):
"""update_index only applies to indexes specified with --using"""
call_command('update_index', verbosity=0, using=["eng", "fra"])
m.assert_any_call("core", "eng")
m.assert_any_call("core", "fra")
self.assertTrue(call("core", "default") not in m.call_args_list,
"update_index should have been restricted to the index specified with --using")
@patch("haystack.loading.ConnectionHandler.__getitem__")
def test_clear_index_default_using(self, m):
"""clear_index uses all keys when --using is not present"""
call_command('clear_index', verbosity=0, interactive=False)
self.assertEqual(len(settings.HAYSTACK_CONNECTIONS), m.call_count)
for k in settings.HAYSTACK_CONNECTIONS:
self.assertTrue(call(k) in m.call_args_list)
@patch("haystack.loading.ConnectionHandler.__getitem__")
def test_clear_index_using(self, m):
"""clear_index only applies to indexes specified with --using"""
call_command('clear_index', verbosity=0, interactive=False, using=["eng"])
m.assert_called_with("eng")
self.assertTrue(m.return_value.get_backend.called, "backend.clear() should be called")
self.assertTrue(call("default") not in m.call_args_list,
"clear_index should have been restricted to the index specified with --using")
@patch("haystack.loading.ConnectionHandler.__getitem__")
@patch("haystack.management.commands.update_index.Command.update_backend")
def test_rebuild_index_default_using(self, m1, m2):
"""rebuild_index uses default index when --using is not present"""
call_command('rebuild_index', verbosity=0, interactive=False)
self.assertEqual(len(settings.HAYSTACK_CONNECTIONS), m2.call_count)
for k in settings.HAYSTACK_CONNECTIONS:
self.assertTrue(call(k) in m2.call_args_list)
m1.assert_any_call("core", "default")
m1.assert_any_call("core", "whoosh")
@patch("haystack.loading.ConnectionHandler.__getitem__")
@patch("haystack.management.commands.update_index.Command.update_backend")
def test_rebuild_index_using(self, m1, m2):
"""rebuild_index passes --using to clear_index and update_index"""
call_command('rebuild_index', verbosity=0, interactive=False, using=["eng"])
m2.assert_called_with("eng")
m1.assert_any_call("core", "eng")
@patch('haystack.management.commands.update_index.Command.handle', return_value='')
@patch('haystack.management.commands.clear_index.Command.handle', return_value='')
def test_rebuild_index(self, mock_handle_clear, mock_handle_update):
call_command('rebuild_index', interactive=False)
self.assertTrue(mock_handle_clear.called)
self.assertTrue(mock_handle_update.called)
@patch('haystack.management.commands.update_index.Command.handle')
@patch('haystack.management.commands.clear_index.Command.handle')
def test_rebuild_index_nocommit(self, *mocks):
call_command('rebuild_index', interactive=False, commit=False)
for m in mocks:
self.assertEqual(m.call_count, 1)
args, kwargs = m.call_args
self.assertIn('commit', kwargs)
self.assertEqual(False, kwargs['commit'])
@patch('haystack.management.commands.clear_index.Command.handle', return_value='')
@patch('haystack.management.commands.update_index.Command.handle', return_value='')
def test_rebuild_index_nocommit(self, update_mock, clear_mock):
"""
Confirm that command-line option parsing produces the same results as using call_command() directly,
mostly as a sanity check for the logic in rebuild_index which combines the option_lists for its
component commands.
"""
from haystack.management.commands.rebuild_index import Command
Command().run_from_argv(['django-admin.py', 'rebuild_index', '--noinput', '--nocommit'])
for m in (clear_mock, update_mock):
self.assertEqual(m.call_count, 1)
args, kwargs = m.call_args
self.assertIn('commit', kwargs)
self.assertEqual(False, kwargs['commit'])
args, kwargs = clear_mock.call_args
self.assertIn('interactive', kwargs)
self.assertIs(kwargs['interactive'], False)
|