server/test/unittest_hooksmanager.py
branchtls-sprint
changeset 1802 d628defebc17
parent 1398 5fe84a5f7035
child 1977 606923dff11b
equal deleted inserted replaced
1801:672acc730ce5 1802:d628defebc17
    14 schema = config.load_schema()
    14 schema = config.load_schema()
    15 
    15 
    16 class HooksManagerTC(TestCase):
    16 class HooksManagerTC(TestCase):
    17     args = (None,)
    17     args = (None,)
    18     kwargs = {'a': 1}
    18     kwargs = {'a': 1}
    19     
    19 
    20     def setUp(self):
    20     def setUp(self):
    21         """ called before each test from this class """
    21         """ called before each test from this class """
    22         self.o = HooksManager(schema)
    22         self.o = HooksManager(schema)
    23 
    23 
    24     def test_register_hook_raise_keyerror(self):
    24     def test_register_hook_raise_keyerror(self):
    30                           self.o.register_hook, self._hook, 'session_logout', 'CWEType')
    30                           self.o.register_hook, self._hook, 'session_logout', 'CWEType')
    31         self.assertRaises(AssertionError,
    31         self.assertRaises(AssertionError,
    32                           self.o.register_hook, self._hook, 'server_startup', 'CWEType')
    32                           self.o.register_hook, self._hook, 'server_startup', 'CWEType')
    33         self.assertRaises(AssertionError,
    33         self.assertRaises(AssertionError,
    34                           self.o.register_hook, self._hook, 'server_shutdown', 'CWEType')
    34                           self.o.register_hook, self._hook, 'server_shutdown', 'CWEType')
    35         
    35 
    36     def test_register_hook1(self):
    36     def test_register_hook1(self):
    37         self.o.register_hook(self._hook, 'before_add_entity')
    37         self.o.register_hook(self._hook, 'before_add_entity')
    38         self.o.register_hook(self._hook, 'before_delete_entity', 'Personne')
    38         self.o.register_hook(self._hook, 'before_delete_entity', 'Personne')
    39         self._test_called_hooks()
    39         self._test_called_hooks()
    40         
    40 
    41     def test_register_hook2(self):
    41     def test_register_hook2(self):
    42         self.o.register_hook(self._hook, 'before_add_entity', '')
    42         self.o.register_hook(self._hook, 'before_add_entity', '')
    43         self.o.register_hook(self._hook, 'before_delete_entity', 'Personne')
    43         self.o.register_hook(self._hook, 'before_delete_entity', 'Personne')
    44         self._test_called_hooks()
    44         self._test_called_hooks()
    45         
    45 
    46     def test_register_hook3(self):
    46     def test_register_hook3(self):
    47         self.o.register_hook(self._hook, 'before_add_entity', None)
    47         self.o.register_hook(self._hook, 'before_add_entity', None)
    48         self.o.register_hook(self._hook, 'before_delete_entity', 'Personne')
    48         self.o.register_hook(self._hook, 'before_delete_entity', 'Personne')
    49         self._test_called_hooks()
    49         self._test_called_hooks()
    50         
    50 
    51     def test_register_hooks(self):
    51     def test_register_hooks(self):
    52         self.o.register_hooks({'before_add_entity' : {'': [self._hook]},
    52         self.o.register_hooks({'before_add_entity' : {'': [self._hook]},
    53                                'before_delete_entity' : {'Personne': [self._hook]},
    53                                'before_delete_entity' : {'Personne': [self._hook]},
    54                                })
    54                                })
    55         self._test_called_hooks()
    55         self._test_called_hooks()
    60                           self.o.call_hooks, 'after_delete_entity', 'Personne',
    60                           self.o.call_hooks, 'after_delete_entity', 'Personne',
    61                           *self.args, **self.kwargs)
    61                           *self.args, **self.kwargs)
    62         self.o.unregister_hook(self._hook, 'after_delete_entity', 'Personne')
    62         self.o.unregister_hook(self._hook, 'after_delete_entity', 'Personne')
    63         # no hook should be called there
    63         # no hook should be called there
    64         self.o.call_hooks('after_delete_entity', 'Personne')
    64         self.o.call_hooks('after_delete_entity', 'Personne')
    65         
    65 
    66 
    66 
    67     def _test_called_hooks(self):
    67     def _test_called_hooks(self):
    68         self.assertRaises(HookCalled,
    68         self.assertRaises(HookCalled,
    69                           self.o.call_hooks, 'before_add_entity', '',
    69                           self.o.call_hooks, 'before_add_entity', '',
    70                           *self.args, **self.kwargs)
    70                           *self.args, **self.kwargs)
   100         """make sure before_xxx_relation hooks are called directly"""
   100         """make sure before_xxx_relation hooks are called directly"""
   101         self.o.register_hook(self._before_relation_hook,
   101         self.o.register_hook(self._before_relation_hook,
   102                              'before_add_relation', 'concerne')
   102                              'before_add_relation', 'concerne')
   103         self.assertEquals(self.called, [])
   103         self.assertEquals(self.called, [])
   104         self.o.call_hooks('before_add_relation', 'concerne', 'USER',
   104         self.o.call_hooks('before_add_relation', 'concerne', 'USER',
   105                           1, 'concerne', 2)        
   105                           1, 'concerne', 2)
   106         self.assertEquals(self.called, [(1, 'concerne', 2)])
   106         self.assertEquals(self.called, [(1, 'concerne', 2)])
   107         
   107 
   108     def test_after_add_relation(self):
   108     def test_after_add_relation(self):
   109         """make sure after_xxx_relation hooks are deferred"""
   109         """make sure after_xxx_relation hooks are deferred"""
   110         self.o.register_hook(self._after_relation_hook,
   110         self.o.register_hook(self._after_relation_hook,
   111                              'after_add_relation', 'concerne')
   111                              'after_add_relation', 'concerne')
   112         self.assertEquals(self.called, [])
   112         self.assertEquals(self.called, [])
   113         self.o.call_hooks('after_add_relation', 'concerne', 'USER',
   113         self.o.call_hooks('after_add_relation', 'concerne', 'USER',
   114                           1, 'concerne', 2)
   114                           1, 'concerne', 2)
   115         self.o.call_hooks('after_add_relation', 'concerne', 'USER',
   115         self.o.call_hooks('after_add_relation', 'concerne', 'USER',
   116                           3, 'concerne', 4)
   116                           3, 'concerne', 4)
   117         self.assertEquals(self.called, [(1, 'concerne', 2), (3, 'concerne', 4)])
   117         self.assertEquals(self.called, [(1, 'concerne', 2), (3, 'concerne', 4)])
   118     
   118 
   119     def test_before_delete_relation(self):
   119     def test_before_delete_relation(self):
   120         """make sure before_xxx_relation hooks are called directly"""
   120         """make sure before_xxx_relation hooks are called directly"""
   121         self.o.register_hook(self._before_relation_hook,
   121         self.o.register_hook(self._before_relation_hook,
   122                              'before_delete_relation', 'concerne')
   122                              'before_delete_relation', 'concerne')
   123         self.assertEquals(self.called, [])
   123         self.assertEquals(self.called, [])
   124         self.o.call_hooks('before_delete_relation', 'concerne', 'USER',
   124         self.o.call_hooks('before_delete_relation', 'concerne', 'USER',
   125                           1, 'concerne', 2)        
   125                           1, 'concerne', 2)
   126         self.assertEquals(self.called, [(1, 'concerne', 2)])
   126         self.assertEquals(self.called, [(1, 'concerne', 2)])
   127 
   127 
   128     def test_after_delete_relation(self):
   128     def test_after_delete_relation(self):
   129         """make sure after_xxx_relation hooks are deferred"""
   129         """make sure after_xxx_relation hooks are deferred"""
   130         self.o.register_hook(self._after_relation_hook,
   130         self.o.register_hook(self._after_relation_hook,
   164 
   164 
   165 class MyHook(Hook):
   165 class MyHook(Hook):
   166     schema = schema # set for actual hooks at registration time
   166     schema = schema # set for actual hooks at registration time
   167     events = ('whatever', 'another')
   167     events = ('whatever', 'another')
   168     accepts = ('Societe', 'Division')
   168     accepts = ('Societe', 'Division')
   169     
   169 
   170 class HookTC(RepositoryBasedTC):
   170 class HookTC(RepositoryBasedTC):
   171     def test_inheritance(self):
   171     def test_inheritance(self):
   172         self.assertEquals(list(MyHook.register_to()),
   172         self.assertEquals(list(MyHook.register_to()),
   173                           zip(repeat('whatever'), ('Societe', 'Division', 'SubDivision'))
   173                           zip(repeat('whatever'), ('Societe', 'Division', 'SubDivision'))
   174                           + zip(repeat('another'), ('Societe', 'Division', 'SubDivision')))
   174                           + zip(repeat('another'), ('Societe', 'Division', 'SubDivision')))