sobjects/test/unittest_notification.py
changeset 0 b97547f5f1fa
child 1016 26387b836099
equal deleted inserted replaced
-1:000000000000 0:b97547f5f1fa
       
     1 # -*- coding: iso-8859-1 -*-
       
     2 from socket import gethostname
       
     3 
       
     4 from logilab.common.testlib import unittest_main, TestCase
       
     5 from cubicweb.devtools.apptest import EnvBasedTC
       
     6 
       
     7 from mx.DateTime import now
       
     8 
       
     9 from cubicweb.sobjects.notification import construct_message_id, parse_message_id
       
    10 
       
    11 class MessageIdTC(TestCase):
       
    12     def test_base(self):
       
    13         msgid1 = construct_message_id('testapp', 21)
       
    14         msgid2 = construct_message_id('testapp', 21)
       
    15         self.failIfEqual(msgid1, msgid2)
       
    16         self.failIf('&' in msgid1)
       
    17         self.failIf('=' in msgid1)
       
    18         self.failIf('/' in msgid1)
       
    19         self.failIf('+' in msgid1)
       
    20         values = parse_message_id(msgid1, 'testapp')
       
    21         self.failUnless(values)
       
    22         # parse_message_id should work with or without surrounding <>
       
    23         self.failUnlessEqual(values, parse_message_id(msgid1[1:-1], 'testapp'))
       
    24         self.failUnlessEqual(values['eid'], '21')
       
    25         self.failUnless('timestamp' in values)
       
    26         self.failUnlessEqual(parse_message_id(msgid1[1:-1], 'anotherapp'), None)
       
    27         
       
    28     def test_notimestamp(self):
       
    29         msgid1 = construct_message_id('testapp', 21, False)
       
    30         msgid2 = construct_message_id('testapp', 21, False)
       
    31         values = parse_message_id(msgid1, 'testapp')
       
    32         self.failUnlessEqual(values, {'eid': '21'})
       
    33 
       
    34     def test_parse_message_doesnt_raise(self):
       
    35         self.failUnlessEqual(parse_message_id('oijioj@bla.bla', 'tesapp'), None)
       
    36         self.failUnlessEqual(parse_message_id('oijioj@bla', 'tesapp'), None)
       
    37         self.failUnlessEqual(parse_message_id('oijioj', 'tesapp'), None)
       
    38 
       
    39 
       
    40     def test_nonregr_empty_message_id(self):
       
    41         for eid in (1, 12, 123, 1234):
       
    42             msgid1 = construct_message_id('testapp', eid, 12)
       
    43             self.assertNotEquals(msgid1, '<@testapp.%s>' % gethostname())
       
    44         
       
    45 
       
    46 class RecipientsFinderTC(EnvBasedTC):
       
    47     def test(self):
       
    48         urset = self.execute('EUser X WHERE X login "admin"')
       
    49         self.execute('INSERT EmailAddress X: X address "admin@logilab.fr", U primary_email X '
       
    50                      'WHERE U eid %(x)s', {'x': urset[0][0]})
       
    51         self.execute('INSERT EProperty X: X pkey "ui.language", X value "fr", X for_user U '
       
    52                      'WHERE U eid %(x)s', {'x': urset[0][0]})
       
    53         self.commit() # commit so that admin get its properties updated
       
    54         finder = self.vreg.select_component('recipients_finder', self.request(), urset)
       
    55         self.set_option('default-recipients-mode', 'none')
       
    56         self.assertEquals(finder.recipients(), [])
       
    57         self.set_option('default-recipients-mode', 'users')
       
    58         self.assertEquals(finder.recipients(), [(u'admin@logilab.fr', 'fr')])
       
    59         self.set_option('default-recipients-mode', 'default-dest-addrs')
       
    60         self.set_option('default-dest-addrs', 'abcd@logilab.fr, efgh@logilab.fr')
       
    61         self.assertEquals(finder.recipients(), [('abcd@logilab.fr', 'en'), ('efgh@logilab.fr', 'en')])
       
    62         
       
    63 
       
    64 class StatusChangeViewsTC(EnvBasedTC):
       
    65         
       
    66     def test_status_change_view(self):
       
    67         req = self.session()
       
    68         u = self.create_user('toto', req=req)
       
    69         assert u.req
       
    70         self.execute('SET X in_state S WHERE X eid %s, S name "deactivated"' % u.eid)
       
    71         v = self.vreg.select_view('notif_status_change', req, u.rset, row=0)
       
    72         content = v.dispatch(row=0, comment='yeah',
       
    73                              previous_state='activated',
       
    74                              current_state='deactivated')
       
    75         # remove date
       
    76         self.assertEquals(content,
       
    77                           '''
       
    78 admin changed status from <activated> to <deactivated> for entity
       
    79 'toto'
       
    80 
       
    81 yeah
       
    82 
       
    83 url: http://testing.fr/cubicweb/euser/toto
       
    84 ''')
       
    85         self.assertEquals(v.subject(), 'status changed euser #%s (admin)' % u.eid)
       
    86 
       
    87 if __name__ == '__main__':
       
    88     unittest_main()