package org.transgalactica.management.data.referentiel.bo;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotSame;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import javax.persistence.Cache;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.transaction.TransactionConfiguration;
import org.springframework.transaction.annotation.Transactional;
import org.transgalactica.management.data.referentiel.TestConfig;
import org.transgalactica.management.data.referentiel.bo.impl.JpaMecanicienSpecialiteEntity;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = TestConfig.class)
@TransactionConfiguration
@Transactional
public class CacheTest {
@Autowired
private EntityManagerFactory emf;
@Test
public void testCacheMecanicienSpecialiteEntity() {
Cache l2 = emf.getCache();
EntityManager em = emf.createEntityManager();
assertFalse(l2.contains(JpaMecanicienSpecialiteEntity.class, 1L));
// Mise en cache L2 sur find.
JpaMecanicienSpecialiteEntity e1 = em.find(JpaMecanicienSpecialiteEntity.class, 1L);
assertTrue(l2.contains(JpaMecanicienSpecialiteEntity.class, 1L));
JpaMecanicienSpecialiteEntity e2 = em.find(JpaMecanicienSpecialiteEntity.class, 1L);
assertSame(e1, e2);
EntityManager em2 = emf.createEntityManager();
JpaMecanicienSpecialiteEntity e3 = em2.find(JpaMecanicienSpecialiteEntity.class, 1L);
assertNotSame(e1, e3); // Pourquoi le L2 ne renvoi pas les même
// instance?
assertEquals(e1, e3);
}
}