Projet

Général

Profil

0001-dataviz-add-prefix-to-filters-cell-form-65348.patch

Valentin Deniaud, 23 mai 2022 17:17

Télécharger (10,7 ko)

Voir les différences:

Subject: [PATCH 1/2] dataviz: add prefix to filters cell form (#65348)

 combo/apps/dataviz/forms.py |  8 +++--
 tests/test_dataviz.py       | 62 ++++++++++++++++++-------------------
 2 files changed, 37 insertions(+), 33 deletions(-)
combo/apps/dataviz/forms.py
236 236

  
237 237

  
238 238
class ChartNgPartialForm(ChartFiltersMixin, forms.ModelForm):
239
    prefix = 'filter'
240

  
239 241
    class Meta:
240 242
        model = ChartNgCell
241 243
        fields = (
......
252 254

  
253 255
    def clean(self):
254 256
        for field in self._meta.fields:
255
            if field not in self.data:
257
            if '%s-%s' % (self.prefix, field) not in self.data:
256 258
                self.cleaned_data[field] = self.initial[field]
257 259

  
258 260
        for filter_ in self.instance.available_filters:
259
            if filter_['id'] in self.data:
261
            if '%s-%s' % (self.prefix, filter_['id']) in self.data:
260 262
                self.instance.filter_params[filter_['id']] = self.cleaned_data.get(filter_['id'])
261 263

  
262 264

  
263 265
class ChartFiltersForm(ChartFiltersMixin, forms.ModelForm):
266
    prefix = 'filter'
267

  
264 268
    class Meta:
265 269
        model = ChartNgCell
266 270
        fields = (
tests/test_dataviz.py
2279 2279
    first_cell.save()
2280 2280
    resp = app.get('/')
2281 2281
    assert len(resp.form.fields) == 7
2282
    assert 'time_range_start' in resp.form.fields
2283
    assert 'time_range_end' in resp.form.fields
2282
    assert 'filter-time_range_start' in resp.form.fields
2283
    assert 'filter-time_range_end' in resp.form.fields
2284 2284

  
2285
    time_range_field = resp.form['time_range']
2285
    time_range_field = resp.form['filter-time_range']
2286 2286
    assert time_range_field.value == ''
2287 2287
    assert time_range_field.options == [
2288 2288
        ('', True, '---------'),
......
2295 2295
        ('range', False, 'Free range (date)'),
2296 2296
    ]
2297 2297

  
2298
    time_interval_field = resp.form['time_interval']
2298
    time_interval_field = resp.form['filter-time_interval']
2299 2299
    assert time_interval_field.value == 'month'
2300 2300
    assert time_interval_field.options == [
2301 2301
        ('day', False, 'Day'),
......
2305 2305
        ('weekday', False, 'Week day'),
2306 2306
    ]
2307 2307

  
2308
    service_field = resp.form['service']
2308
    service_field = resp.form['filter-service']
2309 2309
    assert service_field.value == 'chrono'
2310 2310
    assert service_field.options == [
2311 2311
        ('', False, '---------'),
......
2313 2313
        ('combo', False, 'Combo'),
2314 2314
    ]
2315 2315

  
2316
    ou_field = resp.form['ou']
2316
    ou_field = resp.form['filter-ou']
2317 2317
    assert ou_field.value == ''
2318 2318
    assert ou_field.options == [
2319 2319
        ('', True, '---------'),
......
2328 2328
    old_resp = resp
2329 2329
    resp = app.get('/')
2330 2330
    for field in ('time_range', 'time_interval', 'service', 'ou'):
2331
        assert resp.form[field].options == old_resp.form[field].options
2331
        assert resp.form['filter-%s' % field].options == old_resp.form['filter-%s' % field].options
2332 2332

  
2333 2333
    # changing one filter value makes it disappear
2334 2334
    cell.filter_params = {'ou': 'default'}
......
2336 2336
    resp = app.get('/')
2337 2337
    assert 'ou' not in resp.form.fields
2338 2338
    for field in ('time_range', 'time_interval', 'service'):
2339
        assert resp.form[field].options == old_resp.form[field].options
2339
        assert resp.form['filter-%s' % field].options == old_resp.form['filter-%s' % field].options
2340 2340

  
2341 2341
    # setting the same value for the other cell makes it appear again
2342 2342
    first_cell.filter_params = {'ou': 'default'}
2343 2343
    first_cell.save()
2344 2344
    resp = app.get('/')
2345
    assert resp.form['ou'].value == 'default'
2345
    assert resp.form['filter-ou'].value == 'default'
2346 2346

  
2347 2347
    # changing statistics type of cell remove some fields
2348 2348
    cell.statistic = Statistic.objects.get(slug='daily')
......
2351 2351
    assert 'ou' not in resp.form.fields
2352 2352
    assert 'service' not in resp.form.fields
2353 2353
    for field in ('time_range', 'time_interval'):
2354
        assert resp.form[field].options == old_resp.form[field].options
2354
        assert resp.form['filter-%s' % field].options == old_resp.form['filter-%s' % field].options
2355 2355

  
2356 2356
    # changing time_interval value makes interval fields disappear
2357 2357
    cell.time_range = 'previous-year'
2358 2358
    cell.save()
2359 2359
    old_resp = resp
2360 2360
    resp = app.get('/')
2361
    assert 'time_range' not in resp.form.fields
2362
    assert 'time_range_start' not in resp.form.fields
2363
    assert 'time_range_end' not in resp.form.fields
2364
    assert resp.form['time_interval'].options == old_resp.form['time_interval'].options
2361
    assert 'filter-time_range' not in resp.form.fields
2362
    assert 'filter-time_range_start' not in resp.form.fields
2363
    assert 'filter-time_range_end' not in resp.form.fields
2364
    assert resp.form['filter-time_interval'].options == old_resp.form['filter-time_interval'].options
2365 2365

  
2366 2366
    # setting the same value for the other cell makes it appear again
2367 2367
    first_cell.time_range = 'previous-year'
2368 2368
    first_cell.save()
2369 2369
    resp = app.get('/')
2370
    assert resp.form['time_range'].value == 'previous-year'
2371
    assert resp.form['time_interval'].options == old_resp.form['time_interval'].options
2370
    assert resp.form['filter-time_range'].value == 'previous-year'
2371
    assert resp.form['filter-time_interval'].options == old_resp.form['filter-time_interval'].options
2372 2372

  
2373 2373
    # only common choices are shown
2374 2374
    first_cell.statistic.filters[0]['options'].remove({'id': 'day', 'label': 'Day'})
2375 2375
    first_cell.statistic.save()
2376 2376
    resp = app.get('/')
2377
    assert resp.form['time_interval'].options == [
2377
    assert resp.form['filter-time_interval'].options == [
2378 2378
        ('month', True, 'Month'),
2379 2379
        ('year', False, 'Year'),
2380 2380
    ]
......
2383 2383
    first_cell.statistic.filters[0]['options'] = [{'id': 'random', 'label': 'Random'}]
2384 2384
    first_cell.statistic.save()
2385 2385
    resp = app.get('/')
2386
    assert 'time_interval' not in resp.form.fields
2387
    assert resp.form['time_range'].value == 'previous-year'
2386
    assert 'filter-time_interval' not in resp.form.fields
2387
    assert resp.form['filter-time_range'].value == 'previous-year'
2388 2388

  
2389 2389
    # form is not shown if no common filters exist
2390 2390
    first_cell.time_range = 'current-year'
......
2403 2403

  
2404 2404
    app = login(app)
2405 2405
    resp = app.get('/')
2406
    time_range_field = resp.form['time_range']
2406
    time_range_field = resp.form['filter-time_range']
2407 2407
    assert time_range_field.value == ''
2408 2408
    assert time_range_field.options == [
2409 2409
        ('', True, '---------'),
......
2425 2425
    cell.save()
2426 2426

  
2427 2427
    resp = app.get('/')
2428
    time_range_field = resp.form['time_range']
2428
    time_range_field = resp.form['filter-time_range']
2429 2429
    assert time_range_field.value == ''
2430 2430
    assert time_range_field.options == [
2431 2431
        ('', True, '---------'),
......
2449 2449

  
2450 2450
    app = login(app)
2451 2451
    resp = app.get('/')
2452
    assert 'form' in resp.form.fields
2453
    assert 'menu' not in resp.form.fields
2452
    assert 'filter-form' in resp.form.fields
2453
    assert 'filter-menu' not in resp.form.fields
2454 2454

  
2455 2455
    # select a choice with subfilters in manager
2456 2456
    resp = app.get('/manage/pages/%s/' % page.id)
......
2458 2458
    manager_submit_cell(resp.forms[1])
2459 2459

  
2460 2460
    resp = app.get('/')
2461
    assert 'form' in resp.form.fields
2462
    assert 'menu' in resp.form.fields
2461
    assert 'filter-form' in resp.form.fields
2462
    assert 'filter-menu' in resp.form.fields
2463 2463

  
2464 2464

  
2465 2465
@with_httmock(new_api_mock)
......
2483 2483
    assert 'time_interval=month' in request.url
2484 2484
    assert 'ou=default' in request.url
2485 2485

  
2486
    app.get(location + '?time_interval=year')
2486
    app.get(location + '?filter-time_interval=year')
2487 2487
    request = new_api_mock.call['requests'][2]
2488 2488
    assert 'time_interval=year' in request.url
2489 2489
    assert 'ou=default' in request.url
......
2497 2497
    assert 'start=2022-01-01' in request.url
2498 2498
    assert 'ou=default' in request.url
2499 2499

  
2500
    app.get(location + '?time_range=current-month')
2500
    app.get(location + '?filter-time_range=current-month')
2501 2501
    request = new_api_mock.call['requests'][4]
2502 2502
    assert 'start=2021-10-01' in request.url
2503 2503
    assert 'end=2021-11-01' in request.url
......
2506 2506
    cell.filter_params.clear()
2507 2507
    cell.statistic = Statistic.objects.get(slug='filter-multiple')
2508 2508
    cell.save()
2509
    app.get(location + '?color=green&color=blue')
2509
    app.get(location + '?filter-color=green&filter-color=blue')
2510 2510
    request = new_api_mock.call['requests'][5]
2511 2511
    assert 'color=green&color=blue' in request.url
2512 2512

  
......
2515 2515
    cell.filter_params = {'form': 'food-request'}
2516 2516
    cell.save()
2517 2517
    cell.update_subfilters()
2518
    app.get(location + '?menu=vegan')
2518
    app.get(location + '?filter-menu=vegan')
2519 2519
    request = new_api_mock.call['requests'][7]
2520 2520
    assert 'menu=vegan' in request.url
2521 2521

  
2522 2522
    # unknown params
2523
    app.get(location + '?time_interval=month&ou=default')
2523
    app.get(location + '?filter-time_interval=month&filter-ou=default')
2524 2524
    request = new_api_mock.call['requests'][8]
2525 2525
    assert 'time_interval=' not in request.url
2526 2526
    assert 'ou=' not in request.url
2527 2527

  
2528 2528
    # wrong params
2529
    resp = app.get(location + '?time_range_start=xxx')
2529
    resp = app.get(location + '?filter-time_range_start=xxx')
2530 2530
    assert 'Wrong parameters' in resp.text
2531 2531
    assert len(new_api_mock.call['requests']) == 9
2532 2532

  
2533
-