server/test/unittest_repository.py
changeset 5877 0c7b7b76a84f
parent 5717 3c281b6f16c6
child 5890 141b935a38fc
equal deleted inserted replaced
5876:e77aa963fb19 5877:0c7b7b76a84f
    31 
    31 
    32 from yams.constraints import UniqueConstraint
    32 from yams.constraints import UniqueConstraint
    33 
    33 
    34 from cubicweb import (BadConnectionId, RepositoryError, ValidationError,
    34 from cubicweb import (BadConnectionId, RepositoryError, ValidationError,
    35                       UnknownEid, AuthenticationError)
    35                       UnknownEid, AuthenticationError)
    36 from cubicweb.selectors import implements
    36 from cubicweb.selectors import is_instance
    37 from cubicweb.schema import CubicWebSchema, RQLConstraint
    37 from cubicweb.schema import CubicWebSchema, RQLConstraint
    38 from cubicweb.dbapi import connect, multiple_connections_unfix
    38 from cubicweb.dbapi import connect, multiple_connections_unfix
    39 from cubicweb.devtools.testlib import CubicWebTC
    39 from cubicweb.devtools.testlib import CubicWebTC
    40 from cubicweb.devtools.repotest import tuplify
    40 from cubicweb.devtools.repotest import tuplify
    41 from cubicweb.server import repository, hook
    41 from cubicweb.server import repository, hook
   385 
   385 
   386     def test_set_attributes_in_before_update(self):
   386     def test_set_attributes_in_before_update(self):
   387         # local hook
   387         # local hook
   388         class DummyBeforeHook(Hook):
   388         class DummyBeforeHook(Hook):
   389             __regid__ = 'dummy-before-hook'
   389             __regid__ = 'dummy-before-hook'
   390             __select__ = Hook.__select__ & implements('EmailAddress')
   390             __select__ = Hook.__select__ & is_instance('EmailAddress')
   391             events = ('before_update_entity',)
   391             events = ('before_update_entity',)
   392             def __call__(self):
   392             def __call__(self):
   393                 # safety belt: avoid potential infinite recursion if the test
   393                 # safety belt: avoid potential infinite recursion if the test
   394                 #              fails (i.e. RuntimeError not raised)
   394                 #              fails (i.e. RuntimeError not raised)
   395                 pendings = self._cw.transaction_data.setdefault('pending', set())
   395                 pendings = self._cw.transaction_data.setdefault('pending', set())
   406 
   406 
   407     def test_set_attributes_in_before_add(self):
   407     def test_set_attributes_in_before_add(self):
   408         # local hook
   408         # local hook
   409         class DummyBeforeHook(Hook):
   409         class DummyBeforeHook(Hook):
   410             __regid__ = 'dummy-before-hook'
   410             __regid__ = 'dummy-before-hook'
   411             __select__ = Hook.__select__ & implements('EmailAddress')
   411             __select__ = Hook.__select__ & is_instance('EmailAddress')
   412             events = ('before_add_entity',)
   412             events = ('before_add_entity',)
   413             def __call__(self):
   413             def __call__(self):
   414                 # set_attributes is forbidden within before_add_entity()
   414                 # set_attributes is forbidden within before_add_entity()
   415                 self.entity.set_attributes(alias=u'foo')
   415                 self.entity.set_attributes(alias=u'foo')
   416         with self.temporary_appobjects(DummyBeforeHook):
   416         with self.temporary_appobjects(DummyBeforeHook):
   425         """
   425         """
   426         # local hook
   426         # local hook
   427         class DummyBeforeHook(Hook):
   427         class DummyBeforeHook(Hook):
   428             _test = self # keep reference to test instance
   428             _test = self # keep reference to test instance
   429             __regid__ = 'dummy-before-hook'
   429             __regid__ = 'dummy-before-hook'
   430             __select__ = Hook.__select__ & implements('Affaire')
   430             __select__ = Hook.__select__ & is_instance('Affaire')
   431             events = ('before_update_entity',)
   431             events = ('before_update_entity',)
   432             def __call__(self):
   432             def __call__(self):
   433                 # invoiced attribute shouldn't be considered "edited" before the hook
   433                 # invoiced attribute shouldn't be considered "edited" before the hook
   434                 self._test.failIf('invoiced' in self.entity.edited_attributes,
   434                 self._test.failIf('invoiced' in self.entity.edited_attributes,
   435                                   'edited_attributes cluttered by previous update')
   435                                   'edited_attributes cluttered by previous update')