package eu.ggnet.dwoss.uniqueunit.eao;
import eu.ggnet.dwoss.uniqueunit.eao.UniqueUnitEao;
import java.util.*;
import javax.persistence.*;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import org.junit.Test;
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 eu.ggnet.dwoss.uniqueunit.entity.UniqueUnit.Condition;
import eu.ggnet.dwoss.util.validation.ConstraintViolationFormater;
import static eu.ggnet.dwoss.uniqueunit.entity.UniqueUnit.Identifier.REFURBISHED_ID;
import static eu.ggnet.dwoss.uniqueunit.entity.UniqueUnit.Identifier.SERIAL;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
public class UniqueUnitEao2IT {
private final static String PARTNO_1 = "AA.BBBBB.CCC";
@Test
public void testFindByIdentifier() {
EntityManagerFactory emf = Persistence.createEntityManagerFactory(UniqueUnitPu.NAME, UniqueUnitPu.JPA_IN_MEMORY);
EntityManager em = emf.createEntityManager();
Product p = new Product(ProductGroup.MONITOR, TradeName.FUJITSU, PARTNO_1, "The Notebook");
UniqueUnitEao uus = new UniqueUnitEao(em);
UniqueUnit unit1 = new UniqueUnit();
unit1.setMfgDate(new Date());
unit1.setIdentifier(SERIAL, "ROFFFLAASSS");
unit1.setIdentifier(REFURBISHED_ID, "22223");
unit1.setContractor(TradeName.ONESELF);
unit1.setCondition(Condition.AS_NEW);
unit1.setProduct(p);
UniqueUnit unit2 = new UniqueUnit();
unit2.setIdentifier(SERIAL, "FASREAGFSGSWE");
unit2.setIdentifier(REFURBISHED_ID, "54422");
unit2.setContractor(TradeName.ONESELF);
unit2.setCondition(Condition.AS_NEW);
unit2.setProduct(p);
UniqueUnit unit3 = new UniqueUnit();
unit3.setIdentifier(SERIAL, "FHASKHFUAERHFAGTQ");
unit3.setIdentifier(REFURBISHED_ID, "33323");
unit3.setContractor(TradeName.ONESELF);
unit3.setCondition(Condition.AS_NEW);
unit3.setProduct(p);
UniqueUnit unit4 = new UniqueUnit();
unit4.setIdentifier(SERIAL, "GFSKLFDIACVHDAIERQ");
unit4.setIdentifier(REFURBISHED_ID, "54142");
unit4.setContractor(TradeName.ONESELF);
unit4.setCondition(Condition.AS_NEW);
unit4.setProduct(p);
UniqueUnit unit5 = new UniqueUnit();
unit5.setIdentifier(SERIAL, "FDALOIFUOWE");
unit5.setIdentifier(REFURBISHED_ID, "29471");
unit5.setContractor(TradeName.ONESELF);
unit5.setCondition(Condition.AS_NEW);
unit5.setProduct(p);
Set<ConstraintViolation<UniqueUnit>> validate = Validation.buildDefaultValidatorFactory().getValidator().validate(unit1);
assertTrue(ConstraintViolationFormater.toMultiLine(new HashSet<>(validate), true), validate.isEmpty());
EntityTransaction tx = em.getTransaction();
tx.begin();
em.persist(p);
em.persist(unit1);
em.persist(unit2);
em.persist(unit3);
em.persist(unit4);
em.persist(unit5);
tx.commit();
UniqueUnit runit1 = uus.findByIdentifier(REFURBISHED_ID, "22223");
assertEquals(unit1.getId(), runit1.getId());
UniqueUnit runit2 = uus.findByIdentifier(REFURBISHED_ID, "54422");
assertEquals(unit2.getId(), runit2.getId());
List<UniqueUnit> runits = uus.findByPartialIdentifier(REFURBISHED_ID, "54*");
for (UniqueUnit runit : runits) {
assertTrue(runit.equals(unit2) || runit.equals(unit4));
}
runits = uus.findByPartialIdentifier(REFURBISHED_ID, "*22*");
for (UniqueUnit runit : runits) {
assertTrue(runit.equals(unit1) || runit.equals(unit2));
}
}
}