def test_models(self): # Stow. old_unified_index = connections['default']._index ui = UnifiedIndex() bmmsi = BasicMockModelSearchIndex() bammsi = BasicAnotherMockModelSearchIndex() ui.build(indexes=[bmmsi, bammsi]) connections['default']._index = ui msqs = SearchQuerySet() sqs = msqs.all() self.assertTrue(isinstance(sqs, SearchQuerySet)) self.assertEqual(len(sqs.query.models), 0) sqs = msqs.models(MockModel) self.assertTrue(isinstance(sqs, SearchQuerySet)) self.assertEqual(len(sqs.query.models), 1) sqs = msqs.models(MockModel, AnotherMockModel) self.assertTrue(isinstance(sqs, SearchQuerySet)) self.assertEqual(len(sqs.query.models), 2) # This will produce a warning. ui.build(indexes=[bmmsi]) sqs = msqs.models(AnotherMockModel) self.assertTrue(isinstance(sqs, SearchQuerySet)) self.assertEqual(len(sqs.query.models), 1)
def test_searchqueryset_using(self): # Using the default. sqs = SearchQuerySet('solr') self.assertEqual(sqs.count(), 5) self.assertEqual(sqs.models(Foo).count(), 2) self.assertEqual(sqs.models(Bar).count(), 3) self.assertEqual(sqs.using('solr').count(), 5) self.assertEqual(sqs.using('solr').models(Foo).count(), 2) self.assertEqual(sqs.using('solr').models(Bar).count(), 3) self.assertEqual(sqs.using('elasticsearch').count(), 2) self.assertEqual(sqs.using('elasticsearch').models(Foo).count(), 2) self.assertEqual(sqs.using('elasticsearch').models(Bar).count(), 0)
class SpatialSolrTestCase(TestCase): fixtures = ['sample_spatial_data.json'] using = 'solr' def setUp(self): super(SpatialSolrTestCase, self).setUp() self.ui = connections[self.using].get_unified_index() self.checkindex = self.ui.get_index(Checkin) self.checkindex.reindex(using=self.using) self.sqs = SearchQuerySet().using(self.using) self.downtown_pnt = Point(-95.23592948913574, 38.97127105172941) self.downtown_bottom_left = Point(-95.23947, 38.9637903) self.downtown_top_right = Point(-95.23362278938293, 38.973081081164715) self.lawrence_bottom_left = Point(-95.345535, 39.002643) self.lawrence_top_right = Point(-95.202713, 38.923626) def tearDown(self): self.checkindex.clear(using=self.using) super(SpatialSolrTestCase, self).setUp() def test_indexing(self): # Make sure the indexed data looks correct. first = Checkin.objects.get(pk=1) sqs = self.sqs.models(Checkin).filter(django_id=first.pk) self.assertEqual(sqs.count(), 1) self.assertEqual(sqs[0].username, first.username) # Make sure we've got a proper ``Point`` object. self.assertAlmostEqual(sqs[0].location.get_coords()[0], first.longitude) self.assertAlmostEqual(sqs[0].location.get_coords()[1], first.latitude) # Double-check, to make sure there was nothing accidentally copied # between instances. second = Checkin.objects.get(pk=2) self.assertNotEqual(second.latitude, first.latitude) sqs = self.sqs.models(Checkin).filter(django_id=second.pk) self.assertEqual(sqs.count(), 1) self.assertEqual(sqs[0].username, second.username) self.assertAlmostEqual(sqs[0].location.get_coords()[0], second.longitude) self.assertAlmostEqual(sqs[0].location.get_coords()[1], second.latitude) def test_within(self): self.assertEqual(self.sqs.all().count(), 10) sqs = self.sqs.within('location', self.downtown_bottom_left, self.downtown_top_right) self.assertEqual(sqs.count(), 7) sqs = self.sqs.within('location', self.lawrence_bottom_left, self.lawrence_top_right) self.assertEqual(sqs.count(), 9) def test_dwithin(self): self.assertEqual(self.sqs.all().count(), 10) sqs = self.sqs.dwithin('location', self.downtown_pnt, D(mi=0.1)) self.assertEqual(sqs.count(), 5) sqs = self.sqs.dwithin('location', self.downtown_pnt, D(mi=0.5)) self.assertEqual(sqs.count(), 7) sqs = self.sqs.dwithin('location', self.downtown_pnt, D(mi=100)) self.assertEqual(sqs.count(), 10) def test_distance_added(self): sqs = self.sqs.within('location', self.downtown_bottom_left, self.downtown_top_right).distance('location', self.downtown_pnt) self.assertEqual(sqs.count(), 7) self.assertAlmostEqual(sqs[0].distance.mi, 0.01985226) self.assertAlmostEqual(sqs[1].distance.mi, 0.03385863) self.assertAlmostEqual(sqs[2].distance.mi, 0.04539100) self.assertAlmostEqual(sqs[3].distance.mi, 0.04831436) self.assertAlmostEqual(sqs[4].distance.mi, 0.41116546) self.assertAlmostEqual(sqs[5].distance.mi, 0.25098114) self.assertAlmostEqual(sqs[6].distance.mi, 0.04831436) sqs = self.sqs.dwithin('location', self.downtown_pnt, D(mi=0.1)).distance('location', self.downtown_pnt) self.assertEqual(sqs.count(), 5) self.assertAlmostEqual(sqs[0].distance.mi, 0.01985226) self.assertAlmostEqual(sqs[1].distance.mi, 0.03385863) self.assertAlmostEqual(sqs[2].distance.mi, 0.04539100) self.assertAlmostEqual(sqs[3].distance.mi, 0.04831436) self.assertAlmostEqual(sqs[4].distance.mi, 0.04831436) def test_order_by_distance(self): sqs = self.sqs.within('location', self.downtown_bottom_left, self.downtown_top_right) sqs = sqs.distance('location', self.downtown_pnt).order_by('distance') self.assertEqual(sqs.count(), 7) self.assertEqual([result.pk for result in sqs], ['8', '9', '6', '3', '1', '2', '5']) self.assertEqual(["%0.04f" % result.distance.mi for result in sqs], ['0.0199', '0.0339', '0.0454', '0.0483', '0.0483', '0.2510', '0.4112']) sqs = self.sqs.dwithin('location', self.downtown_pnt, D(mi=0.1)) sqs = sqs.distance('location', self.downtown_pnt).order_by('distance') self.assertEqual(sqs.count(), 5) self.assertEqual([result.pk for result in sqs], ['8', '9', '6', '3', '1']) self.assertEqual(["%0.04f" % result.distance.mi for result in sqs], ['0.0199', '0.0339', '0.0454', '0.0483', '0.0483']) sqs = self.sqs.dwithin('location', self.downtown_pnt, D(mi=0.1)) sqs = sqs.distance('location', self.downtown_pnt).order_by('-distance') self.assertEqual(sqs.count(), 5) self.assertEqual([result.pk for result in sqs], ['3', '1', '6', '9', '8']) self.assertEqual(["%0.04f" % result.distance.mi for result in sqs], ['0.0483', '0.0483', '0.0454', '0.0339', '0.0199']) def test_complex(self): sqs = self.sqs.auto_query('coffee') sqs = sqs.within('location', self.downtown_bottom_left, self.downtown_top_right) sqs = sqs.distance('location', self.downtown_pnt).order_by('distance') self.assertEqual(sqs.count(), 5) self.assertEqual([result.pk for result in sqs], ['8', '6', '3', '1', '2']) self.assertEqual(["%0.04f" % result.distance.mi for result in sqs], ['0.0199', '0.0454', '0.0483', '0.0483', '0.2510']) sqs = self.sqs.auto_query('coffee').dwithin('location', self.downtown_pnt, D(mi=0.1)) sqs = sqs.distance('location', self.downtown_pnt).order_by('distance') self.assertEqual(sqs.count(), 4) self.assertEqual([result.pk for result in sqs], ['8', '6', '3', '1']) self.assertEqual(["%0.04f" % result.distance.mi for result in sqs], ['0.0199', '0.0454', '0.0483', '0.0483']) sqs = self.sqs.auto_query('coffee').dwithin('location', self.downtown_pnt, D(mi=0.1)) sqs = sqs.distance('location', self.downtown_pnt).order_by('-distance') self.assertEqual(sqs.count(), 4) self.assertEqual([result.pk for result in sqs], ['3', '1', '6', '8']) self.assertEqual(["%0.04f" % result.distance.mi for result in sqs], ['0.0483', '0.0483', '0.0454', '0.0199']) sqs = self.sqs.auto_query('coffee') sqs = sqs.within('location', self.downtown_bottom_left, self.downtown_top_right) sqs = sqs.distance('location', self.downtown_pnt).order_by('-created') self.assertEqual(sqs.count(), 5) self.assertEqual([result.pk for result in sqs], ['8', '6', '3', '2', '1']) sqs = self.sqs.auto_query('coffee').dwithin('location', self.downtown_pnt, D(mi=0.1)) sqs = sqs.distance('location', self.downtown_pnt).order_by('-created') self.assertEqual(sqs.count(), 4) self.assertEqual([result.pk for result in sqs], ['8', '6', '3', '1'])