2011-06-29 8 views
5

Jak mogę dodać folder Members dla moich testów funkcjonalnych w plone.app.testing, aby można było go znaleźć tak jak w prawdziwej witrynie?Jak dodać folder Members w plone.app.testing?

Mam ustawioną flagę tworzenia obszaru członkowskiego w moim etapie instalacji produktu, który testuję.

membership.memberareaCreationFlag = 1 

Muszę dostać tej pracy badawczej:

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

I specjalnie potrzebne folderu funkcje państwa. Tylko folder należący do użytkownika testowego go nie obciąża.

Próbowałem również utworzyć nowego użytkownika za pomocą acl_users.userFolderAddUser, ale to nie pomoże, że będzie gorzej.

The memberareaCreationFlag działa dobrze w żywej witrynie Plone.

Odpowiedz

4

W końcu to rozgryzłem.

Początkowo membership.memberareaCreationFlag = 1 nie wystarcza do włączenia folderów członków.

To musi być włączony z SecurityControlPanelAdapter w plone.app.controlpanel.security

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

Również funkcjonalna oprawa testowanie nie tworzy folder użytkownika automatycznie, ale można go zainstalować ręcznie Twoja klasa urządzeń

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

Wreszcie jako foldery członkowskie są tworzone do logowania użytkownika, ale funkcja pomocnika logowania w plone.app .testing wydaje się być zbyt niski poziom dla tego. Zaloguj się za pomocą polecenia zope.testbrowser, wydaje się działać podstępem. Ulepsz się.

0

self.assert_ nie jest metodą testową, użyj czegoś takiego jak self.assertTrue lub self.assertIsNotNone.

Aby dodać foldery członków, po prostu włącz tworzenie folderu członków i dodaj nowego użytkownika.

+0

Ustawienie flagi tworzenia nie jest wystarczające. Zaktualizowałem moje pytanie. – Epeli

+0

@Epeli: zgodnie z matą należy również dodać nowego użytkownika. –

+0

Dodaję. Zobacz zaktualizowane pytanie. – Epeli

0

Coś

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

jest doskonale pracuje dla nas.

+0

Jak to powinno pomóc? Czy te produkty mają wpływ na funkcjonalność folderu członkowskiego? – Epeli