Projet

Général

Profil

0007-search-don-t-index-cells-with-an-inactive-placeholde.patch

Lauréline Guérin, 27 mars 2020 18:02

Télécharger (7,35 ko)

Voir les différences:

Subject: [PATCH 7/7] search: don't index cells with an inactive placeholder
 (#40252)

 combo/apps/search/utils.py |  5 +++-
 tests/test_search.py       | 48 +++++++++++++++++++++++++-------------
 2 files changed, 36 insertions(+), 17 deletions(-)
combo/apps/search/utils.py
61 61
            .prefetch_related(
62 62
                Prefetch('groups', to_attr='prefetched_groups')))
63 63
        for cell in queryset:
64
            cell.page = pages_by_pk.get(cell.page_id)
65
            # exclude cells with an inactive placeholder
66
            if not cell.is_placeholder_active():
67
                continue
64 68
            cell.prefetched_validity_info = [
65 69
                v for v in validity_info_list
66 70
                if v.object_id == cell.pk and v.content_type.model_class() == cell.__class__]
67
            cell.page = pages_by_pk.get(cell.page_id)
68 71
            cell_type = ContentType.objects.get_for_model(cell)
69 72
            indexed_cell = IndexedCell(cell_type=cell_type, cell_pk=cell.id)
70 73
            try:
tests/test_search.py
251 251
    page.public = True
252 252
    page.save()
253 253

  
254
    cell = TextCell(page=page, text='<p>foobar</p>', order=0)
254
    cell = TextCell(page=page, placeholder='content', text='<p>foobar</p>', order=0)
255 255
    cell.save()
256 256

  
257 257
    request = RequestFactory().get('/')
......
268 268
    page.save()
269 269

  
270 270
    TextCell(page=page, text='<p>foobar</p>', order=0, placeholder='_off').save()
271
    TextCell(page=page, text='<p>barfoo</p>', order=0, placeholder='on').save()
271
    TextCell(page=page, text='<p>barfoo</p>', order=0, placeholder='content').save()
272 272

  
273 273
    request = RequestFactory().get('/')
274 274
    request.user = AnonymousUser()
......
283 283
    page = Page(title='example page', slug='example-page')
284 284
    page.save()
285 285

  
286
    cell = TextCell(page=page, text='<p>foobar baz</p>', order=0)
286
    cell = TextCell(page=page, placeholder='content', text='<p>foobar baz</p>', order=0)
287 287
    cell.save()
288 288

  
289 289
    second_page = Page(title='second page', slug='second-page')
290 290
    second_page.save()
291 291

  
292
    cell = TextCell(page=second_page, text='<p>other baz</p>', order=0)
292
    cell = TextCell(page=second_page, placeholder='content', text='<p>other baz</p>', order=0)
293 293
    cell.save()
294 294
    index_site()
295 295

  
296
    cell = SearchCell(page=page, _search_services={'data': ['_text']}, order=0)
296
    cell = SearchCell(page=page, placeholder='content', _search_services={'data': ['_text']}, order=0)
297 297
    cell.save()
298 298

  
299 299
    resp = app.get('/ajax/search/%s/_text/?q=foobar' % cell.id, status=200)
......
315 315
    page = Page(title='example page', slug='example-page')
316 316
    page.save()
317 317

  
318
    cell = SearchCell(page=page, _search_services={'data': ['_text']}, order=0)
318
    cell = SearchCell(page=page, placeholder='content', _search_services={'data': ['_text']}, order=0)
319 319
    cell.save()
320 320

  
321 321
    index_site()
......
324 324
    hits = search_site(request, 'foobar')
325 325
    assert len(hits) == 0
326 326

  
327
    LinkCell(title='foobar', url='http://example.net', page=page, order=0).save()
327
    LinkCell(title='foobar', url='http://example.net', page=page, placeholder='content', order=0).save()
328 328
    index_site()
329 329

  
330 330
    hits = search_site(request, 'foobar')
......
333 333
    assert hits[0]['url'] == 'http://example.net'
