package eu.ggnet.dwoss.spec;
import eu.ggnet.dwoss.mandator.api.value.ReceiptCustomers;
import eu.ggnet.dwoss.mandator.api.value.ShippingTerms;
import eu.ggnet.dwoss.mandator.api.value.SpecialSystemCustomers;
import eu.ggnet.dwoss.mandator.api.value.PostLedger;
import java.util.*;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.ejb.embeddable.EJBContainer;
import javax.enterprise.inject.Produces;
import javax.inject.Inject;
import javax.naming.NamingException;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import org.junit.*;
import eu.ggnet.dwoss.configuration.SystemConfig;
import eu.ggnet.dwoss.spec.assist.SpecPu;
import eu.ggnet.dwoss.spec.assist.Specs;
import eu.ggnet.dwoss.spec.assist.gen.SpecGenerator;
import eu.ggnet.dwoss.spec.eao.CpuEao;
import eu.ggnet.dwoss.spec.eao.GpuEao;
import eu.ggnet.dwoss.spec.entity.piece.Cpu;
import eu.ggnet.dwoss.spec.entity.piece.Gpu;
import eu.ggnet.dwoss.spec.emo.DisplayEmo;
import eu.ggnet.dwoss.spec.emo.ProductModelEmo;
import eu.ggnet.dwoss.spec.entity.*;
import static org.junit.Assert.*;
/**
* Test for correct injection of EntityManagers
*/
public class ContainerIT {
private EJBContainer container;
@Inject
@Specs
private EntityManagerFactory emf;
@Inject
private GeneratorBean generatorBean;
@EJB
private SpecAgent specAgent;
@Produces
public static ReceiptCustomers p = new ReceiptCustomers(new HashMap<>());
@Produces
SpecialSystemCustomers sc = new SpecialSystemCustomers(new HashMap<>());
@Produces
PostLedger pl = new PostLedger(new HashMap<>());
@Produces
ShippingTerms st = new ShippingTerms(new HashMap<>());
@Before
public void setUp() throws NamingException {
Map<String, Object> c = new HashMap<>();
c.putAll(SpecPu.CMP_IN_MEMORY);
c.putAll(SystemConfig.OPENEJB_EJB_XML_DISCOVER);
c.putAll(SystemConfig.OPENEJB_LOG_WARN);
container = EJBContainer.createEJBContainer(c);
container.getContext().bind("inject", this);
}
@After
public void tearDown() {
container.close();
}
@Test
public void testInjected() {
assertNotNull("Container is null", container);
assertNotNull("EntityManagerFactory is null", emf);
}
@Test
public void testAgent() {
ProductSpec spec = generatorBean.makeOne();
assertNotNull(spec);
assertNotNull(specAgent);
List<ProductSpec> specs = specAgent.findAll(ProductSpec.class);
assertFalse(specs.isEmpty());
assertEquals(1, specs.size());
assertEquals(spec, specs.get(0));
}
@Stateless
public static class GeneratorBean {
@Inject
@Specs
private EntityManager specEm;
public ProductSpec makeOne() {
SpecGenerator g = new SpecGenerator();
ProductSpec spec = g.makeSpec();
ProductModel model = spec.getModel();
ProductModelEmo productModelEmo = new ProductModelEmo(specEm);
model = productModelEmo.request(
model.getFamily().getSeries().getBrand(),
model.getFamily().getSeries().getGroup(),
model.getFamily().getSeries().getName(),
model.getFamily().getName(),
model.getName());
spec.setModel(model);
if ( spec instanceof DisplayAble ) {
DisplayAble da = (DisplayAble)spec;
da.setDisplay(new DisplayEmo(specEm).weakRequest(
da.getDisplay().getSize(),
da.getDisplay().getResolution(),
da.getDisplay().getType(),
da.getDisplay().getRation()));
}
if ( spec instanceof Desktop ) {
Desktop desktop = (Desktop)spec;
if ( desktop.getCpu() == null || desktop.getGpu() == null ) throw new IllegalArgumentException("Cpu or Gpu of a Desktop are null. " + desktop);
Cpu cpu = new CpuEao(specEm).findById(desktop.getCpu().getId());
Gpu gpu = new GpuEao(specEm).findById(desktop.getGpu().getId());
if ( cpu != null ) desktop.setCpu(cpu);
if ( gpu != null ) desktop.setGpu(gpu);
}
specEm.persist(spec);
return spec;
}
}
}