[Grok-dev] Re: ComponentLookupError with IAuthentication

Peter Bengtsson peter at fry-it.com
Thu Jul 3 05:47:51 EDT 2008


Thanks but that doesn't work in unit tests as I don't have a getRootFolder.

I tried your advice in my functional test too where I also have a
problem (probably utility related) but it didn't help.

2008/7/3 Christian Klinger <cklinger at novareto.de>:
> Hi Peter,
>
> in some grok.tests it´s important to set the site manually:
>
> Here is an example from the ftests/utlity ...
>
> """
> Local Utilities can be registered on subclasses of grok.Site using
> grok.local_utility:
>
>  >>> cave = Cave()
>  >>> getRootFolder()["cave"] = cave
>
>  >>> from zope import component
>  >>> from zope.app.component.hooks import getSite, setSite
>  >>> setSite(cave)
>
>
> Maybe this helps you
>
> Christian
>
>
>
>> Perhaps this is related to the email I sent a few minutes ago about
>> running a functional test to create users.
>> Now I'm trying the same in a unit test and I get a different error.
>>
>> Error in test test_save_user (thegrokway.unit_tests.app.AppTest)
>> Traceback (most recent call last):
>>  File "/usr/lib/python2.4/unittest.py", line 260, in run
>>    testMethod()
>>  File
>> "/home/peterbe/dev/GROK/TheGrokWay/src/thegrokway/unit_tests/app.py",
>> line 69, in test_save_user
>>    user = app.save_user(login, password, name, email)
>>  File "/home/peterbe/dev/GROK/TheGrokWay/src/thegrokway/app.py", line
>> 133, in save_user
>>    pau = getUtility(IAuthentication)
>>  File
>> "/home/peterbe/buildout-eggs/zope.component-3.4.0-py2.4.egg/zope/component/_api.py",
>> line 207, in getUtility
>>    raise ComponentLookupError(interface, name)
>> ComponentLookupError: (<InterfaceClass
>> zope.app.security.interfaces.IAuthentication>, '')
>>
>>
>> The test is really simple:
>>
>>    def test_save_user(self):
>>        """ save_user is a function that creates a IUser object """
>>
>>        login = u'foo'
>>        password = u'secret'
>>        name = u'Pelle Svansl\xf6s'
>>        email = 'pelle at svanslos.com'
>>        user = save_user(login, password, name, email)
>>
>>
>> And the function save_user() is defined outside the app (which does
>> the grok.local_utility() stuff)
>>
>>
>>
>> def save_user(login, password, name, email):
>>    pau = getUtility(IAuthentication)
>>    principals = pau['principals']
>>    # create an instance of InternalPrincipal
>>    principal = InternalPrincipal(login, password, name,
>>                                  passwordManagerName='SHA1')
>>
>>    # add principal to principal folder; we may assume that the login
>>    # name is unique because of validation on the IUser interface
>>    # but to be doubly sure, we assert this
>>    assert login not in principals, "Login already in use"
>>    principals[login] = principal
>>    # save the e-mail
>>
>>    user = IUser(principal)
>>    user.email = email
>>    # grant the user permission to view the member listing
>>    permission_mngr = IPrincipalPermissionManager(grok.getSite())
>>    permission_mngr.grantPermissionToPrincipal(
>>           ADD_RECIPE_PERMISSION,
>>           principals.prefix + login)
>>    permission_mngr.grantPermissionToPrincipal(
>>           EDIT_RECIPE_PERMISSION,
>>           principals.prefix + login)
>>
>>    return user
>>
>>
>> I guess it's because I haven't registered the IAuthentication
>> interface as a utility. My application class looks like this::
>>
>> class TheGrokWay(grok.Application, grok.Container, Base):
>>
>>    # register the authentication utility; see setup_pau for settings
>>    grok.local_utility(PluggableAuthentication, IAuthentication,
>>                       setup=setup_pau)
>>
>>
>> But the function save_user() is defined outside the class. How do I
>> register the utility when the application is not involved?
>>
>> Peter
>>
>
> _______________________________________________
> Grok-dev mailing list
> Grok-dev at zope.org
> http://mail.zope.org/mailman/listinfo/grok-dev
>



-- 
Peter Bengtsson,
work www.fry-it.com
home www.peterbe.com
hobby www.issuetrackerproduct.com


More information about the Grok-dev mailing list