def test_like_filter(self): species = Species( instance=self.instance, common_name='this is a test species', genus='Genus-1', otm_code='S1') species.save_with_user(self.commander) p, t = self.create_tree_and_plot() t.species = species t.save_with_user(self.commander) species_like_filter = json.dumps({ 'species.common_name': {'LIKE': 's a tes'}}) result = [o.pk for o in _execute_filter( self.instance, species_like_filter)] self.assertEqual(result, [p.pk]) species.common_name = 'no match' species.save_with_user(self.commander) result = _execute_filter( self.instance, species_like_filter) self.assertEqual(len(result), 0)
def test_boundary_search(self): # Unit Square b1 = Boundary.objects.create( geom=MultiPolygon(make_simple_polygon(0)), name='whatever', category='whatever', sort_order=1) # Unit Square translated by (0.2,0.2) b2 = Boundary.objects.create( geom=MultiPolygon(make_simple_polygon(0.2)), name='whatever', category='whatever', sort_order=1) # Unit square translated by (-1,-1) b3 = Boundary.objects.create( geom=MultiPolygon(make_simple_polygon(-1)), name='whatever', category='whatever', sort_order=1) plot1 = Plot(geom=Point(0.9, 0.9), instance=self.instance) plot2 = Plot(geom=Point(1.1, 1.1), instance=self.instance) plot3 = Plot(geom=Point(2.5, 2.5), instance=self.instance) for p in (plot1, plot2, plot3): p.save_with_user(self.commander) boundary1_filter = json.dumps({'plot.geom': {'IN_BOUNDARY': b1.pk}}) self.assertEqual( {plot1.pk}, {p.pk for p in _execute_filter(self.instance, boundary1_filter)}) boundary2_filter = json.dumps({'plot.geom': {'IN_BOUNDARY': b2.pk}}) self.assertEqual( {plot1.pk, plot2.pk}, {p.pk for p in _execute_filter(self.instance, boundary2_filter)}) boundary3_filter = json.dumps({'plot.geom': {'IN_BOUNDARY': b3.pk}}) self.assertEqual( 0, len(_execute_filter(self.instance, boundary3_filter)))
def test_within_radius_integration(self): test_point = Point(-7615443.0, 5953520.0) near_point = Point(-7615444.0, 5953521.0) far_point = Point(-9615444.0, 8953521.0) near_plot = Plot(geom=near_point, instance=self.instance) near_plot.save_with_user(self.commander) near_tree = Tree(plot=near_plot, instance=self.instance) near_tree.save_with_user(self.commander) # just to make sure that the geospatial # query actually filters by distance far_plot = Plot(geom=far_point, instance=self.instance) far_plot.save_with_user(self.commander) far_tree = Tree(plot=far_plot, instance=self.instance) far_tree.save_with_user(self.commander) radius_filter = json.dumps( {'plot.geom': { 'WITHIN_RADIUS': { 'POINT': {'x': test_point.x, 'y': test_point.y}, 'RADIUS': 10 } }}) ids = {p.pk for p in _execute_filter( self.instance, radius_filter)} self.assertEqual(ids, {near_plot.pk})
def test_species_id_search(self): species1 = Species( common_name='Species-1', genus='Genus-1', otm_code='S1', instance=self.instance) species1.save_with_user(self.commander) species2 = Species( common_name='Species-2', genus='Genus-2', otm_code='S1', instance=self.instance) species2.save_with_user(self.commander) p1, t1 = self.create_tree_and_plot() p2, t2 = self.create_tree_and_plot() p3, t3 = self.create_tree_and_plot() t1.species = species1 t1.save_with_user(self.commander) t2.species = species2 t2.save_with_user(self.commander) species1_filter = json.dumps({'species.id': species1.pk}) species2_filter = json.dumps({'species.id': species2.pk}) species3_filter = json.dumps({'species.id': -1}) self.assertEqual( {p1.pk}, {p.pk for p in _execute_filter(self.instance, species1_filter)}) self.assertEqual( {p2.pk}, {p.pk for p in _execute_filter(self.instance, species2_filter)}) self.assertEqual( 0, len(_execute_filter(self.instance, species3_filter)))
def test_diameter_max_filter(self): p1, p2, p3, p4 = self.setup_diameter_test() diameter_range_filter = json.dumps({'tree.diameter': {'MAX': 3.0}}) ids = {p.pk for p in _execute_filter( self.instance, diameter_range_filter)} self.assertEqual(ids, {p1.pk})
def _execute_and_process_filter(self, filter): return {p.pk for p in _execute_filter( self.instance, json.dumps(filter))}