package org.lightadmin.core.extension;
import org.junit.Before;
import org.junit.Test;
import org.lightadmin.core.persistence.repository.DynamicJpaRepository;
import org.lightadmin.core.persistence.repository.JavassistDynamicJpaRepositoryClassFactory;
import org.lightadmin.core.util.DynamicRepositoryBeanNameGenerator;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
public class JavassistDynamicJpaRepositoryClassFactoryTest {
private JavassistDynamicJpaRepositoryClassFactory testee;
@Before
public void setUp() {
testee = new JavassistDynamicJpaRepositoryClassFactory(new DynamicRepositoryBeanNameGenerator());
}
@Test
public void testCreateDynamicRepositoryClass() {
Class<DynamicJpaRepository<String, Long>> dynamicRepositoryClass = testee.createDynamicRepositoryClass(String.class, Long.class);
ParameterizedType baseType = (ParameterizedType) dynamicRepositoryClass.getGenericInterfaces()[0];
Type[] baseTypeArgs = baseType.getActualTypeArguments();
assertEquals(DynamicJpaRepository.class, baseType.getRawType());
assertEquals(String.class, baseTypeArgs[0]);
assertEquals(Long.class, baseTypeArgs[1]);
}
@Test
public void testCreateDynamicRepositoryClass_multipleCalls() {
Class<DynamicJpaRepository<String, Long>> dynamicRepositoryClass1 = testee.createDynamicRepositoryClass(String.class, Long.class);
Class<DynamicJpaRepository<String, Long>> dynamicRepositoryClass2 = testee.createDynamicRepositoryClass(String.class, Long.class);
assertArrayEquals(dynamicRepositoryClass1.getGenericInterfaces(), dynamicRepositoryClass2.getGenericInterfaces());
}
}