package eu.ggnet.dwoss.uniqueunit.eao; import java.time.LocalDate; import java.util.*; import java.util.Map.Entry; import javax.persistence.*; import org.junit.*; import eu.ggnet.dwoss.rules.ProductGroup; import eu.ggnet.dwoss.rules.TradeName; import eu.ggnet.dwoss.uniqueunit.assist.UniqueUnitPu; import eu.ggnet.dwoss.uniqueunit.entity.Product; import eu.ggnet.dwoss.uniqueunit.entity.UniqueUnit; import static eu.ggnet.dwoss.rules.Step.WEEK; import static eu.ggnet.dwoss.uniqueunit.entity.UniqueUnit.Identifier.REFURBISHED_ID; import static java.time.ZoneId.systemDefault; import static org.junit.Assert.*; /** * * @author pascal.perau */ public class UniqueUnitEaoIT { private EntityManagerFactory emf; private EntityManager em; private UniqueUnit unit_62325; private Product product; private final static String REFURBISHID_62325 = "62325"; private final static Date BEFORE = Date.from(LocalDate.of(2012, 11, 1).atStartOfDay(systemDefault()).toInstant()); private final static Date _2012_12_02_ = Date.from(LocalDate.of(2012, 12, 2).atStartOfDay(systemDefault()).toInstant()); private final static Date _2012_12_10_ = Date.from(LocalDate.of(2012, 12, 10).atStartOfDay(systemDefault()).toInstant()); private final static Date _2012_12_20_ = Date.from(LocalDate.of(2012, 12, 12).atStartOfDay(systemDefault()).toInstant()); private final static Date AFTER = Date.from(LocalDate.of(2012, 12, 31).atStartOfDay(systemDefault()).toInstant()); private final static String PARTNO_1 = "AA.BBBBB.CCC"; private final static String PARTNO_2 = "AA.BBBBB.DDD"; private final static String PARTNO_3 = "AA.BBBBB.EEE"; @Before public void setUp() { emf = Persistence.createEntityManagerFactory(UniqueUnitPu.NAME, UniqueUnitPu.JPA_IN_MEMORY); em = emf.createEntityManager(); em.getTransaction().begin(); product = new Product(ProductGroup.MONITOR, TradeName.ACER, PARTNO_1, "The Notebook"); em.persist(product); Product p2 = new Product(ProductGroup.MONITOR, TradeName.ACER, PARTNO_2, "The Notebook"); em.persist(p2); Product p3 = new Product(ProductGroup.MONITOR, TradeName.ACER, PARTNO_3, "The Notebook"); em.persist(p3); unit_62325 = new UniqueUnit(); unit_62325.setIdentifier(UniqueUnit.Identifier.REFURBISHED_ID, REFURBISHID_62325); unit_62325.setContractor(TradeName.AMAZON); unit_62325.setCondition(UniqueUnit.Condition.ALMOST_NEW); unit_62325.setProduct(product); unit_62325.setInputDate(_2012_12_02_); em.persist(unit_62325); UniqueUnit u2 = new UniqueUnit(); u2.setIdentifier(UniqueUnit.Identifier.REFURBISHED_ID, "99999"); u2.setContractor(TradeName.ACER); u2.setCondition(UniqueUnit.Condition.ALMOST_NEW); u2.setInputDate(_2012_12_10_); u2.setProduct(product); em.persist(u2); UniqueUnit u3 = new UniqueUnit(); u3.setIdentifier(UniqueUnit.Identifier.REFURBISHED_ID, "99998"); u3.setContractor(TradeName.ACER); u3.setCondition(UniqueUnit.Condition.AS_NEW); u3.setProduct(p2); u3.setInputDate(_2012_12_10_); em.persist(u3); UniqueUnit u4 = new UniqueUnit(); u4.setIdentifier(UniqueUnit.Identifier.REFURBISHED_ID, "99997"); u4.setContractor(TradeName.ACER); u4.setCondition(UniqueUnit.Condition.AS_NEW); u4.setProduct(p3); u4.setInputDate(_2012_12_10_); em.persist(u4); UniqueUnit u5 = new UniqueUnit(); u5.setIdentifier(UniqueUnit.Identifier.REFURBISHED_ID, "99996"); u5.setContractor(TradeName.ACER); u5.setCondition(UniqueUnit.Condition.AS_NEW); u5.setProduct(p3); u5.setInputDate(_2012_12_20_); em.persist(u5); em.getTransaction().commit(); } @After public void tearDown() { em.close(); emf.close(); } @Ignore // Possible that hsqldb does not handle these queries well. @Test public void testCount() { em.getTransaction().begin(); UniqueUnitEao unitEao = new UniqueUnitEao(em); NavigableMap<Date, BrandContractorCount> counted = unitEao.countByInputDateContractor(BEFORE, AFTER, WEEK); for (Entry<Date, BrandContractorCount> e : counted.entrySet()) { System.out.println(e.getKey()); System.out.println(e.getValue()); System.out.println("----"); } em.getTransaction().commit(); } @Test public void testFindByProductPartNosInputDate() { em.getTransaction().begin(); UniqueUnitEao unitEao = new UniqueUnitEao(em); List<UniqueUnit> uus = unitEao.findByProductPartNosInputDate(Arrays.asList(PARTNO_1, PARTNO_2), _2012_12_02_, _2012_12_10_); assertFalse(uus.isEmpty()); assertEquals(3, uus.size()); em.getTransaction().commit(); } @Test public void testFindByProductPartNo() { em.getTransaction().begin(); UniqueUnitEao unitEao = new UniqueUnitEao(em); List<UniqueUnit> uus = unitEao.findByProductPartNo(PARTNO_1); assertFalse(uus.isEmpty()); assertEquals(2, uus.size()); em.getTransaction().commit(); } @Test public void testFindIdentifier() { em.getTransaction().begin(); UniqueUnitEao unitEao = new UniqueUnitEao(em); assertNotNull(unitEao.findByIdentifier(UniqueUnit.Identifier.REFURBISHED_ID, REFURBISHID_62325)); assertNull(unitEao.findByIdentifier(UniqueUnit.Identifier.REFURBISHED_ID, "65475")); assertEquals(unit_62325, unitEao.findByIdentifier(UniqueUnit.Identifier.REFURBISHED_ID, REFURBISHID_62325)); em.getTransaction().commit(); } @Test public void testFindPartIdentifier() { em.getTransaction().begin(); UniqueUnitEao unitEao = new UniqueUnitEao(em); assertTrue(unitEao.findByPartialIdentifier(UniqueUnit.Identifier.REFURBISHED_ID, "632*").isEmpty()); assertTrue(unitEao.findByPartialIdentifier(UniqueUnit.Identifier.REFURBISHED_ID, "623*").contains(unit_62325)); em.getTransaction().commit(); } @Test public void testFindIdentifiers() { em.getTransaction().begin(); UniqueUnitEao unitEao = new UniqueUnitEao(em); assertEquals(2, unitEao.findByIdentifiers(REFURBISHED_ID, new TreeSet<>(Arrays.asList("99999", "99998"))).size()); assertTrue(unitEao.findByIdentifiers(REFURBISHED_ID, Arrays.asList(REFURBISHID_62325)).contains(unit_62325)); em.getTransaction().commit(); } }