Plone 3.3.5 - Consulta de catálogo de pruebas usando last_login_time y el índice de rango de fecha falla

StackOverflow https://stackoverflow.com/questions/8416465

Pregunta

Estoy en Plone 3.3.5 y estoy escribiendo una prueba para mi paquete.

En la prueba, necesito recuperar todo el Comercio de PloneBoebook desde el último tiempo de inicio de sesión del usuario.

Este es el código que estoy usando:

class FunctionalTestSetup(base.FunctionalTestCase):
    [...]
    def test_new_since_last_login(self):
        # we log in as user1
        userid = 'user1'
        self.login(userid)
        # XXX: last_login_time is not updated
        self.updateLoginTime(userid)
        # and we should get no msg since last login
        new = getNewSinceLastLoginNr(self.forum, userid)
        self.assertEquals(new,0)

    def updateLoginTime(self, userid):
        member = self.portal.portal_membership.getMemberById(userid)
        member.setMemberProperties({'last_login_time': DateTime(),})


def getNewSinceLastLogin(forum, userid):
    """ returns all the new msgs since user's last login
    """
    acl = getToolByName(forum,'acl_users')
    user = acl.getUserById(userid)
    last_login = user.getProperty('last_login_time')

    query = dict(
        path = {'query':"/".join(forum.getPhysicalPath()),
                'depth':-1,},
        portal_type = "PloneboardComment",
        created = {'query':last_login, 'range': 'min'},
    )
    brains = self.catalog(query)
    return brains

En "AuthetSetup" creo un foro con 2 comentarios, pero no deben ser contados por "getNewsincelastlogin" porque se han creado antes de que el usuario1 inicie sesión.

De todos modos, la prueba falló porque en "self.assertecals (nuevo, 0)" nuevo = 2 en lugar de 0.

Lo extraño es que si imprimo todas las fechas, la consulta debería funcionar:

* last_login_time on login:
2011/12/07 13:44:24.131 GMT+1
* updated last_login_time:
2011/12/07 13:44:24.146 GMT+1
* last_login_time on catalog query:
2011/12/07 13:44:24.146 GMT+1
* creation date of comments:
2011/12/07 13:44:23.875 GMT+1
2011/12/07 13:44:24.019 GMT+1

Sí, la diferencia es bastante delgada, pero incluso colocando un "sueño (10)" antes de que el "UpdateLogItile" no funcione.

Lo extraño es que si lo coloco "duermo (30)" antes del cheque o si coloco un PDB dentro de la prueba, y llamo manualmente los métodos después de unos segundos, obtengo 0 (!!!) esa es la consulta correcta resultado.

No puedo entender lo que está yendo mal aquí ... ¿Hay alguna configuración específica de prueba para este tipo de consulta? ¿Por qué el catálogo necesita todo este tiempo para estar actualizado incluso si reincule "manualmente" cada objeto justo después de la creación?

¿Fue útil?

Solución

Tal vez esto se debe a que las fechas se redondean a 5 minutos. Eche un vistazo a estos boletos: #11827 y #11936 y #11827

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top