package eu.ggnet.dwoss.receipt;
import eu.ggnet.dwoss.receipt.ProductProcessor;
import eu.ggnet.dwoss.spec.entity.ProductModel;
import eu.ggnet.dwoss.spec.entity.ProductSeries;
import eu.ggnet.dwoss.spec.entity.ProductFamily;
import java.util.HashMap;
import java.util.Map;
import javax.ejb.EJB;
import javax.ejb.embeddable.EJBContainer;
import javax.inject.Inject;
import javax.naming.NamingException;
import org.junit.*;
import eu.ggnet.dwoss.configuration.SystemConfig;
import eu.ggnet.dwoss.rules.ProductGroup;
import eu.ggnet.dwoss.rules.TradeName;
import eu.ggnet.dwoss.spec.assist.SpecPu;
import eu.ggnet.dwoss.stock.assist.StockPu;
import eu.ggnet.dwoss.uniqueunit.assist.UniqueUnitPu;
import static org.junit.Assert.*;
public class ReceiptProductLogicProductModelIT {
//<editor-fold defaultstate="collapsed" desc=" SetUp ">
private EJBContainer container;
@EJB
private ProductProcessor productProcessor;
@Inject
private SpecStore specStore;
@Before
public void setUp() throws NamingException {
Map<String, Object> c = new HashMap<>();
c.putAll(SpecPu.CMP_IN_MEMORY);
c.putAll(UniqueUnitPu.CMP_IN_MEMORY);
c.putAll(StockPu.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();
}
//</editor-fold>
//<editor-fold defaultstate="collapsed" desc=" createProductModel Testings ">
@Test(timeout = 5000)
public void testCreateProductModell() {
ProductModel productModel = productProcessor.create(TradeName.HP, ProductGroup.DESKTOP, null, null, "ProductModel1");
assertNotNull(productModel);
assertTrue(productModel.getId() > 0);
assertEquals(SpecPu.DEFAULT_NAME, productModel.getFamily().getSeries().getName());
ProductModel productModel2 = productProcessor.create(TradeName.HP, ProductGroup.DESKTOP, null, null, "ProductModel2");
assertNotNull(productModel2);
assertTrue(productModel2.getId() > 0);
assertEquals(SpecPu.DEFAULT_NAME, productModel2.getFamily().getSeries().getName());
//Create a ProductSeries and persist it.
ProductSeries series = specStore.makeSeries(TradeName.HP, ProductGroup.MISC, "Der Name2");
ProductFamily family = specStore.makeFamily("Family 2", series);
ProductModel productModel3 = productProcessor.create(TradeName.HP, ProductGroup.DESKTOP, series, family, "ProductModel3");
assertNotNull(productModel3);
assertTrue(productModel3.getId() > 0);
assertEquals("Der Name2", productModel3.getFamily().getSeries().getName());
ProductModel productModel4 = productProcessor.create(TradeName.HP, ProductGroup.DESKTOP, series, family, "ProductModel4");
assertNotNull(productModel4);
assertTrue(productModel4.getId() > 0);
assertEquals("Der Name2", productModel4.getFamily().getSeries().getName());
}
@Test(expected = RuntimeException.class, timeout = 5000)
public void testCreateProductModellExceptionSameName() {
//Test if two Products where created with the same name that will be throw a exception
productProcessor.create(TradeName.HP, ProductGroup.DESKTOP, null, null, "ModelException");
productProcessor.create(TradeName.HP, ProductGroup.DESKTOP, null, null, "ModelException");
fail("No Exception Throw at the test \"testCreateProductModellExceptionSameName()\"");
}
@Test(expected = RuntimeException.class, timeout = 5000)
public void testCreateProductModellExceptionSameNameDifferentSeries() {
//Create a ProductSeries and persist it.
ProductSeries series = specStore.makeSeries(TradeName.HP, ProductGroup.MISC, "Die Exception2");
ProductFamily family = specStore.makeFamily("Family Exception", series);
//Test if two Products where created with the same name but different ProductSeries that will be throw a exception
productProcessor.create(TradeName.HP, ProductGroup.DESKTOP, series, family, "Model1");
productProcessor.create(TradeName.HP, ProductGroup.DESKTOP, series, family, "Model1");
fail("No Exception throw at the test \"testCreateProductModellExceptionSameNameDifferentSeries()\"");
}
//</editor-fold>
}