kb: limit last updated pages content to visible pages (#39484)

This commit is contained in:
Frédéric Péters 2020-02-03 14:06:44 +01:00
parent 9c841ea861
commit 149e68b7e7
2 changed files with 33 additions and 1 deletions

View File

@ -15,6 +15,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import datetime
import itertools
from django.db import models
from django.utils import timezone
@ -42,5 +43,8 @@ class LatestPageUpdatesCell(CellBase):
pages = self.root_page.get_descendants_and_me()
else:
pages = Page.objects.all()
extra_context['pages'] = pages.order_by('-last_update_timestamp')[:self.limit]
user = self.get_concerned_user(context)
extra_context['pages'] = itertools.islice(
(x for x in pages.order_by('-last_update_timestamp') if x.is_visible(user=user)),
self.limit)
return extra_context

View File

@ -17,6 +17,8 @@
import pytest
import re
from django.test.client import RequestFactory
from combo.data.models import CellBase, Page, TextCell
from combo.apps.kb.models import LatestPageUpdatesCell
@ -135,3 +137,29 @@ def test_updated_pages_cell_root_page():
Page.objects.get(slug='page-2').delete()
cell = CellBase.get_cells(slug='me')[0] # reload cell
assert cell.render(ctx).count('<li') == 2
def test_updated_pages_cell_visibility(freezer, admin_user):
Page.objects.all().delete()
page = Page(title='example page', slug='example-page')
page.save()
Page(title='second example page', slug='second-example-page').save()
Page(title='third example page', slug='third-example-page', public=False).save()
cell = LatestPageUpdatesCell(page=page, order=0)
cell.save()
request = RequestFactory().get('/')
request.user = None
ctx = {'request': request}
rendered = cell.render(ctx)
assert rendered.count('<a') == 2
assert '/example-page' in rendered
assert '/second-example-page' in rendered
assert '/third-example-page' not in rendered
request.user = admin_user
rendered = cell.render(ctx)
assert rendered.count('<a') == 3
assert '/example-page' in rendered
assert '/second-example-page' in rendered
assert '/third-example-page' in rendered