plone 3.3.5 - la requête de catalogue de test à l'aide de last_login_time et de l'index de plage de dates échoue

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

Question

Je suis sur Plone 3.3.5 et j'écris des tests pour mon paquet.

Dans le test, je dois récupérer tous les PloneboardComment depuis la dernière connexion de l'utilisateur.

Voici le code que j'utilise:

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

Sur "afterSetup", je crée un forum avec 2 commentaires MAIS ils ne doivent pas être comptés par "getNewSinceLastLogin" car ils ont été créés avant la connexion de l'utilisateur1.

Quoi qu'il en soit, le test échoue car sur "self.assertEquals (new, 0)" new= 2 au lieu de 0.

Ce qui est étrange, c'est que si j'imprime toutes les dates, la requête devrait fonctionner:

* 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

Oui, la différence est assez mince mais même placer un "sleep (10)" avant le "updateLoginTime" ne fonctionne pas.

Ce qui est étrange, c'est que si je place "sleep (30)" avant la vérification ou si je place un pdb dans le test, et que j'appelle manuellement les méthodes après quelques secondes, j'obtiens 0 (!!!) c'est-à-dire le bon résultat de la requête.

Je ne peux pas comprendre ce qui ne va pas ici ... y a-t-il une configuration spécifique au test pour ce type de requête? Pourquoi le catalogue a besoin de tout ce temps pour être à jour même si j'ai réindexé "manuellement" chaque objet juste après sa création?

Était-ce utile?

La solution

C'est peut-être parce que les dates sont arrondies à 5 minutes.Jetez un œil à ces tickets: # 11827 et # 11936 et # 11827

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top