r434 - jpa2-validation/trunk/jsr317-jpa2/src/test/java/org/nuiton/sandbox/jsr317/jpa2/entity
Author: fdesbois Date: 2010-11-12 18:56:27 +0100 (Fri, 12 Nov 2010) New Revision: 434 Url: http://nuiton.org/repositories/revision/sandbox/434 Log: Add other interesting test Added: jpa2-validation/trunk/jsr317-jpa2/src/test/java/org/nuiton/sandbox/jsr317/jpa2/entity/EntityManagerTest.java Added: jpa2-validation/trunk/jsr317-jpa2/src/test/java/org/nuiton/sandbox/jsr317/jpa2/entity/EntityManagerTest.java =================================================================== --- jpa2-validation/trunk/jsr317-jpa2/src/test/java/org/nuiton/sandbox/jsr317/jpa2/entity/EntityManagerTest.java (rev 0) +++ jpa2-validation/trunk/jsr317-jpa2/src/test/java/org/nuiton/sandbox/jsr317/jpa2/entity/EntityManagerTest.java 2010-11-12 17:56:27 UTC (rev 434) @@ -0,0 +1,197 @@ +package org.nuiton.sandbox.jsr317.jpa2.entity; + +import javax.persistence.PersistenceException; +import javax.persistence.Query; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.junit.After; +import org.junit.Assert; +import org.junit.Test; +import org.nuiton.sandbox.jsr317.jpa2.test.BaseTest; +import org.springframework.test.annotation.Rollback; +import org.springframework.transaction.annotation.Transactional; + +/** + * Created on 18 oct. 2010 + * + * @author fdesbois <florian.desbois@wiztivi.com> + * @version $Id$ + */ +public class EntityManagerTest extends BaseTest { + + private static final Log log = LogFactory.getLog(EntityManagerTest.class); + + @After + @Transactional + @Rollback(false) + public void tearDown() throws Exception { + userDAO.deleteAll(); + } + + @Test + @Transactional + // Use rollback false to see data in database after tests +// @Rollback(false) + public void testCreateUser() { + + // ---- EXECUTE ---- // + + Customer user = new CustomerImpl(); + user.setLastName("lastName"); + user.setFirstName("firstName"); + + em.persist(user); + + long userId = user.getId(); + log.debug("Created entity with id " + userId + " at " + user.getCreateDate()); + + // Entity is still in the EntityManager + Assert.assertTrue(em.contains(user)); + + // Flush session to insert the entity before detach it + em.flush(); + // Detach the entity to find it from database + em.detach(user); + Assert.assertFalse(em.contains(user)); + + // Object not attached to the entityManager, a query will be called + Customer userFound = em.find(CustomerImpl.class, userId); + + // Check data + Assert.assertNotNull(userFound); + Assert.assertNotNull(userFound.getId()); + Assert.assertEquals(0, userFound.getVersion()); + Assert.assertNotNull(userFound.getCreateDate()); + Assert.assertNull(userFound.getUpdateDate()); + Assert.assertEquals("lastName", userFound.getLastName()); + Assert.assertEquals("firstName", userFound.getFirstName()); + + // Update name, check version changed + userFound.setLastName("nameChanged"); + em.merge(userFound); + + // Version not changed before commit (or manual flush) + userFound = em.find(CustomerImpl.class, userId); + Assert.assertEquals(0, userFound.getVersion()); + Assert.assertEquals("nameChanged", userFound.getLastName()); + + em.flush(); + + // Version is updated + Assert.assertEquals(1, userFound.getVersion()); + } + + @Test + @Transactional + public void testDeleteAllUsers() { + + // ---- PREPARE DATA ---- // + + Customer user1 = new CustomerImpl(); + user1.setLastName("lastName1"); + user1.setFirstName("firstName1"); + + em.persist(user1); + + Customer user2 = new CustomerImpl(); + user2.setLastName("lastName2"); + user2.setFirstName("firstName2"); + + em.persist(user2); + + // ---- EXECUTE ---- // + + String readAllCustomersQuery = new StringBuilder("FROM ").append(CustomerImpl.class.getSimpleName()).toString(); + + // Create named query to check all existing accounts + Query query = em.createQuery(readAllCustomersQuery); + Assert.assertEquals(2, query.getResultList().size()); + + // Delete all data from AccountImpl + userDAO.deleteAll(); + + // Create named query to check all existing accounts + query = em.createQuery(readAllCustomersQuery); + Assert.assertEquals(0, query.getResultList().size()); + } + + @Test(expected = PersistenceException.class) + @Transactional + public void testPersistDetachError() { + + Customer user = new CustomerImpl(); + user.setLastName("lastName"); + user.setFirstName("firstName"); + + em.persist(user); + + em.detach(user); + + em.persist(user); + } + + @Test + @Transactional + public void testMergeDetachSuccess() { + + Customer user = new CustomerImpl(); + user.setLastName("lastName"); + user.setFirstName("firstName"); + + em.persist(user); + + // Flush session to insert the entity before detach it + em.flush(); + + em.detach(user); + + em.merge(user); + } + + @Test + @Transactional + public void testAlwaysMerge() { + + Customer user = new CustomerImpl(); + user.setLastName("lastName"); + user.setFirstName("firstName"); + + Customer userCreated = em.merge(user); + + // Flush session to insert the entity before detach it + em.flush(); + + em.detach(userCreated); + + em.merge(userCreated); + } + + @Test + @Transactional + public void testUpdateNewBeanWithExistingId() { + + Customer user = new CustomerImpl(); + user.setLastName("lastName"); + user.setFirstName("firstName"); + + // Persist the user + em.persist(user); + + // Create a new bean with existing id + Customer userToUpdate = new CustomerImpl(); + userToUpdate.setId(user.getId()); + userToUpdate.setLastName("newLastName"); + + Customer userUpdated = em.merge(userToUpdate); + // All data are updated, so firstName becomes NULL + Assert.assertNull(userUpdated.getFirstName()); + Assert.assertEquals("newLastName", userUpdated.getLastName()); + // It's the same id + Assert.assertEquals(user.getId(), userUpdated.getId()); + // It's also the same instance because user is not detached + Assert.assertEquals(user, userUpdated); + } + + + +} Property changes on: jpa2-validation/trunk/jsr317-jpa2/src/test/java/org/nuiton/sandbox/jsr317/jpa2/entity/EntityManagerTest.java ___________________________________________________________________ Added: svn:keywords + HeadURL Id Date Revision Author
participants (1)
-
fdesbois@users.nuiton.org