search: index links from "list of links" cells (#59025)

This commit is contained in:
Frédéric Péters 2021-11-25 21:41:24 +01:00
parent 52a05d380b
commit ee5a7f91e0
2 changed files with 49 additions and 3 deletions

View File

@ -1557,7 +1557,6 @@ class LinkListCell(CellBase):
default_template_name = 'combo/link-list-cell.html'
manager_form_template = 'combo/manager/link-list-cell-form.html'
children_placeholder_prefix = '_linkslist:'
exclude_from_search = True
invalid_reason_codes = {
'data_link_invalid': _('Invalid link'),
@ -1649,6 +1648,13 @@ class LinkListCell(CellBase):
return
self.mark_as_valid()
def render_for_search(self):
return ''
def get_external_links_data(self):
for link in self.get_items():
yield from link.get_external_links_data()
@register_cell_class
class FeedCell(CellBase):

View File

@ -20,7 +20,7 @@ from requests.models import Response
from combo.apps.search.engines import engines
from combo.apps.search.models import IndexedCell, SearchCell
from combo.apps.search.utils import index_site, search_site
from combo.data.models import JsonCell, LinkCell, MenuCell, Page, PageSnapshot, TextCell
from combo.data.models import JsonCell, LinkCell, LinkListCell, MenuCell, Page, PageSnapshot, TextCell
from .test_manager import login
@ -535,6 +535,46 @@ def test_search_external_links(app):
assert len(hits) == 1
def test_search_external_links_in_list_of_links(app):
page = Page(title='example page', slug='example-page')
page.save()
cell = SearchCell(page=page, placeholder='content', _search_services={'data': ['_text']}, order=0)
cell.save()
index_site()
request = RequestFactory().get('/')
request.user = AnonymousUser()
hits = search_site(request, 'foobar')
assert len(hits) == 0
cell = LinkListCell.objects.create(order=0, page=page, placeholder='content')
LinkCell.objects.create(
page=page,
placeholder=cell.link_placeholder,
title='foobar example',
url='http://example.net',
order=0,
)
LinkCell.objects.create(
page=page,
placeholder=cell.link_placeholder,
title='Example 2 Site',
url='http://example.org/',
order=1,
)
index_site()
hits = search_site(request, 'foobar')
assert len(hits) == 1
assert hits[0]['text'] == 'foobar example'
assert hits[0]['url'] == 'http://example.net'
hits = search_site(request, 'example')
assert len(hits) == 2
def test_manager_search_cell(settings, app, admin_user):
page = Page.objects.create(title='One', slug='one', template_name='standard')
cell = SearchCell.objects.create(page=page, placeholder='content', order=0)
@ -1370,7 +1410,7 @@ def test_index_site_num_queries(settings, app):
assert IndexedCell.objects.count() == 50
with CaptureQueriesContext(connection) as ctx:
index_site()
assert len(ctx.captured_queries) == 222
assert len(ctx.captured_queries) == 223
SearchCell.objects.create(
page=page, placeholder='content', order=0, _search_services={'data': ['search1']}