我有一个基于ATFolder的内容类型:
ConceptSheetFolderSchema = folder.ATFolderSchema.copy()
ConceptSheetFolderSchema['title'].widget.label = _(u"Title")
ConceptSheetFolderSchema['title'].widget.description = _(u"")
ConceptSheetFolderSchema['title'].storage = atapi.AnnotationStorage()
ConceptSheetFolderSchema['description'].widget.label = _(u"Description")
ConceptSheetFolderSchema['description'].widget.description = _("")
ConceptSheetFolderSchema['description'].storage = atapi.AnnotationStorage()
finalizeATCTSchema(ConceptSheetFolderSchema, folderish=True, moveDiscussion=False)
class ConceptSheetFolder(folder.ATFolder):
"""
This is the central container for concept sheets in the site
"""
implements(IConceptSheetFolder)
portal_type = "Concept Sheet Folder"
_at_rename_after_creation = True
schema = ConceptSheetFolderSchema
title = atapi.ATFieldProperty('title')
description = atapi.ATFieldProperty('description')
atapi.registerType(ConceptSheetFolder, PROJECTNAME)
我可以通过Plone界面添加 ConceptSheetFolder 没问题,但我无法让这个基本测试工作:
class TestContent(unittest.TestCase):
layer = PROJECT_CONCEPTSHEETS_INTEGRATION_TESTING
def test_hierarchy(self):
portal = self.layer['portal']
# Ensure that we can create the various content types without error
setRoles(portal, TEST_USER_ID, ('Manager',))
portal.invokeFactory('Concept Sheet Folder', 'csf1', title=u"Concept Sheet folder")
portal['csf1'].invokeFactory('project.ConceptSheet', 'cs1', title=u"ConceptSheet")
portal['csf1']['cs1'].invokeFactory('project.ConceptMilestone', 'cs1', title=u"Approved")`
我收到错误
我尝试此测试时Unauthorized: Cannot create Concept Sheet Folder
。我用Google搜索了一下,发现this Nabble post,让我看看Plone / CMFCore / TestTools.py中的isConstructionAllowed()。使用pdb,我发现._queryFactoryMethod()在此上下文中运行时返回'None'。
所以看起来这种类型的FactoryTool不起作用,至少不在测试中。我已经在正常的GenericSetup位置(types.xml,Concept_Sheet_Folder.xml,factorytool.xml)进行了测试,我很遗憾还有什么可能导致这个问题。有什么想法吗?
奖金问题:为什么这在Plone界面中起作用而在测试中不起作用?
编辑(2011年12月13日):这是我的Concept_Sheet_Folder.xml
<?xml version="1.0"?>
<object name="Concept Sheet Folder"
meta_type="Factory-based Type Information with dynamic views"
i18n:domain="iedea.conceptsheets" xmlns:i18n="http://xml.zope.org/namespaces/i18n">
<property name="title" i18n:translate="">Concept Sheet Folder</property>
<property name="description"
i18n:translate="">A folder which can contain concept sheets.</property>
<property name="content_icon">++resource++conceptsheetfolder_icon.gif</property>
<property name="content_meta_type">Concept Sheet Folder</property>
<property name="product">iedea.conceptsheets</property>
<property name="factory">addConceptSheetFolder</property>
<property name="immediate_view">atct_edit</property>
<property name="global_allow">True</property>
<property name="filter_content_types">True</property>
<property name="allowed_content_types">
<element value="Concept Sheet" />
</property>
<property name="allow_discussion">False</property>
<property name="default_view">view</property>
<property name="view_methods">
<element value="view"/>
</property>
<alias from="(Default)" to="(dynamic view)"/>
<alias from="edit" to="atct_edit"/>
<alias from="sharing" to="@@sharing"/>
<alias from="view" to="(selected layout)"/>
<action title="View" action_id="view" category="object" condition_expr=""
url_expr="string:${folder_url}/" visible="True">
<permission value="View"/>
</action>
<action title="Edit" action_id="edit" category="object" condition_expr=""
url_expr="string:${object_url}/edit" visible="True">
<permission value="Modify portal content"/>
</action>
</object>
答案 0 :(得分:4)
我自己遇到了这个问题。问题是,当您尝试创建它时,您的Archetype工厂尚未正确注册。
这就是为什么_queryFactoryMethod()会返回None,正如您所发现的那样。
对于您是否使用 Products.ZopeTestCase 或较新的 plone.app.testing 作为测试框架,该解决方案有所不同。
但是,在这两种情况下,您都需要确保已经安装了您尝试创建的Archetype( ConceptSheetFolder )的附加产品(通过invokeFactory)。< / p>
如果您使用的是 Products.ZopeTestCase (以及 Products.PloneTestCase ),则需要调用
在调用测试之前,您需要确保 installProduct 调用确实不延迟。
在Plone 4中,这意味着您的 installProduct 调用不应该在 @onsetup 修饰函数中(尽管这仍然适用于Plone 3)。
此邮件列表讨论可能会进一步澄清:
如果您使用 plone.app.testing ,则应致电:
这应该在您从PloneSandboxLayer覆盖的 setUpZope 方法中完成。
有关详细信息,请阅读 plone.app.testing.helpers.py 中 setUpZope 下的说明(第257行) https://github.com/plone/plone.app.testing/blob/2ef789f8173c695179b043fd4634e0bdb6567511/plone/app/testing/helpers.py