equal
deleted
inserted
replaced
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') |