如何在plone.app.testing中添加Members文件夹?

5 投票
3 回答
571 浏览
提问于 2025-04-16 20:31

我想知道如何在 plone.app.testing 中为我的功能测试添加一个成员文件夹,这样它就能像真实网站一样被找到。

我在测试的产品安装步骤中设置了成员区域创建的标志。

membership.memberareaCreationFlag = 1 

我需要让这个测试正常运行:

class TestMemberFolder(unittest.TestCase):          
    layer = MY_FUNCTIONAL_TESTING         

    def setUp(self):                                
        portal = self.portal = self.layer['portal'] 

    def test_members_folder(self):

        membership = getToolByName(self.portal, 'portal_membership')  
        membership.addMember("basicuser", "secret", ["Member"], [])
        transaction.commit()

        login(self.portal, "basicuser")                               

        # This works just fine, because it was set by my product
        self.assertEquals(membership.memberareaCreationFlag, 1,       
            "memberareaCreationFlag must be 1 when it is enabled")    


        members_folder = membership.getMembersFolder()                
        # But this fails
        self.assertIsNotNone(members_folder)     
        # Also we should have the user folder here
        self.assertTrue(members_folder.hasObject('basicuser'))

我特别需要成员文件夹的功能。仅仅有一个由测试用户拥有的文件夹是不够的。

我还尝试用 acl_users.userFolderAddUser 创建新用户,但这也没有帮助。

在实际的 Plone 网站中,成员区域创建的标志工作得很好。

3 个回答

0

类似这样的代码

  def setUpPloneSite(self, portal):
        # Install into Plone site using portal_setup
        quickInstallProduct(portal, 'Products.DataGridField')
        quickInstallProduct(portal, 'Products.ATVocabularyManager')
        quickInstallProduct(portal, 'Products.MasterSelectWidget')
        if HAVE_LP:
            quickInstallProduct(portal, 'Products.LinguaPlone')
        applyProfile(portal, 'vs.org:default')
        portal.acl_users.userFolderAddUser('god', 'dummy', ['Manager'], []) 
        setRoles(portal, 'god', ['Manager'])
        login(portal, 'god')

对我们来说完全可以正常工作。

0

self.assert_ 不是一个测试方法,应该使用像 self.assertTrue 或 self.assertIsNotNone 这样的测试方法。

要添加成员文件夹,只需开启成员文件夹创建功能,然后添加一个新用户就可以了。

4

我终于搞明白了。

一开始,设置 membership.memberareaCreationFlag = 1 只是开启会员文件夹的第一步,这还不够。

必须通过 SecurityControlPanelAdapterplone.app.controlpanel.security 中进行启用。

from plone.app.controlpanel.security import ISecuritySchema
# Fetch the adapter
security_adapter =  ISecuritySchema(portal)
security_adapter.set_enable_user_folders(True)

另外,功能测试的准备工作并不会自动创建会员文件夹,但你可以在你的准备类中手动安装它。

class YourPloneFixture(PloneSandboxLayer):
    defaultBases = (PLONE_FIXTURE,)

    def setUpZope(self, app, configurationContext):

        # Required by Products.CMFPlone:plone-content
        z2.installProduct(app, 'Products.PythonScripts')

    def setUpPloneSite(self, portal):

        # Installs all the Plone stuff. Workflows etc.
        self.applyProfile(portal, 'Products.CMFPlone:plone')

        # Install portal content. Including the Members folder!
        self.applyProfile(portal, 'Products.CMFPlone:plone-content')

最后,会员文件夹是在用户登录时创建的,但在 plone.app.testing 中的登录辅助功能似乎不够高级,无法完成这个任务。使用 zope.testbrowser 登录似乎就能解决这个问题。

browser = Browser(self.layer['app'])
browser.open(self.portal.absolute_url() + '/login_form')
browser.getControl(name='__ac_name').value = TEST_USER_NAME
browser.getControl(name='__ac_password').value = TEST_USER_PASSWOR
browser.getControl(name='submit').click()

呼。

撰写回答