334 334

  
335 335
    # second link with same target
336
    LinkCell(title='baz', url='http://example.net', page=page, order=0).save()
336
    LinkCell(title='baz', url='http://example.net', page=page, placeholder='content', order=0).save()
337 337
    index_site()
338 338

  
339 339
    # add a second link with the same target
......
438 438
    page = Page(title='example page', slug='example-page')
439 439
    page.save()
440 440

  
441
    TextCell(page=page, text='<p>foobar</p>', order=0, public=False).save()
442
    TextCell(page=page, text='<p>barfoo</p>', order=0, public=True).save()
441
    TextCell(page=page, placeholder='content', text='<p>foobar</p>', order=0, public=False).save()
442
    TextCell(page=page, placeholder='content', text='<p>barfoo</p>', order=0, public=True).save()
443 443

  
444 444
    request = RequestFactory().get('/')
445 445
    request.user = AnonymousUser()
......
463 463
    page = Page(title='example page', slug='example-page')
464 464
    page.save()
465 465

  
466
    cell = TextCell(page=page, text='<p>foobar</p>', order=0, public=False)
466
    cell = TextCell(page=page, placeholder='content', text='<p>foobar</p>', order=0, public=False)
467 467
    cell.save()
468 468
    cell.groups.set([group])
469
    TextCell(page=page, text='<p>barfoo</p>', order=0, public=False).save()
469
    TextCell(page=page, placeholder='content', text='<p>barfoo</p>', order=0, public=False).save()
470 470
    index_site()
471 471

  
472 472
    # first cell is restricted, it's not found
......
507 507
def test_no_sub_slug_search(app):
508 508
    page = Page(title='example page', slug='example-page')
509 509
    page.save()
510
    TextCell(page=page, text='<p>foobar</p>', order=0, public=True).save()
510
    TextCell(page=page, placeholder='content', text='<p>foobar</p>', order=0, public=True).save()
511 511
    page = Page(title='example page with sub_slug', slug='sub-slugged-page',
512 512
                sub_slug='(?P<foo>\d+)')
513 513
    page.save()
514
    TextCell(page=page, text='<p>barfoo</p>', order=0, public=True).save()
514
    TextCell(page=page, placeholder='content', text='<p>barfoo</p>', order=0, public=True).save()
515 515

  
516 516
    request = RequestFactory().get('/')
517 517
    request.user = AnonymousUser()
......
522 522
    assert len(hits) == 0
523 523

  
524 524

  
525
def test_index_site_inactive_placeholder(app):
526
    page = Page.objects.create(title='page', slug='example-page')
527
    cell = TextCell.objects.create(page=page, placeholder='content', text='<p>foobar</p>', order=0)
528

  
529
    assert cell.is_placeholder_active() is True
530
    index_site()
531
    assert IndexedCell.objects.count() == 1
532

  
533
    cell.placeholder = ''
534
    cell.save()
535
    assert cell.is_placeholder_active() is False
536
    index_site()
537
    assert IndexedCell.objects.count() == 0
538

  
539

  
525 540
def test_index_site_num_queries(app):
526 541
    group = Group.objects.create(name='plop')
527 542
    for i in range(0, 10):
528 543
        page = Page.objects.create(title='page %s' % i, slug='example-page-%s' % i)
529 544
        page.groups.set([group])
530 545
        for j in range(0, 5):
531
            cell = TextCell.objects.create(page=page, text='<p>foobar %s</p>' % j, order=j, public=False)
546
            cell = TextCell.objects.create(page=page, placeholder='content', text='<p>foobar %s</p>' % j, order=j, public=False)
532 547
            cell.groups.set([group])
533 548

  
534 549
    index_site()  # populate cache
550
    assert IndexedCell.objects.count() == 50
535 551
    with CaptureQueriesContext(connection) as ctx:
536 552
        index_site()
537
        assert len(ctx.captured_queries) == 195
553
        assert len(ctx.captured_queries) == 225
538
-