/*
* 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.tests.errai.jpa.exclusion.client;
import java.util.Set;
import javax.persistence.EntityManager;
import javax.persistence.metamodel.EntityType;
import org.jboss.errai.ioc.client.Container;
import org.jboss.errai.ioc.client.container.IOC;
import org.jboss.errai.jpa.client.local.ErraiEntityManager;
import org.jboss.errai.jpa.client.local.ErraiMetamodel;
import org.jboss.errai.jpa.test.client.JpaTestClient;
import org.jboss.errai.jpa.test.client.res.JpaClientTestCase;
import org.jboss.errai.jpa.test.entity.Album;
public class EntityExclusionIntegrationTest extends JpaClientTestCase {
@Override
public String getModuleName() {
return "org.jboss.tests.errai.jpa.exclusion.ExclusionJpaTest";
}
protected EntityManager getEntityManager() {
final JpaTestClient testClient = JpaTestClient.INSTANCE;
assertNotNull(testClient);
assertNotNull(testClient.entityManager);
((ErraiEntityManager) testClient.entityManager).removeAll();
return testClient.entityManager;
}
@Override
protected void gwtSetUp() throws Exception {
super.gwtSetUp();
Album.CALLBACK_LOG.clear();
// 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();
}
public void testWhiteListedEntityIsInEntityManager() throws Exception {
try {
// we cannot use the class name to test here since the class is not available in client side code generation
final EntityType et = ((ErraiMetamodel) getEntityManager().getMetamodel())
.entity("org.jboss.tests.errai.jpa.exclusion.client.res.WhiteListedEntity");
assertEquals("Incorrect entity type found", et.getJavaType().getName(),
"org.jboss.tests.errai.jpa.exclusion.client.res.WhiteListedEntity");
} catch (final IllegalArgumentException ex) {
fail("WhiteListedEntity was not included in EntityManager");
}
}
public void testBlackListedEntityIsNotInEntityManager() throws Exception {
try {
((ErraiMetamodel) getEntityManager().getMetamodel())
.entity("org.jboss.tests.errai.jpa.exclusion.client.res.BlackListedEntity");
fail("BlackListedEntity was not excluded from EntityManager");
} catch (final IllegalArgumentException ex) {
// this is the expected behavior
}
}
public void testWhiteListedPackageIsInEntityManager() throws Exception {
try {
final EntityType et = ((ErraiMetamodel) getEntityManager().getMetamodel())
.entity("org.jboss.tests.errai.jpa.exclusion.whitelist.WhiteListedPackageEntity");
assertEquals("Incorrect entity type found", et.getJavaType().getName(),
"org.jboss.tests.errai.jpa.exclusion.whitelist.WhiteListedPackageEntity");
} catch (final IllegalArgumentException e) {
fail("WhiteListedPackageEntity was not found in EntityManager");
}
}
public void testNestedBlackListedEntityIsNotInEntityManager() throws Exception {
// tests to see if a blacklisted class that is inside a whitelisted package is excluded
// (blacklist overrides whitelist)
try {
((ErraiMetamodel) getEntityManager().getMetamodel())
.entity("org.jboss.tests.errai.jpa.exclusion.whitelist.BlackListedEntityInWhiteListedPackage");
fail("BlackListedEntityInWhiteListedPackage was not excluded from EntityManager");
} catch (final IllegalArgumentException ex) {
// this is the expected behavior
}
}
public void testBlackListedPackageIsNotInEntityManager() throws Exception {
final Set<EntityType<?>> entitySet = getEntityManager().getMetamodel().getEntities();
for (final EntityType<?> et : entitySet) {
final String className = et.getJavaType().getName();
if (className.startsWith("org.jboss.tests.errai.jpa.exclusion.blacklist")) {
fail("Class "+ className + "from blacklisted package not excluded from Entity Manager");
}
}
}
public void testWhiteAndBlackListedEntityIsNotInEntityManager() throws Exception {
// blacklist overrides whitelist
try {
((ErraiMetamodel) getEntityManager().getMetamodel())
.entity("org.jboss.tests.errai.jpa.exclusion.client.WhiteAndBlackListedEntity");
fail("WhiteAndBlackListedEntity was not excluded from EntityManager");
} catch (final IllegalArgumentException ex) {
// this is the expected behavior
}
}
}