/*
* Copyright (C) 2015 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jboss.errai.jpa.test.client;
import java.math.BigInteger;
import javax.persistence.EntityManager;
import org.jboss.errai.ioc.client.Container;
import org.jboss.errai.ioc.client.container.IOC;
import org.jboss.errai.jpa.rebind.ErraiEntityManagerGenerator;
import org.jboss.errai.jpa.test.client.res.JpaClientTestCase;
import org.jboss.errai.jpa.test.entity.EntityWithBigIntegerId;
import org.jboss.errai.jpa.test.entity.EntityWithBoxedIntId;
import org.jboss.errai.jpa.test.entity.EntityWithBoxedLongId;
import org.jboss.errai.jpa.test.entity.EntityWithNonGeneratedId;
import org.jboss.errai.jpa.test.entity.EntityWithPrimitiveIntId;
import org.jboss.errai.jpa.test.entity.EntityWithPrimitiveLongId;
/**
* Tests the ability of Errai JPA to generate key values for all allowable
* generated ID types.
*
* @author Jonathan Fuerth <jfuerth@gmail.com>
*/
public class IdGeneratorTest extends JpaClientTestCase {
@Override
public String getModuleName() {
return "org.jboss.errai.jpa.test.JpaTest";
}
protected EntityManager getEntityManager() {
final JpaTestClient testClient = JpaTestClient.INSTANCE;
assertNotNull(testClient);
assertNotNull(testClient.entityManager);
return JpaTestClient.INSTANCE.entityManager;
}
@Override
protected void gwtSetUp() throws Exception {
super.gwtSetUp();
// We need to bootstrap the IoC container manually because GWTTestCase
// doesn't call onModuleLoad() for us.
new Container().bootstrapContainer();
}
@Override
protected void gwtTearDown() throws Exception {
Container.reset();
IOC.reset();
}
/**
* Tests that the entity manager was injected into the testing class. If this
* test fails, the likely cause is that the
* {@link ErraiEntityManagerGenerator} failed to output a compilable class. In
* that case, try re-running this test with
* {@code -Derrai.codegen.permissive=true} and
*/
public void testEntityManagerInjection() throws Exception {
getEntityManager(); // has its own assertions
}
public void testPrimitiveLong() throws Exception {
final EntityManager em = getEntityManager();
final EntityWithPrimitiveLongId entity = new EntityWithPrimitiveLongId();
assertEquals(0, entity.getId());
em.persist(entity);
em.flush();
assertTrue(entity.getId() > 0);
}
public void testBoxedLong() throws Exception {
final EntityManager em = getEntityManager();
final EntityWithBoxedLongId entity = new EntityWithBoxedLongId();
assertNull(entity.getId());
em.persist(entity);
em.flush();
assertNotNull(entity.getId());
assertTrue(entity.getId() > 0);
}
public void testPrimitiveInt() throws Exception {
final EntityManager em = getEntityManager();
final EntityWithPrimitiveIntId entity = new EntityWithPrimitiveIntId();
assertEquals(0, entity.getId());
em.persist(entity);
em.flush();
assertTrue(entity.getId() > 0);
}
public void testBoxedInt() throws Exception {
final EntityManager em = getEntityManager();
final EntityWithBoxedIntId entity = new EntityWithBoxedIntId();
assertNull(entity.getId());
em.persist(entity);
em.flush();
assertNotNull(entity.getId());
assertTrue(entity.getId() > 0);
}
public void testBigInteger() throws Exception {
final EntityManager em = getEntityManager();
final EntityWithBigIntegerId entity = new EntityWithBigIntegerId();
assertNull(entity.getId());
em.persist(entity);
em.flush();
assertNotNull(entity.getId());
assertTrue(entity.getId().compareTo(BigInteger.ZERO) > 0);
}
public void testNonGeneratedIdWithZeroValue() throws Exception {
final EntityManager em = getEntityManager();
final EntityWithNonGeneratedId entity = new EntityWithNonGeneratedId();
entity.setMessage("foo");
try {
em.persist(entity);
em.flush();
} catch (final Throwable t) {
throw new AssertionError("Could not persist entity with non-generated id set to zero.", t);
}
assertEquals(0L, entity.getId());
}
}