# -*- coding: iso-8859-1 -*- from socket import gethostname from StringIO import StringIO from logilab.common.testlib import unittest_main from cubicweb.devtools.testlib import CubicWebTC from cubicweb.mail import construct_message_id MSG = u'''From sthenault@free.fr Tue Jan 23 15:21:10 2007 Return-Path: X-Original-To: Sylvain.Thenault@logilab.fr Delivered-To: syt@logilab.fr Received: from tucana.logilab.fr (tucana.logilab.fr [172.17.0.4]) by orion.logilab.fr (Postfix) with ESMTP id E4D79EAA37 for ; Tue, 23 Jan 2007 15:21:09 +0100 (CET) Received: from smtp2-g19.free.fr (smtp2-g19.free.fr [212.27.42.28]) by tucana.logilab.fr (Postfix) with ESMTP id 23B3D7140CE for ; Tue, 23 Jan 2007 15:21:08 +0100 (CET) Received: from nor75-16-82-239-114-67.fbx.proxad.net (cap31-2-82-224-153-77.fbx.proxad.net [82.224.153.77]) by smtp2-g19.free.fr (Postfix) with ESMTP id B057D7D54 for ; Tue, 23 Jan 2007 15:21:07 +0100 (CET) MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Subject: =?utf-8?q?new_comment_for_bug_avoir_un_champ_=22python_compat=22_sur_les_?= =?utf-8?q?projets_=3F?= From: =?utf-8?q?Sylvain_Th=C3=A9nault?= Reply-To: =?utf-8?q?Sylvain_Th=C3=A9nault?= X-ERUDI: jpl To: Sylvain.Thenault@logilab.fr Message-id: References: Date: Tue, 23 Jan 2007 15:21:07 +0100 (CET) X-Spambayes-Classification: ham; 0.00 Status: RO Content-Length: 122 Lines: 2 ''' class ChangeStateHooksTC(CubicWebTC): def setup_database(self): self.request().create_entity('BlogEntry', title=u"une news !", content=u"cubicweb c'est beau") self.request().create_entity('EmailAddress', address=u'devel@logilab.fr', alias=u'devel') self.msg = MSG % (self.vreg.config.appid, gethostname()) def test_email_change_state(self): u = self.execute('INSERT CWUser X: X login "toto", X upassword "sosafe", X in_group G ' 'WHERE G name "users"').get_entity(0, 0) subject = u':deactivate: %s' % u.eid eeid = self.execute('INSERT Email X: ' 'X headers %(headers)s, X subject %(subject)s,' 'X messageid "hop", X sender EA', {'subject': subject, 'headers': self.msg})[0][0] self.commit() userstate = self.execute('Any SN WHERE X in_state S, S name SN, X eid %(x)s', {'x': u.eid}, 'x')[0][0] self.assertEquals(userstate, 'deactivated') self.assertEquals(u.cw_adapt_to('IWorkflowable').latest_trinfo().creator.login, 'admin') def test_email_change_state_trinfo_owner(self): self.execute('SET U use_email E WHERE U login "anon"') u = self.execute('INSERT CWUser X: X login "toto", X upassword "sosafe", X in_group G ' 'WHERE G name "users"').get_entity(0, 0) subject = u':deactivate: %s' % u.eid eeid = self.execute('INSERT Email X: ' 'X headers %(headers)s, X subject %(subject)s,' 'X messageid "hop", X sender EA', {'subject': subject, 'headers': self.msg})[0][0] self.commit() userstate = self.execute('Any SN WHERE X in_state S, S name SN, X eid %(x)s', {'x': u.eid}, 'x')[0][0] self.assertEquals(userstate, 'deactivated') self.assertEquals(u.cw_adapt_to('IWorkflowable').latest_trinfo().creator.login, 'anon') def test_email_change_state_wrong_eid(self): ueid = self.execute('INSERT CWUser X: X login "toto", X upassword "sosafe", X in_group G ' 'WHERE G name "users"')[0][0] subject = u':deactivate: %s' % 10 eeid = self.execute('INSERT Email X: ' 'X headers %(headers)s, X subject %(subject)s,' 'X messageid "hop", X sender EA', {'subject': subject, 'headers': self.msg})[0][0] self.commit() userstate = self.execute('Any SN WHERE X in_state S, S name SN, X eid %(x)s', {'x': ueid}, 'x')[0][0] self.assertEquals(userstate, 'activated') def test_email_change_state_unexistant_eid(self): ueid = self.execute('INSERT CWUser X: X login "toto", X upassword "sosafe", X in_group G ' 'WHERE G name "users"')[0][0] subject = u':deactivate: %s' % 999999 eeid = self.execute('INSERT Email X: ' 'X headers %(headers)s, X subject %(subject)s,' 'X messageid "hop", X sender EA', {'subject': subject, 'headers': self.msg})[0][0] self.commit() userstate = self.execute('Any SN WHERE X in_state S, S name SN, X eid %(x)s', {'x': ueid}, 'x')[0][0] self.assertEquals(userstate, 'activated') def test_email_change_state_unexistant_transition(self): ueid = self.execute('INSERT CWUser X: X login "toto", X upassword "sosafe", X in_group G ' 'WHERE G name "users"')[0][0] subject = u':blabla: %s' % ueid eeid = self.execute('INSERT Email X: ' 'X headers %(headers)s, X subject %(subject)s,' 'X messageid "hop", X sender EA', {'subject': subject, 'headers': self.msg})[0][0] self.commit() userstate = self.execute('Any SN WHERE X in_state S, S name SN, X eid %(x)s', {'x': ueid}, 'x')[0][0] self.assertEquals(userstate, 'activated') MSG2 = u'''MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Subject: =?utf-8?q?new_comment_for_bug_avoir_un_champ_=22python_compat=22_sur_les_?= =?utf-8?q?projets_=3F?= From: =?utf-8?q?Sylvain_Th=C3=A9nault?= Reply-To: =?utf-8?q?Sylvain_Th=C3=A9nault?= X-ERUDI: jpl To: Sylvain.Thenault@logilab.fr Message-id: References: %s Date: Tue, 23 Jan 2007 15:21:07 +0100 (CET) X-Spambayes-Classification: ham; 0.00 Status: RO Content-Length: 122 Lines: 2 hop hop ''' from cubes.email.mboximport import MBOXImporter class ReplyCommentHooksTC(CubicWebTC): def setup_database(self): self.b = self.request().create_entity('BlogEntry', title=u"une news !", content=u"cubicweb c'est beau") e = self.request().create_entity('EmailAddress', address=u'sylvain.thenault@logilab.fr', alias=u'syt') self.execute('SET X use_email E WHERE X login "anon", E eid %(e)s', {'e': e.eid}) def test_comment_created(self): mi = MBOXImporter(self.cnx) msg = open('data/reply.mbox', 'rb').read() % \ construct_message_id(self.vreg.config.appid, self.b.eid, False) mi.import_mbox_stream(StringIO(msg)) self.commit() self.failUnless(self.execute('Email X')) self.failUnless(self.b.reverse_comments) c = self.b.reverse_comments[0] self.failUnlessEqual(c.content_format, 'text/plain') self.failUnlessEqual(c.content, u'''New ticket for project erudi-email : #22742 - erudi-email #22742: commentaires de mailbot ==================== description ----------- Sur http://intranet.logilab.fr/jpl/ticket/22309 on voit un commentaire sign\xe9 mailbot. Ce serait mieux d'utiliser l'auteur du mail. submitter --------- alf URL --- http://intranet.logilab.fr/jpl/ticket/22742 (project URL: http://intranet.logilab.fr/jpl/project/erudi-email)''') self.failUnlessEqual(c.creator.login, 'anon') self.failUnlessEqual(sorted(u.login for u in c.owned_by), ['admin', 'anon']) if __name__ == '__main__': unittest_main()