私は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(!!!)になります正しいクエリ結果です。
私はここで何がうまくいかないのですか...この種類のクエリにはテスト固有の設定がありますか?なぜなら、作成直後にすべてのオブジェクトを「手動で」索引付けしても、カタログを最新のものにする必要があるのはなぜですか?
あなたは正しいです!ハッキングのログインとオブジェクトの日付を追加することで約5分トリック、ありがとう! – simahawk