Projet

Général

Profil

0001-maps-consider-layer-label-when-searching-on-multiple.patch

Frédéric Péters, 04 septembre 2018 20:16

Télécharger (4,42 ko)

Voir les différences:

Subject: [PATCH] maps: consider layer label when searching on multiple layers
 (#26112)

 combo/apps/maps/models.py | 14 ++++++++++----
 tests/test_maps_cells.py  | 31 +++++++++++++++++++++++++++++++
 2 files changed, 41 insertions(+), 4 deletions(-)
combo/apps/maps/models.py
155 155
        layer = [x for x in serializers.deserialize('json', json.dumps([json_layer]))][0]
156 156
        layer.save()
157 157

  
158
    def get_geojson(self, request=None):
158
    def get_geojson(self, request=None, multiple_layers=False):
159 159
        response = requests.get(self.geojson_url,
160 160
                            remote_service='auto',
161 161
                            cache_duration=self.cache_duration,
......
213 213
                        return True
214 214
                return False
215 215

  
216
            features = [x for x in features if match(x)]
216
            if multiple_layers and query in slugify(self.label):
217
                # also match on layer name, get them all
218
                pass
219
            else:
220
                features = [x for x in features if match(x)]
217 221

  
218 222
        for feature in features:
219 223
            feature['properties']['layer'] = {
......
272 276

  
273 277
    def get_geojson(self, request):
274 278
        geojson = {'type': 'FeatureCollection', 'features': []}
275
        for layer in self.layers.all():
276
            geojson['features'] += layer.get_geojson(request)
279
        layers = self.layers.all()
280
        for layer in layers:
281
            geojson['features'] += layer.get_geojson(request,
282
                    multiple_layers=bool(len(layers) > 1))
277 283
        return geojson
278 284

  
279 285
    @classmethod
tests/test_maps_cells.py
100 100
        layer = MapLayer.objects.get()
101 101
    except MapLayer.DoesNotExist:
102 102
        layer = MapLayer()
103
        layer.label = 'bicycles'
103 104
        layer.geojson_url = 'http://example.org/geojson'
104 105
        layer.marker_colour = 'FF0000'
105 106
        layer.icon = 'fa-bicycle'
......
257 258
        assert 'orig=combo' in requests_get.call_args[0][1]
258 259
        assert not 'email=admin%40localhost&' in requests_get.call_args[0][1]
259 260

  
261
        # query against layer name
262
        resp = app.get(reverse('mapcell-geojson', kwargs={'cell_id': cell.id}) + '?q=bicycle')
263
        assert len(json.loads(resp.content)['features']) == 0
264

  
260 265
    # check distance query on geojson
261 266
    layer.geojson_url = 'http://example.org/geojson?t6'
262 267
    layer.include_user_identifier = False
......
275 280
        resp = app.get(reverse('mapcell-geojson', kwargs={'cell_id': cell.id}) + '?lng=2.54&lat=48.84&distance=100')
276 281
        assert len(json.loads(resp.content)['features']) == 0
277 282

  
283
    # add a second layer
284
    layer2 = MapLayer()
285
    layer2.label = 'xxx'
286
    layer2.geojson_url = 'http://example.org/geojson'
287
    layer2.marker_colour = 'FF0000'
288
    layer2.icon = 'fa-bicycle'
289
    layer2.icon_colour = '0000FF'
290
    layer2.save()
291
    cell.layers.add(layer2)
292

  
293
    with mock.patch('combo.utils.requests_wrapper.RequestsSession.request') as requests_get:
294
        requests_get.return_value = mock.Mock(
295
                content=SAMPLE_GEOJSON_CONTENT,
296
                json=lambda: json.loads(SAMPLE_GEOJSON_CONTENT),
297
                status_code=200)
298
        resp = app.get(reverse('mapcell-geojson', kwargs={'cell_id': cell.id}) + '?q=bar')
299
        assert len(json.loads(resp.content)['features']) == 2
300

  
301
        resp = app.get(reverse('mapcell-geojson', kwargs={'cell_id': cell.id}) + '?q=xyz')
302
        assert len(json.loads(resp.content)['features']) == 0
303

  
304
        # query against layer name, it should get results
305
        resp = app.get(reverse('mapcell-geojson', kwargs={'cell_id': cell.id}) + '?q=bicycle')
306
        assert len(json.loads(resp.content)['features']) == 2
307

  
308

  
278 309
def test_get_geojson_properties(app, layer, user):
279 310
    page = Page(title='xxx', slug='new', template_name='standard')
280 311
    page.save()
281
-