Projet

Général

Profil

0001-search-index-links-from-list-of-links-cells-59025.patch

Frédéric Péters, 25 novembre 2021 21:49

Télécharger (3,66 ko)

Voir les différences:

Subject: [PATCH] search: index links from "list of links" cells (#59025)

 combo/data/models.py |  8 +++++++-
 tests/test_search.py | 44 ++++++++++++++++++++++++++++++++++++++++++--
 2 files changed, 49 insertions(+), 3 deletions(-)
combo/data/models.py
1557 1557
    default_template_name = 'combo/link-list-cell.html'
1558 1558
    manager_form_template = 'combo/manager/link-list-cell-form.html'
1559 1559
    children_placeholder_prefix = '_linkslist:'
1560
    exclude_from_search = True
1561 1560

  
1562 1561
    invalid_reason_codes = {
1563 1562
        'data_link_invalid': _('Invalid link'),
......
1649 1648
                return
1650 1649
        self.mark_as_valid()
1651 1650

  
1651
    def render_for_search(self):
1652
        return ''
1653

  
1654
    def get_external_links_data(self):
1655
        for link in self.get_items():
1656
            yield from link.get_external_links_data()
1657

  
1652 1658

  
1653 1659
@register_cell_class
1654 1660
class FeedCell(CellBase):
tests/test_search.py
20 20
from combo.apps.search.engines import engines
21 21
from combo.apps.search.models import IndexedCell, SearchCell
22 22
from combo.apps.search.utils import index_site, search_site
23
from combo.data.models import JsonCell, LinkCell, MenuCell, Page, PageSnapshot, TextCell
23
from combo.data.models import JsonCell, LinkCell, LinkListCell, MenuCell, Page, PageSnapshot, TextCell
24 24

  
25 25
from .test_manager import login
26 26

  
......
535 535
    assert len(hits) == 1
536 536

  
537 537

  
538
def test_search_external_links_in_list_of_links(app):
539
    page = Page(title='example page', slug='example-page')
540
    page.save()
541

  
542
    cell = SearchCell(page=page, placeholder='content', _search_services={'data': ['_text']}, order=0)
543
    cell.save()
544

  
545
    index_site()
546
    request = RequestFactory().get('/')
547
    request.user = AnonymousUser()
548
    hits = search_site(request, 'foobar')
549
    assert len(hits) == 0
550

  
551
    cell = LinkListCell.objects.create(order=0, page=page, placeholder='content')
552
    LinkCell.objects.create(
553
        page=page,
554
        placeholder=cell.link_placeholder,
555
        title='foobar example',
556
        url='http://example.net',
557
        order=0,
558
    )
559
    LinkCell.objects.create(
560
        page=page,
561
        placeholder=cell.link_placeholder,
562
        title='Example 2 Site',
563
        url='http://example.org/',
564
        order=1,
565
    )
566

  
567
    index_site()
568

  
569
    hits = search_site(request, 'foobar')
570
    assert len(hits) == 1
571
    assert hits[0]['text'] == 'foobar example'
572
    assert hits[0]['url'] == 'http://example.net'
573

  
574
    hits = search_site(request, 'example')
575
    assert len(hits) == 2
576

  
577

  
538 578
def test_manager_search_cell(settings, app, admin_user):
539 579
    page = Page.objects.create(title='One', slug='one', template_name='standard')
540 580
    cell = SearchCell.objects.create(page=page, placeholder='content', order=0)
......
1370 1410
    assert IndexedCell.objects.count() == 50
1371 1411
    with CaptureQueriesContext(connection) as ctx:
1372 1412
        index_site()
1373
        assert len(ctx.captured_queries) == 222
1413
        assert len(ctx.captured_queries) == 223
1374 1414

  
1375 1415
    SearchCell.objects.create(
1376 1416
        page=page, placeholder='content', order=0, _search_services={'data': ['search1']}
1377
-