Skip to content

Commit aa01d76

Browse files
authored
Merge pull request #210 from algolia/feat/reset
Reset method to leverage override_settings, solving #169 & #209
2 parents 3eccb18 + ce48c88 commit aa01d76

File tree

3 files changed

+43
-2
lines changed

3 files changed

+43
-2
lines changed

README.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -259,5 +259,22 @@ To run the tests, first find your Algolia application id and Admin API key (foun
259259
ALGOLIA_APPLICATION_ID={APPLICATION_ID} ALGOLIA_API_KEY={ADMIN_API_KEY} tox
260260
```
261261

262+
To override settings for some tests, use the [settings method](https://docs.djangoproject.com/en/1.11/topics/testing/tools/#django.test.SimpleTestCase.settings):
263+
```python
264+
class OverrideSettingsTestCase(TestCase):
265+
def setUp(self):
266+
with self.settings(ALGOLIA={
267+
'APPLICATION_ID': 'foo',
268+
'API_KEY': 'bar',
269+
'AUTO_INDEXING': False
270+
}):
271+
algolia_engine.reset(settings.ALGOLIA)
272+
273+
def tearDown(self):
274+
algolia_engine.reset(settings.ALGOLIA)
275+
276+
def test_foo():
277+
# ...
278+
```
262279

263280

algoliasearch_django/registration.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ class RegistrationError(AlgoliaEngineError):
2222

2323
class AlgoliaEngine(object):
2424
def __init__(self, settings=SETTINGS):
25-
"""Initializes Algolia engine."""
25+
"""Initializes the Algolia engine."""
2626

2727
try:
2828
app_id = settings['APPLICATION_ID']
@@ -166,6 +166,12 @@ def reindex_all(self, model, batch_size=1000):
166166
adapter = self.get_adapter(model)
167167
return adapter.reindex_all(batch_size)
168168

169+
def reset(self, settings=None):
170+
"""Reinitializes the Algolia engine and its client.
171+
:param settings: settings to use instead of the default django.conf.settings.algolia
172+
"""
173+
self.__init__(settings=settings if settings is not None else SETTINGS)
174+
169175
# Signalling hooks.
170176

171177
def __post_save_receiver(self, instance, **kwargs):
@@ -178,5 +184,6 @@ def __pre_delete_receiver(self, instance, **kwargs):
178184
logger.debug('RECEIVE pre_delete FOR %s', instance.__class__)
179185
self.delete_record(instance)
180186

187+
181188
# Algolia engine
182189
algolia_engine = AlgoliaEngine()

tests/test_engine.py

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from django.conf import settings
2-
from django.test import TestCase
2+
from django.test import TestCase, override_settings
33

4+
from algoliasearch_django import algolia_engine
45
from algoliasearch_django import AlgoliaIndex
56
from algoliasearch_django import AlgoliaEngine
67
from algoliasearch_django.registration import AlgoliaEngineError
@@ -90,3 +91,19 @@ def test_unregister_exception(self):
9091

9192
with self.assertRaises(RegistrationError):
9293
self.engine.unregister(Website)
94+
95+
96+
class OverrideSettingsTestCase(TestCase):
97+
def setUp(self):
98+
with self.settings(ALGOLIA={
99+
'APPLICATION_ID': 'foo',
100+
'API_KEY': 'bar',
101+
'AUTO_INDEXING': False
102+
}):
103+
algolia_engine.reset(settings.ALGOLIA)
104+
105+
def tearDown(self):
106+
algolia_engine.reset(settings.ALGOLIA)
107+
108+
def test_no_indexing(self):
109+
self.assertFalse(algolia_engine.__dict__["_AlgoliaEngine__auto_indexing"], "AUTO_INDEXING should be disabled for this test.")

0 commit comments

Comments
 (0)