358 # second level of recursion |
358 # second level of recursion |
359 s = u.in_state[0] |
359 s = u.in_state[0] |
360 self.assertEqual(s.cw_attr_cache['name'], 'activated') |
360 self.assertEqual(s.cw_attr_cache['name'], 'activated') |
361 self.assertRaises(KeyError, s.cw_attr_cache.__getitem__, 'description') |
361 self.assertRaises(KeyError, s.cw_attr_cache.__getitem__, 'description') |
362 |
362 |
|
363 def test_get_entity_recursion(self): |
|
364 with self.admin_access.repo_cnx() as cnx: |
|
365 cnx.create_entity('EmailAddress', address=u'toto', |
|
366 reverse_primary_email=cnx.user.eid) |
|
367 cnx.commit() |
|
368 |
|
369 # get_entity should fill the caches for user and email, even if both |
|
370 # entities are already in the connection's entity cache |
|
371 with self.admin_access.repo_cnx() as cnx: |
|
372 mail = cnx.find('EmailAddress').one() |
|
373 rset = cnx.execute('Any X, E WHERE X primary_email E') |
|
374 u = rset.get_entity(0, 0) |
|
375 self.assertTrue(u.cw_relation_cached('primary_email', 'subject')) |
|
376 self.assertTrue(mail.cw_relation_cached('primary_email', 'object')) |
|
377 |
|
378 with self.admin_access.repo_cnx() as cnx: |
|
379 mail = cnx.find('EmailAddress').one() |
|
380 rset = cnx.execute('Any X, E WHERE X primary_email E') |
|
381 rset.get_entity(0, 1) |
|
382 self.assertTrue(mail.cw_relation_cached('primary_email', 'object')) |
|
383 u = cnx.user |
|
384 self.assertTrue(u.cw_relation_cached('primary_email', 'subject')) |
|
385 |
363 |
386 |
364 def test_get_entity_cache_with_left_outer_join(self): |
387 def test_get_entity_cache_with_left_outer_join(self): |
365 with self.admin_access.web_request() as req: |
388 with self.admin_access.web_request() as req: |
366 eid = req.execute('INSERT CWUser E: E login "joe", E upassword "joe", E in_group G ' |
389 eid = req.execute('INSERT CWUser E: E login "joe", E upassword "joe", E in_group G ' |
367 'WHERE G name "users"')[0][0] |
390 'WHERE G name "users"')[0][0] |