def test_prepare(self): mock = MockModel() mock.pk = 1 pk = IntegerField(model_attr='pk') self.assertEqual(pk.prepare(mock), 1) # Simulate failed lookups. mock_tag = MockTag(name='primary') mock = MockModel() mock.tag = mock_tag tag_count = IntegerField(model_attr='tag__count') self.assertRaises(SearchFieldError, tag_count.prepare, mock) # Simulate default=1. mock = MockModel() default = IntegerField(default=1) self.assertEqual(default.prepare(mock), 1) # Simulate null=True. mock = MockModel() pk_none = IntegerField(model_attr='pk', null=True) self.assertEqual(pk_none.prepare(mock), None)
def test_remove_object(self): self.mi.update() self.assertEqual(self.sb.search('*')['hits'], 3) mock = MockModel() mock.pk = 20 mock.author = 'daniel%s' % mock.id mock.pub_date = datetime.datetime(2009, 1, 31, 4, 19, 0) self.mi.update_object(mock) self.assertEqual(self.sb.search('*')['hits'], 4) self.mi.remove_object(mock) self.assertEqual([(res.content_type(), res.pk) for res in self.sb.search('*')['results']], [('core.mockmodel', '1'), ('core.mockmodel', '2'), ('core.mockmodel', '3')]) # Put it back so we can test passing kwargs. mock = MockModel() mock.pk = 20 mock.author = 'daniel%s' % mock.id mock.pub_date = datetime.datetime(2009, 1, 31, 4, 19, 0) self.mi.update_object(mock) self.assertEqual(self.sb.search('*')['hits'], 4) self.mi.remove_object(mock, commit=False) self.assertEqual([(res.content_type(), res.pk) for res in self.sb.search('*')['results']], [('core.mockmodel', '1'), ('core.mockmodel', '2'), ('core.mockmodel', '3'), ('core.mockmodel', '20')]) self.sb.clear()
def test_prepare(self): mock = MockModel() mock.pub_date = datetime.date(2009, 2, 13) pub_date = DateField(model_attr='pub_date') self.assertEqual(pub_date.prepare(mock), datetime.date(2009, 2, 13)) # Simulate default=datetime.date(2000, 1, 1). mock = MockModel() default = DateField(default=datetime.date(2000, 1, 1)) self.assertEqual(default.prepare(mock), datetime.date(2000, 1, 1))
def setUp(self): self.sample_objs = [] for i in xrange(1, 4): mock = MockModel() mock.id = i mock.author = 'daniel%s' % i mock.pub_date = datetime.date(2009, 2, 25) - datetime.timedelta(days=i) self.sample_objs.append(mock) # Stow. # Point the backend at a URL that doesn't exist so we can watch the # sparks fly. self.old_es_url = settings.HAYSTACK_CONNECTIONS['default']['URL'] settings.HAYSTACK_CONNECTIONS['default']['URL'] = "%s/foo/" % self.old_es_url self.cap = CaptureHandler() logging.getLogger('haystack').addHandler(self.cap) import haystack logging.getLogger('haystack').removeHandler(haystack.stream) # Setup the rest of the bits. self.old_ui = connections['default'].get_unified_index() ui = UnifiedIndex() self.smmi = ElasticsearchMockSearchIndex() ui.build(indexes=[self.smmi]) connections['default']._index = ui self.sb = connections['default'].get_backend()
def setUp(self): super(LiveWhooshRamStorageTestCase, self).setUp() # Stow. self.old_whoosh_storage = getattr(settings, 'HAYSTACK_WHOOSH_STORAGE', 'file') settings.HAYSTACK_WHOOSH_STORAGE = 'ram' self.site = SearchSite() self.sb = SearchBackend(site=self.site) self.wrtsi = WhooshRoundTripSearchIndex(MockModel, backend=self.sb) self.site.register(MockModel, WhooshRoundTripSearchIndex) # Stow. import haystack self.old_debug = settings.DEBUG settings.DEBUG = True self.old_site = haystack.site haystack.site = self.site self.sb.setup() self.raw_whoosh = self.sb.index self.parser = QueryParser(self.sb.content_field_name, schema=self.sb.schema) self.sqs = SearchQuerySet(site=self.site) # Wipe it clean. self.sqs.query.backend.clear() # Fake indexing. mock = MockModel() mock.id = 1 self.sb.update(self.wrtsi, [mock])
def setUp(self): super(SolrSearchBackendTestCase, self).setUp() # Wipe it clean. self.raw_solr = pysolr.Solr(settings.HAYSTACK_SOLR_URL) clear_solr_index() self.site = SearchSite() self.sb = SearchBackend(site=self.site) self.smmi = SolrMockSearchIndex(MockModel, backend=self.sb) self.smtmmi = SolrMaintainTypeMockSearchIndex(MockModel, backend=self.sb) self.site.register(MockModel, SolrMockSearchIndex) # Stow. import haystack self.old_site = haystack.site haystack.site = self.site self.sample_objs = [] for i in xrange(1, 4): mock = MockModel() mock.id = i mock.author = 'daniel%s' % i mock.pub_date = datetime.date(2009, 2, 25) - datetime.timedelta(days=i) self.sample_objs.append(mock)
def setUp(self): super(LiveWhooshSearchQueryTestCase, self).setUp() # Stow. temp_path = os.path.join('tmp', 'test_whoosh_query') self.old_whoosh_path = settings.HAYSTACK_CONNECTIONS['default']['PATH'] settings.HAYSTACK_CONNECTIONS['default']['PATH'] = temp_path self.old_ui = connections['default'].get_unified_index() self.ui = UnifiedIndex() self.wmmi = WhooshMockSearchIndex() self.wmtmmi = WhooshMaintainTypeMockSearchIndex() self.ui.build(indexes=[self.wmmi]) self.sb = connections['default'].get_backend() connections['default']._index = self.ui self.sb.setup() self.raw_whoosh = self.sb.index self.parser = QueryParser(self.sb.content_field_name, schema=self.sb.schema) self.sb.delete_index() self.sample_objs = [] for i in range(1, 4): mock = MockModel() mock.id = i mock.author = 'daniel%s' % i mock.pub_date = date(2009, 2, 25) - timedelta(days=i) self.sample_objs.append(mock) self.sq = connections['default'].get_query()
def setUp(self): super(LiveWhooshRamStorageTestCase, self).setUp() # Stow. self.old_whoosh_storage = settings.HAYSTACK_CONNECTIONS['default'].get( 'STORAGE', 'file') settings.HAYSTACK_CONNECTIONS['default']['STORAGE'] = 'ram' self.old_ui = connections['default'].get_unified_index() self.ui = UnifiedIndex() self.wrtsi = WhooshRoundTripSearchIndex() self.ui.build(indexes=[self.wrtsi]) self.sb = connections['default'].get_backend() connections['default']._index = self.ui # Stow. import haystack self.old_debug = settings.DEBUG settings.DEBUG = True self.sb.setup() self.raw_whoosh = self.sb.index self.parser = QueryParser(self.sb.content_field_name, schema=self.sb.schema) self.sqs = SearchQuerySet() # Wipe it clean. self.sqs.query.backend.clear() # Fake indexing. mock = MockModel() mock.id = 1 self.sb.update(self.wrtsi, [mock])
def setUp(self): super(SolrSearchBackendTestCase, self).setUp() # Wipe it clean. self.raw_solr = pysolr.Solr( settings.HAYSTACK_CONNECTIONS['default']['URL']) clear_solr_index() # Stow. self.old_ui = connections['default'].get_unified_index() self.ui = UnifiedIndex() self.smmi = SolrMockSearchIndex() self.smtmmi = SolrMaintainTypeMockSearchIndex() self.ui.build(indexes=[self.smmi]) connections['default']._index = self.ui self.sb = connections['default'].get_backend() self.sample_objs = [] for i in xrange(1, 4): mock = MockModel() mock.id = i mock.author = 'daniel%s' % i mock.pub_date = datetime.date(2009, 2, 25) - datetime.timedelta(days=i) self.sample_objs.append(mock)
def test_prepare(self): mock = MockModel() mock.pk = 1 mock.user = '******' template1 = CharField(use_template=True) self.assertRaises(SearchFieldError, template1.prepare, mock) template2 = CharField(use_template=True) template2.instance_name = 'template_x' self.assertRaises(TemplateDoesNotExist, template2.prepare, mock) template3 = CharField(use_template=True) template3.instance_name = 'template' self.assertEqual(template3.prepare(mock), 'Indexed!\n1') template4 = CharField(use_template=True, template_name='search/indexes/foo.txt') template4.instance_name = 'template' self.assertEqual(template4.prepare(mock), 'FOO!\n') template5 = CharField( use_template=True, template_name=['foo.txt', 'search/indexes/bar.txt']) template5.instance_name = 'template' self.assertEqual(template5.prepare(mock), 'BAR!\n')
def test_remove_object(self): self.site.register(MockModel, FakeSearchIndex) mock = MockModel() mock.pk = 20 self.assertEqual(self.site.remove_object(mock), True)
def test_prepare(self): mock = MockModel() mock.user = '******' mock.sites = [1, 3, 4] sites = FacetMultiValueField(model_attr='sites') self.assertEqual(sites.prepare(mock), [1, 3, 4])
def test_prepare(self): mock = MockModel() mock.user = '******' mock.is_active = True is_active = FacetBooleanField(model_attr='is_active') self.assertEqual(is_active.prepare(mock), True)
def test_prepare(self): mock = MockModel() mock.user = '******' mock.created = datetime.date(2010, 10, 30) created = FacetDateField(model_attr='created') self.assertEqual(created.prepare(mock), datetime.date(2010, 10, 30))
def setUp(self): super(LiveWhooshRoundTripTestCase, self).setUp() # Stow. temp_path = os.path.join('tmp', 'test_whoosh_query') self.old_whoosh_path = getattr(settings, 'HAYSTACK_WHOOSH_PATH', temp_path) settings.HAYSTACK_WHOOSH_PATH = temp_path self.site = SearchSite() self.sb = SearchBackend(site=self.site) self.wrtsi = WhooshRoundTripSearchIndex(MockModel, backend=self.sb) self.site.register(MockModel, WhooshRoundTripSearchIndex) # Stow. import haystack self.old_debug = settings.DEBUG settings.DEBUG = True self.old_site = haystack.site haystack.site = self.site self.sb.setup() self.raw_whoosh = self.sb.index self.parser = QueryParser(self.sb.content_field_name, schema=self.sb.schema) self.sb.delete_index() self.sqs = SearchQuerySet(site=self.site) # Wipe it clean. self.sqs.query.backend.clear() # Fake indexing. mock = MockModel() mock.id = 1 self.sb.update(self.wrtsi, [mock])
def test_prepare(self): mock = MockModel() mock.user = '******' mock.price = 25.65 price = FacetFloatField(model_attr='price') self.assertEqual(price.prepare(mock), 25.65)
def setUp(self): super(LiveWhooshSearchQueryTestCase, self).setUp() # Stow. temp_path = os.path.join('tmp', 'test_whoosh_query') self.old_whoosh_path = getattr(settings, 'HAYSTACK_WHOOSH_PATH', temp_path) settings.HAYSTACK_WHOOSH_PATH = temp_path self.site = SearchSite() self.sb = SearchBackend(site=self.site) self.smmi = WhooshMockSearchIndex(MockModel, backend=self.sb) self.site.register(MockModel, WhooshMockSearchIndex) self.sb.setup() self.raw_whoosh = self.sb.index self.parser = QueryParser(self.sb.content_field_name, schema=self.sb.schema) self.sb.delete_index() self.sample_objs = [] for i in xrange(1, 4): mock = MockModel() mock.id = i mock.author = 'daniel%s' % i mock.pub_date = date(2009, 2, 25) - timedelta(days=i) self.sample_objs.append(mock) self.sq = SearchQuery(backend=self.sb)
def setUp(self): super(LiveWhooshRoundTripTestCase, self).setUp() # Stow. temp_path = os.path.join('tmp', 'test_whoosh_query') self.old_whoosh_path = settings.HAYSTACK_CONNECTIONS['default']['PATH'] settings.HAYSTACK_CONNECTIONS['default']['PATH'] = temp_path self.old_ui = connections['default'].get_unified_index() self.ui = UnifiedIndex() self.wrtsi = WhooshRoundTripSearchIndex() self.ui.build(indexes=[self.wrtsi]) self.sb = connections['default'].get_backend() connections['default']._index = self.ui self.old_debug = settings.DEBUG settings.DEBUG = True self.sb.setup() self.raw_whoosh = self.sb.index self.parser = QueryParser(self.sb.content_field_name, schema=self.sb.schema) self.sb.delete_index() self.sqs = SearchQuerySet() # Wipe it clean. self.sqs.query.backend.clear() # Fake indexing. mock = MockModel() mock.id = 1 self.sb.update(self.wrtsi, [mock])
def setUp(self): super(ElasticsearchSearchBackendTestCase, self).setUp() # Wipe it clean. self.raw_es = pyelasticsearch.ElasticSearch(settings.HAYSTACK_CONNECTIONS['default']['URL']) clear_elasticsearch_index() # Stow. self.old_ui = connections['default'].get_unified_index() self.ui = UnifiedIndex() self.smmi = ElasticsearchMockSearchIndex() self.smtmmi = ElasticsearchMaintainTypeMockSearchIndex() self.ui.build(indexes=[self.smmi]) connections['default']._index = self.ui self.sb = connections['default'].get_backend() # Force the backend to rebuild the mapping each time. self.sb.existing_mapping = {} self.sb.setup() self.sample_objs = [] for i in xrange(1, 4): mock = MockModel() mock.id = i mock.author = 'daniel%s' % i mock.pub_date = datetime.date(2009, 2, 25) - datetime.timedelta(days=i) self.sample_objs.append(mock)
def test_prepare(self): mock = MockModel() mock.user = '******' mock.view_count = 13 view_count = FacetIntegerField(model_attr='view_count') self.assertEqual(view_count.prepare(mock), 13)
def test_thread_safety(self): # This is a regression. ``SearchIndex`` used to write to # ``self.prepared_data``, which would leak between threads if things # went too fast. exceptions = [] def threaded_prepare(index_queue, index, model): try: index.queue = index_queue prepped = index.prepare(model) except Exception as e: exceptions.append(e) raise class ThreadedSearchIndex(GoodMockSearchIndex): def prepare_author(self, obj): if obj.pk == 20: time.sleep(0.1) else: time.sleep(0.5) index_queue.put(self.prepared_data['author']) return self.prepared_data['author'] tmi = ThreadedSearchIndex() index_queue = queue.Queue() mock_1 = MockModel() mock_1.pk = 20 mock_1.author = 'foo' mock_1.pub_date = datetime.datetime(2009, 1, 31, 4, 19, 0) mock_2 = MockModel() mock_2.pk = 21 mock_2.author = 'daniel%s' % mock_2.id mock_2.pub_date = datetime.datetime(2009, 1, 31, 4, 19, 0) th1 = Thread(target=threaded_prepare, args=(index_queue, tmi, mock_1)) th2 = Thread(target=threaded_prepare, args=(index_queue, tmi, mock_2)) th1.start() th2.start() th1.join() th2.join() mock_1_result = index_queue.get() mock_2_result = index_queue.get() self.assertEqual(mock_1_result, 'foo') self.assertEqual(mock_2_result, 'daniel21')
def test_prepare(self): mock = MockModel() mock.pk = 20 mock.author = 'daniel%s' % mock.id mock.pub_date = datetime.datetime(2009, 1, 31, 4, 19, 0) self.assertEqual(len(self.mi.prepare(mock)), 7) self.assertEqual(sorted(self.mi.prepare(mock).keys()), ['author', 'django_ct', 'django_id', 'extra', 'id', 'pub_date', 'text'])
def test_more_like_this(self): mock = MockModel() mock.id = 1 msq = MockSearchQuery(backend=MockSearchBackend()) msq.more_like_this(mock) self.assertEqual(msq.get_count(), 100) self.assertEqual(msq.get_results()[0], MOCK_SEARCH_RESULTS[0])
def test_update_object(self): self.site.register(MockModel, FakeSearchIndex) mock = MockModel() mock.pk = 20 mock.user = '******' % mock.id mock.pub_date = datetime.datetime(2009, 1, 31, 4, 19, 0) self.assertEqual(self.site.update_object(mock), True)
def test_prepare(self): mock = MockModel() mock.floaty = Decimal('12.5') floaty = DecimalField(model_attr='floaty') self.assertEqual(floaty.prepare(mock), '12.5') # Simulate default=1.5. mock = MockModel() default = DecimalField(default='1.5') self.assertEqual(default.prepare(mock), '1.5') # Simulate null=True. mock = MockModel() floaty_none = DecimalField(null=True) self.assertEqual(floaty_none.prepare(mock), None)
def test_prepare(self): mock = MockModel() mock.floaty = 12.5 floaty = FloatField(model_attr='floaty') self.assertEqual(floaty.prepare(mock), 12.5) # Simulate default=1.5. mock = MockModel() default = FloatField(default=1.5) self.assertEqual(default.prepare(mock), 1.5) # Simulate null=True. mock = MockModel() floaty_none = FloatField(null=True) self.assertEqual(floaty_none.prepare(mock), None)
def test_prepare(self): mock = MockModel() mock.sites = ['3', '4', '5'] sites = MultiValueField(model_attr='sites') self.assertEqual(sites.prepare(mock), ['3', '4', '5']) # Simulate default=[1]. mock = MockModel() default = MultiValueField(default=[1]) self.assertEqual(default.prepare(mock), [1]) # Simulate null=True. mock = MockModel() multy_none = MultiValueField(null=True) self.assertEqual(multy_none.prepare(mock), None)
def test_remove_object(self): self.msb.docs = {'core.mockmodel.20': 'Indexed!\n20'} mock = MockModel() mock.pk = 20 self.mi.remove_object(mock) self.assertEqual(self.msb.docs, {}) self.msb.clear()
def test_prepare(self): mock = MockModel() mock.active = True is_active = BooleanField(model_attr='active') self.assertEqual(is_active.prepare(mock), True) # Simulate default=True. mock = MockModel() default = BooleanField(default=True) self.assertEqual(default.prepare(mock), True) # Simulate null=True. mock = MockModel() booly_none = BooleanField(null=True) self.assertEqual(booly_none.prepare(mock), None)
def test_custom_index_fieldname(self): mock = MockModel() mock.pk = 20 mock.author = 'daniel%s' % mock.id mock.pub_date = datetime.datetime(2009, 1, 31, 4, 19, 0) cofnmi = GoodOverriddenFieldNameMockSearchIndex() self.assertEqual(len(cofnmi.prepare(mock)), 6) self.assertEqual(sorted(cofnmi.prepare(mock).keys()), ['django_ct', 'django_id', 'hello', 'id', 'more_content', 'name_s']) self.assertEqual(cofnmi.prepared_data['name_s'], 'daniel20') self.assertEqual(cofnmi.get_content_field(), 'more_content')