Projet

Général

Profil

0001-kb-limit-pages-to-visible-pages-39484.patch

Frédéric Péters, 03 février 2020 14:07

Télécharger (2,71 ko)

Voir les différences:

Subject: [PATCH] kb: limit pages to visible pages (#39484)

 combo/apps/kb/models.py |  6 +++++-
 tests/test_kb.py        | 28 ++++++++++++++++++++++++++++
 2 files changed, 33 insertions(+), 1 deletion(-)
combo/apps/kb/models.py
15 15
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
16 16

  
17 17
import datetime
18
import itertools
18 19

  
19 20
from django.db import models
20 21
from django.utils import timezone
......
42 43
            pages = self.root_page.get_descendants_and_me()
43 44
        else:
44 45
            pages = Page.objects.all()
45
        extra_context['pages'] = pages.order_by('-last_update_timestamp')[:self.limit]
46
        user = self.get_concerned_user(context)
47
        extra_context['pages'] = itertools.islice(
48
                (x for x in pages.order_by('-last_update_timestamp') if x.is_visible(user=user)),
49
                self.limit)
46 50
        return extra_context
tests/test_kb.py
17 17
import pytest
18 18
import re
19 19

  
20
from django.test.client import RequestFactory
21

  
20 22
from combo.data.models import CellBase, Page, TextCell
21 23
from combo.apps.kb.models import LatestPageUpdatesCell
22 24

  
......
135 137
    Page.objects.get(slug='page-2').delete()
136 138
    cell = CellBase.get_cells(slug='me')[0]  # reload cell
137 139
    assert cell.render(ctx).count('<li') == 2
140

  
141

  
142
def test_updated_pages_cell_visibility(freezer, admin_user):
143
    Page.objects.all().delete()
144
    page = Page(title='example page', slug='example-page')
145
    page.save()
146
    Page(title='second example page', slug='second-example-page').save()
147
    Page(title='third example page', slug='third-example-page', public=False).save()
148
    cell = LatestPageUpdatesCell(page=page, order=0)
149
    cell.save()
150

  
151
    request = RequestFactory().get('/')
152
    request.user = None
153
    ctx = {'request': request}
154
    rendered = cell.render(ctx)
155
    assert rendered.count('<a') == 2
156
    assert '/example-page' in rendered
157
    assert '/second-example-page' in rendered
158
    assert '/third-example-page' not in rendered
159

  
160
    request.user = admin_user
161
    rendered = cell.render(ctx)
162
    assert rendered.count('<a') == 3
163
    assert '/example-page' in rendered
164
    assert '/second-example-page' in rendered
165
    assert '/third-example-page' in rendered
138
-