/
test_nextprevious.py
150 lines (130 loc) · 6.44 KB
/
test_nextprevious.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
# -*- coding: utf-8 -*-
from Products.CMFCore.utils import getToolByName
from plone.app.folder.tests.base import IntegrationTestCase
from plone.app.folder.tests.layer import IntegrationLayer
from plone.app.layout.nextprevious.interfaces import INextPreviousProvider
class NextPreviousSupportTests(IntegrationTestCase):
""" basic use cases and tests for next/previous navigation, essentially
borrowed from `Products.CMFPlone.tests.testNextPrevious.py` """
layer = IntegrationLayer
def afterSetUp(self):
self.wf = getToolByName(self.portal, "portal_workflow")
self.portal.acl_users._doAddUser('user_std', 'secret', ['Member'], [])
self.setRoles(['Manager'])
self.portal.invokeFactory('Document', 'doc1')
self.portal.invokeFactory('Document', 'doc2')
self.portal.invokeFactory('Document', 'doc3')
self.portal.invokeFactory('Folder', 'folder1')
self.portal.invokeFactory('Link', 'link1')
self.portal.link1.setRemoteUrl('http://plone.org')
self.portal.link1.reindexObject()
folder1 = getattr(self.portal, 'folder1')
folder1.invokeFactory('Document', 'doc11')
folder1.invokeFactory('Document', 'doc12')
folder1.invokeFactory('Document', 'doc13')
self.portal.invokeFactory('Folder', 'folder2')
folder2 = getattr(self.portal, 'folder2')
folder2.invokeFactory('Document', 'doc21')
folder2.invokeFactory('Document', 'doc22')
folder2.invokeFactory('Document', 'doc23')
folder2.invokeFactory('File', 'file21')
self.setRoles(['Member'])
def testIfFolderImplementsPreviousNext(self):
self.folder.invokeFactory('Folder', 'case')
self.failUnless(INextPreviousProvider(self.folder.case, None))
def testNextPreviousEnablingOnCreation(self):
self.folder.invokeFactory('Folder', 'case')
# first ensure the field on the atfolder is there
self.failIf(self.folder.case.getNextPreviousEnabled())
# then check if the adapter provides the attribute
self.failIf(INextPreviousProvider(self.folder.case).enabled)
def testNextPreviousViewDisabled(self):
doc = self.portal.folder1.doc11
view = doc.restrictedTraverse('@@plone_nextprevious_view')
self.failIf(view is None)
self.failIf(view.enabled())
def testNextPreviousViewEnabled(self):
self.portal.folder1.setNextPreviousEnabled(True)
doc = self.portal.folder1.doc11
view = doc.restrictedTraverse('@@plone_nextprevious_view')
self.failIf(view is None)
self.failUnless(view.enabled())
def testAdapterOnPortal(self):
doc = self.portal.doc1
view = doc.restrictedTraverse('@@plone_nextprevious_view')
self.failUnless(view)
self.failIf(view.enabled())
self.assertEqual(None, view.next())
self.assertEqual(None, view.previous())
def testNextPreviousItems(self):
container = self.folder[self.folder.invokeFactory('Folder', 'case3')]
for id in range(1, 4):
container.invokeFactory('Document', 'subDoc%d' % id)
from OFS.Folder import manage_addFolder
manage_addFolder(container, 'notacontentishtype')
for id in range(5, 6):
container.invokeFactory('Document', 'subDoc%d' % id)
adapter = INextPreviousProvider(container)
# text data for next/previous items
next = adapter.getNextItem(container.subDoc2)
self.assertEqual(next['id'], 'subDoc3')
self.assertEqual(next['portal_type'], 'Document')
self.assertEqual(next['url'], container.subDoc3.absolute_url())
previous = adapter.getPreviousItem(container.subDoc2)
self.assertEqual(previous['id'], 'subDoc1')
self.assertEqual(previous['portal_type'], 'Document')
self.assertEqual(previous['url'], container.subDoc1.absolute_url())
# #11234 not contentish contents shouldn't be returned
# as next or previous content
next = adapter.getNextItem(container.subDoc3)
self.assertEqual(next['id'], 'subDoc5')
previous = adapter.getPreviousItem(container.subDoc5)
self.assertEqual(previous['id'], 'subDoc3')
# first item should not have a previous item
previous = adapter.getPreviousItem(container.subDoc1)
self.assertEqual(previous, None)
# last item should not have a next item
next = adapter.getNextItem(container.subDoc5)
self.assertEqual(next, None)
def testNextItemOnlyShowViewable(self):
container = self.folder[self.folder.invokeFactory('Folder', 'case3')]
# create objects [subDoc1,subDoc2,subDoc3,subDoc4,subDoc5,subDoc6]
# published objects [subDoc2, subDoc4, subDoc5]
self.setRoles(("Manager",))
for id in range(1, 7):
docid = container.invokeFactory('Document', 'subDoc%d' % id)
doc = container[docid]
if id in [2, 4, 5]:
self.wf.doActionFor(doc, "publish")
# Member should only see the published items
self.logout()
self.login('user_std')
adapter = INextPreviousProvider(container)
# text data for next/tems
next = adapter.getNextItem(container.subDoc2)
self.assertEqual(next['id'], 'subDoc4')
next = adapter.getNextItem(container.subDoc4)
self.assertEqual(next['id'], 'subDoc5')
next = adapter.getNextItem(container.subDoc5)
self.assertEqual(next, None)
def testPreviousItemOnlyShowViewable(self):
container = self.folder[self.folder.invokeFactory('Folder', 'case3')]
# create objects [subDoc1,subDoc2,subDoc3,subDoc4,subDoc5,subDoc6]
# published objects [subDoc2, subDoc4, subDoc5]
self.setRoles(("Manager",))
for iid in range(1, 7):
docid = container.invokeFactory('Document', 'subDoc%d' % iid)
doc = container[docid]
if iid in [2, 4, 5]:
self.wf.doActionFor(doc, "publish")
# Member should only see the published items
self.logout()
self.login('user_std')
adapter = INextPreviousProvider(container)
# text data for next/tems
previous = adapter.getPreviousItem(container.subDoc5)
self.assertEqual(previous['id'], 'subDoc4')
previous = adapter.getPreviousItem(container.subDoc4)
self.assertEqual(previous['id'], 'subDoc2')
previous = adapter.getPreviousItem(container.subDoc2)
self.assertEqual(previous, None)