server/test/unittest_repository.py
changeset 8483 4ba11607d84a
parent 8388 c6c624cea870
child 8535 268b6349baf3
equal deleted inserted replaced
8469:82272decfa99 8483:4ba11607d84a
   519         req.create_entity('Personne', nom=u'Vincent', fiche=c)
   519         req.create_entity('Personne', nom=u'Vincent', fiche=c)
   520         req.create_entity('Personne', nom=u'Florent', fiche=c)
   520         req.create_entity('Personne', nom=u'Florent', fiche=c)
   521         self.commit()
   521         self.commit()
   522         self.assertEqual(len(c.reverse_fiche), 1)
   522         self.assertEqual(len(c.reverse_fiche), 1)
   523 
   523 
   524     def test_set_attributes_in_before_update(self):
   524     def test_cw_set_in_before_update(self):
   525         # local hook
   525         # local hook
   526         class DummyBeforeHook(Hook):
   526         class DummyBeforeHook(Hook):
   527             __regid__ = 'dummy-before-hook'
   527             __regid__ = 'dummy-before-hook'
   528             __select__ = Hook.__select__ & is_instance('EmailAddress')
   528             __select__ = Hook.__select__ & is_instance('EmailAddress')
   529             events = ('before_update_entity',)
   529             events = ('before_update_entity',)
   531                 # safety belt: avoid potential infinite recursion if the test
   531                 # safety belt: avoid potential infinite recursion if the test
   532                 #              fails (i.e. RuntimeError not raised)
   532                 #              fails (i.e. RuntimeError not raised)
   533                 pendings = self._cw.transaction_data.setdefault('pending', set())
   533                 pendings = self._cw.transaction_data.setdefault('pending', set())
   534                 if self.entity.eid not in pendings:
   534                 if self.entity.eid not in pendings:
   535                     pendings.add(self.entity.eid)
   535                     pendings.add(self.entity.eid)
   536                     self.entity.set_attributes(alias=u'foo')
   536                     self.entity.cw_set(alias=u'foo')
   537         with self.temporary_appobjects(DummyBeforeHook):
   537         with self.temporary_appobjects(DummyBeforeHook):
   538             req = self.request()
   538             req = self.request()
   539             addr = req.create_entity('EmailAddress', address=u'a@b.fr')
   539             addr = req.create_entity('EmailAddress', address=u'a@b.fr')
   540             addr.set_attributes(address=u'a@b.com')
   540             addr.cw_set(address=u'a@b.com')
   541             rset = self.execute('Any A,AA WHERE X eid %(x)s, X address A, X alias AA',
   541             rset = self.execute('Any A,AA WHERE X eid %(x)s, X address A, X alias AA',
   542                                 {'x': addr.eid})
   542                                 {'x': addr.eid})
   543             self.assertEqual(rset.rows, [[u'a@b.com', u'foo']])
   543             self.assertEqual(rset.rows, [[u'a@b.com', u'foo']])
   544 
   544 
   545     def test_set_attributes_in_before_add(self):
   545     def test_cw_set_in_before_add(self):
   546         # local hook
   546         # local hook
   547         class DummyBeforeHook(Hook):
   547         class DummyBeforeHook(Hook):
   548             __regid__ = 'dummy-before-hook'
   548             __regid__ = 'dummy-before-hook'
   549             __select__ = Hook.__select__ & is_instance('EmailAddress')
   549             __select__ = Hook.__select__ & is_instance('EmailAddress')
   550             events = ('before_add_entity',)
   550             events = ('before_add_entity',)
   551             def __call__(self):
   551             def __call__(self):
   552                 # set_attributes is forbidden within before_add_entity()
   552                 # cw_set is forbidden within before_add_entity()
   553                 self.entity.set_attributes(alias=u'foo')
   553                 self.entity.cw_set(alias=u'foo')
   554         with self.temporary_appobjects(DummyBeforeHook):
   554         with self.temporary_appobjects(DummyBeforeHook):
   555             req = self.request()
   555             req = self.request()
   556             # XXX will fail with python -O
   556             # XXX will fail with python -O
   557             self.assertRaises(AssertionError, req.create_entity,
   557             self.assertRaises(AssertionError, req.create_entity,
   558                               'EmailAddress', address=u'a@b.fr')
   558                               'EmailAddress', address=u'a@b.fr')
   559 
   559 
   560     def test_multiple_edit_set_attributes(self):
   560     def test_multiple_edit_cw_set(self):
   561         """make sure cw_edited doesn't get cluttered
   561         """make sure cw_edited doesn't get cluttered
   562         by previous entities on multiple set
   562         by previous entities on multiple set
   563         """
   563         """
   564         # local hook
   564         # local hook
   565         class DummyBeforeHook(Hook):
   565         class DummyBeforeHook(Hook):
   661         req = self.request()
   661         req = self.request()
   662         toto = req.create_entity('EmailAddress', address=u'toto@logilab.fr')
   662         toto = req.create_entity('EmailAddress', address=u'toto@logilab.fr')
   663         self.commit()
   663         self.commit()
   664         rset = req.execute('Any X WHERE X has_text %(t)s', {'t': 'toto'})
   664         rset = req.execute('Any X WHERE X has_text %(t)s', {'t': 'toto'})
   665         self.assertEqual(rset.rows, [])
   665         self.assertEqual(rset.rows, [])
   666         req.user.set_relations(use_email=toto)
   666         req.user.cw_set(use_email=toto)
   667         self.commit()
   667         self.commit()
   668         rset = req.execute('Any X WHERE X has_text %(t)s', {'t': 'toto'})
   668         rset = req.execute('Any X WHERE X has_text %(t)s', {'t': 'toto'})
   669         self.assertEqual(rset.rows, [[req.user.eid]])
   669         self.assertEqual(rset.rows, [[req.user.eid]])
   670         req.execute('DELETE X use_email Y WHERE X login "admin", Y eid %(y)s',
   670         req.execute('DELETE X use_email Y WHERE X login "admin", Y eid %(y)s',
   671                     {'y': toto.eid})
   671                     {'y': toto.eid})
   672         self.commit()
   672         self.commit()
   673         rset = req.execute('Any X WHERE X has_text %(t)s', {'t': 'toto'})
   673         rset = req.execute('Any X WHERE X has_text %(t)s', {'t': 'toto'})
   674         self.assertEqual(rset.rows, [])
   674         self.assertEqual(rset.rows, [])
   675         tutu = req.create_entity('EmailAddress', address=u'tutu@logilab.fr')
   675         tutu = req.create_entity('EmailAddress', address=u'tutu@logilab.fr')
   676         req.user.set_relations(use_email=tutu)
   676         req.user.cw_set(use_email=tutu)
   677         self.commit()
   677         self.commit()
   678         rset = req.execute('Any X WHERE X has_text %(t)s', {'t': 'tutu'})
   678         rset = req.execute('Any X WHERE X has_text %(t)s', {'t': 'tutu'})
   679         self.assertEqual(rset.rows, [[req.user.eid]])
   679         self.assertEqual(rset.rows, [[req.user.eid]])
   680         tutu.set_attributes(address=u'hip@logilab.fr')
   680         tutu.cw_set(address=u'hip@logilab.fr')
   681         self.commit()
   681         self.commit()
   682         rset = req.execute('Any X WHERE X has_text %(t)s', {'t': 'tutu'})
   682         rset = req.execute('Any X WHERE X has_text %(t)s', {'t': 'tutu'})
   683         self.assertEqual(rset.rows, [])
   683         self.assertEqual(rset.rows, [])
   684         rset = req.execute('Any X WHERE X has_text %(t)s', {'t': 'hip'})
   684         rset = req.execute('Any X WHERE X has_text %(t)s', {'t': 'hip'})
   685         self.assertEqual(rset.rows, [[req.user.eid]])
   685         self.assertEqual(rset.rows, [[req.user.eid]])
   787         for i in xrange(2000):
   787         for i in xrange(2000):
   788             p = req.create_entity('Personne', nom=u'Doe%03d'%i, prenom=u'John', sexe=u'M')
   788             p = req.create_entity('Personne', nom=u'Doe%03d'%i, prenom=u'John', sexe=u'M')
   789             personnes.append(p)
   789             personnes.append(p)
   790         abraham = req.create_entity('Personne', nom=u'Abraham', prenom=u'John', sexe=u'M')
   790         abraham = req.create_entity('Personne', nom=u'Abraham', prenom=u'John', sexe=u'M')
   791         for j in xrange(0, 2000, 100):
   791         for j in xrange(0, 2000, 100):
   792             abraham.set_relations(personne_composite=personnes[j:j+100])
   792             abraham.cw_set(personne_composite=personnes[j:j+100])
   793         t1 = time.time()
   793         t1 = time.time()
   794         self.info('creation: %.2gs', (t1 - t0))
   794         self.info('creation: %.2gs', (t1 - t0))
   795         req.cnx.commit()
   795         req.cnx.commit()
   796         t2 = time.time()
   796         t2 = time.time()
   797         self.info('commit creation: %.2gs', (t2 - t1))
   797         self.info('commit creation: %.2gs', (t2 - t1))
   813         abraham = req.create_entity('Personne', nom=u'Abraham', prenom=u'John', sexe=u'M',
   813         abraham = req.create_entity('Personne', nom=u'Abraham', prenom=u'John', sexe=u'M',
   814                                     personne_composite=personnes[:100])
   814                                     personne_composite=personnes[:100])
   815         t1 = time.time()
   815         t1 = time.time()
   816         self.info('creation: %.2gs', (t1 - t0))
   816         self.info('creation: %.2gs', (t1 - t0))
   817         for j in xrange(100, 2000, 100):
   817         for j in xrange(100, 2000, 100):
   818             abraham.set_relations(personne_composite=personnes[j:j+100])
   818             abraham.cw_set(personne_composite=personnes[j:j+100])
   819         t2 = time.time()
   819         t2 = time.time()
   820         self.info('more relations: %.2gs', (t2-t1))
   820         self.info('more relations: %.2gs', (t2-t1))
   821         req.cnx.commit()
   821         req.cnx.commit()
   822         t3 = time.time()
   822         t3 = time.time()
   823         self.info('commit creation: %.2gs', (t3 - t2))
   823         self.info('commit creation: %.2gs', (t3 - t2))
   833         abraham = req.create_entity('Personne', nom=u'Abraham', prenom=u'John', sexe=u'M',
   833         abraham = req.create_entity('Personne', nom=u'Abraham', prenom=u'John', sexe=u'M',
   834                                     personne_inlined=personnes[:100])
   834                                     personne_inlined=personnes[:100])
   835         t1 = time.time()
   835         t1 = time.time()
   836         self.info('creation: %.2gs', (t1 - t0))
   836         self.info('creation: %.2gs', (t1 - t0))
   837         for j in xrange(100, 2000, 100):
   837         for j in xrange(100, 2000, 100):
   838             abraham.set_relations(personne_inlined=personnes[j:j+100])
   838             abraham.cw_set(personne_inlined=personnes[j:j+100])
   839         t2 = time.time()
   839         t2 = time.time()
   840         self.info('more relations: %.2gs', (t2-t1))
   840         self.info('more relations: %.2gs', (t2-t1))
   841         req.cnx.commit()
   841         req.cnx.commit()
   842         t3 = time.time()
   842         t3 = time.time()
   843         self.info('commit creation: %.2gs', (t3 - t2))
   843         self.info('commit creation: %.2gs', (t3 - t2))
   914     def test_optional_relation_reset_1(self):
   914     def test_optional_relation_reset_1(self):
   915         req = self.request()
   915         req = self.request()
   916         p1 = req.create_entity('Personne', nom=u'Vincent')
   916         p1 = req.create_entity('Personne', nom=u'Vincent')
   917         p2 = req.create_entity('Personne', nom=u'Florent')
   917         p2 = req.create_entity('Personne', nom=u'Florent')
   918         w = req.create_entity('Affaire', ref=u'wc')
   918         w = req.create_entity('Affaire', ref=u'wc')
   919         w.set_relations(todo_by=[p1,p2])
   919         w.cw_set(todo_by=[p1,p2])
   920         w.cw_clear_all_caches()
   920         w.cw_clear_all_caches()
   921         self.commit()
   921         self.commit()
   922         self.assertEqual(len(w.todo_by), 1)
   922         self.assertEqual(len(w.todo_by), 1)
   923         self.assertEqual(w.todo_by[0].eid, p2.eid)
   923         self.assertEqual(w.todo_by[0].eid, p2.eid)
   924 
   924 
   925     def test_optional_relation_reset_2(self):
   925     def test_optional_relation_reset_2(self):
   926         req = self.request()
   926         req = self.request()
   927         p1 = req.create_entity('Personne', nom=u'Vincent')
   927         p1 = req.create_entity('Personne', nom=u'Vincent')
   928         p2 = req.create_entity('Personne', nom=u'Florent')
   928         p2 = req.create_entity('Personne', nom=u'Florent')
   929         w = req.create_entity('Affaire', ref=u'wc')
   929         w = req.create_entity('Affaire', ref=u'wc')
   930         w.set_relations(todo_by=p1)
   930         w.cw_set(todo_by=p1)
   931         self.commit()
   931         self.commit()
   932         w.set_relations(todo_by=p2)
   932         w.cw_set(todo_by=p2)
   933         w.cw_clear_all_caches()
   933         w.cw_clear_all_caches()
   934         self.commit()
   934         self.commit()
   935         self.assertEqual(len(w.todo_by), 1)
   935         self.assertEqual(len(w.todo_by), 1)
   936         self.assertEqual(w.todo_by[0].eid, p2.eid)
   936         self.assertEqual(w.todo_by[0].eid, p2.eid)
   937 
   937