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

标签 python testing plone

如何在 plone.app.testing 中为我的功能测试添加 Members 文件夹以便像在真实站点中一样可以找到它?

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

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 创建新用户,但这对更晚没有帮助。

memberareaCreationFlag 在实时 Plone 站点中工作得很好。

最佳答案

我终于明白了。

起初 membership.memberareaCreationFlag = 1 不足以启用成员文件夹。

它必须在 plone.app.controlpanel.security 中使用 SecurityControlPanelAdapter 启用

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()

呼。

关于python - 如何在 plone.app.testing 中添加 Members 文件夹?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6520207/

相关文章:

python - Django - 在模板中引用静态文件

iphone - iPhone 的猴子测试?

ScalaTest:BeforeAndAfter 未运行

plone - 如何将关键字添加到 SearchableText 以获取 Dexterity 内容类型?

plone - 条件取决于其他字段

python - 将float转换为str时如何检查默认小数精度?

Python 3 - Zip 是 pandas 数据框中的迭代器

python - 为什么 Django 在升级到 v2.2 后发送重复的错误消息?

json - postman 测试 - 只断言设置键 :value pairs in an object, 没有意外返回

plone - 如何设置通过通用设置(结构)导入的内容的默认 View