@@ -146,7 +146,69 @@ def testVocabularyCatalogResults(self):
146
146
})
147
147
data = json .loads (view ())
148
148
self .assertEquals (len (data ['results' ]), 1 )
149
- self .portal .manage_delObjects (['page' ])
149
+
150
+ def testVocabularyCatalogUnsafeMetadataAllowed (self ):
151
+ """Users with permission "Modify portal content" are allowed to see
152
+ ``_unsafe_metadata``.
153
+ """
154
+ self .portal .invokeFactory ('Document' , id = "page" , title = "page" )
155
+ self .portal .page .reindexObject ()
156
+ view = VocabularyView (self .portal , self .request )
157
+ query = {
158
+ 'criteria' : [
159
+ {
160
+ 'i' : 'path' ,
161
+ 'o' : 'plone.app.querystring.operation.string.path' ,
162
+ 'v' : '/plone/page'
163
+ }
164
+ ]
165
+ }
166
+ self .request .form .update ({
167
+ 'name' : 'plone.app.vocabularies.Catalog' ,
168
+ 'query' : json .dumps (query ),
169
+ 'attributes' : [
170
+ 'id' ,
171
+ 'commentors' ,
172
+ 'Creator' ,
173
+ 'listCreators' ,
174
+ ]
175
+ })
176
+ data = json .loads (view ())
177
+ self .assertEquals (len (data ['results' ][0 ].keys ()), 4 )
178
+
179
+ def testVocabularyCatalogUnsafeMetadataDisallowed (self ):
180
+ """Users without permission "Modify portal content" are not allowed to
181
+ see ``_unsafe_metadata``.
182
+ """
183
+ self .portal .invokeFactory ('Document' , id = "page" , title = "page" )
184
+ self .portal .page .reindexObject ()
185
+ # Downgrade permissions
186
+ setRoles (self .portal , TEST_USER_ID , [])
187
+ view = VocabularyView (self .portal , self .request )
188
+ query = {
189
+ 'criteria' : [
190
+ {
191
+ 'i' : 'path' ,
192
+ 'o' : 'plone.app.querystring.operation.string.path' ,
193
+ 'v' : '/plone/page'
194
+ }
195
+ ]
196
+ }
197
+ self .request .form .update ({
198
+ 'name' : 'plone.app.vocabularies.Catalog' ,
199
+ 'query' : json .dumps (query ),
200
+ 'attributes' : [
201
+ 'id' ,
202
+ 'commentors' ,
203
+ 'Creator' ,
204
+ 'listCreators' ,
205
+ ]
206
+ })
207
+ data = json .loads (view ())
208
+ # Only one result key should be returned, as ``commentors``,
209
+ # ``Creator`` and ``listCreators`` is considered unsafe and thus
210
+ # skipped.
211
+ self .assertEquals (len (data ['results' ][0 ].keys ()), 1 )
150
212
151
213
def testVocabularyBatching (self ):
152
214
amount = 30
0 commit comments