package org.jboss.test.capedwarf.testsuite.jpa.test;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import org.jboss.capedwarf.testsuite.jpa.Client;
import org.jboss.shrinkwrap.api.spec.WebArchive;
import org.jboss.test.capedwarf.common.test.TestContext;
import org.jboss.test.capedwarf.testsuite.TestsuiteTestBase;
import org.junit.Assert;
import org.junit.Test;
/**
* @author <a href="mailto:ales.justin@jboss.org">Ales Justin</a>
*/
public abstract class SimpleJPATestBase extends JPATestBase {
protected static WebArchive getBaseDeployment() {
final WebArchive war = getCapedwarfDeployment(TestContext.withBlackList());
war.addPackage(Client.class.getPackage());
war.addClass(TestsuiteTestBase.class);
war.addClass(JPATestBase.class);
war.addClass(SimpleJPATestBase.class);
return war;
}
protected static WebArchive getDefaultDeployment() {
final WebArchive war = getBaseDeployment();
TestUtils.addPersistenceXml(war, "jpa/default-persistence.xml");
return war;
}
@Test
public void testSaveAndQuery() throws Throwable {
try {
final Client client = new Client();
EMAction<Long> ema1 = new EMAction<Long>() {
public Long go(EntityManager em) throws Throwable {
client.setUsername("alesj");
client.setPassword("password");
client.setEmail("aj@jboss.com");
em.persist(client);
return client.getId();
}
};
run(ema1);
try {
final Long id = client.getId();
Assert.assertNotNull("Null client id", id);
EMAction<Client> ema2 = new EMAction<Client>() {
public Client go(EntityManager em) throws Throwable {
Query q = em.createQuery("select from Client c where c.username = :username");
q.setParameter("username", "alesj");
@SuppressWarnings("unchecked")
List<Client> clients = q.getResultList();
return (clients.isEmpty()) ? null : clients.get(0);
}
};
Client c = run(ema2, false);
Assert.assertNotNull(c);
Assert.assertEquals(id, c.getId());
Assert.assertEquals("alesj", c.getUsername());
Assert.assertEquals("password", c.getPassword());
EMAction<Client> ema3 = new EMAction<Client>() {
public Client go(EntityManager em) throws Throwable {
return em.find(Client.class, id);
}
};
c = run(ema3, false);
Assert.assertNotNull(c);
Assert.assertEquals(id, c.getId());
Assert.assertEquals("alesj", c.getUsername());
Assert.assertEquals("password", c.getPassword());
} finally {
EMAction<Integer> delete = new EMAction<Integer>() {
public Integer go(EntityManager em) throws Throwable {
Query query = em.createQuery("delete from Client c where c.id = :id");
query.setParameter("id", client.getId());
return query.executeUpdate();
}
};
Assert.assertTrue(1 == run(delete));
}
} finally {
cleanup();
}
}
}