2011-12-07 10 views
1

私はPlone 3.3.5を使用しています。plone 3.3.5 - last_login_timeと日付範囲インデックスを使用したテストカタログクエリが失敗する

このテストでは、ユーザーの前回のログイン時からPloneboardCommentをすべて取得する必要があります。

この私が使用しているコード:「afterSetup」で

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 

を私は2つのコメントでフォーラムを作成しかし、彼らはでUSER1ログインする前に作成されてきたので、彼らは「getNewSinceLastLogin」によってカウントすべきではありません。

とにかく、テストは「self.assertEquals(新、0)」新しい= 2ではなく0

奇妙なことは、私はすべての日付を印刷する場合、クエリが動作するはずということです上のために失敗します

* 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 

はい、違いはかなり薄いですが、 "updateLoginTime"が機能しない前に "sleep(10)"を設定することさえできます。

チェックの前に「sleep(30)」を置いた場合や、pdbをテストの中に入れた場合、手動で数秒後にメソッドを呼び出すと0(!!!)になります正しいクエリ結果です。

私はここで何がうまくいかないのですか...この種類のクエリにはテスト固有の設定がありますか?なぜなら、作成直後にすべてのオブジェクトを「手動で」索引付けしても、カタログを最新のものにする必要があるのはなぜですか?

答えて

1

これは、日付が5分に丸められている可能性があります。これらのチケットを見て:#11827#11936#11827

+0

あなたは正しいです!ハッキングのログインとオブジェクトの日付を追加することで約5分トリック、ありがとう! – simahawk

関連する問題