0001-kb-limit-last-updated-pages-content-to-visible-pages.patch
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 |
- |