package eu.ggnet.dwoss.price;
import eu.ggnet.dwoss.price.PriceCoreOperation;
import eu.ggnet.dwoss.uniqueunit.entity.PriceType;
import eu.ggnet.dwoss.uniqueunit.entity.Product;
import eu.ggnet.dwoss.uniqueunit.entity.UniqueUnit;
import eu.ggnet.dwoss.uniqueunit.entity.PriceHistory;
import java.util.*;
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.mandator.api.value.Mandator;
import eu.ggnet.dwoss.receipt.gen.ReceiptGeneratorOperation;
import eu.ggnet.dwoss.customer.assist.CustomerPu;
import eu.ggnet.dwoss.spec.assist.SpecPu;
import eu.ggnet.dwoss.stock.assist.StockPu;
import eu.ggnet.dwoss.stock.assist.gen.StockGeneratorOperation;
import eu.ggnet.dwoss.uniqueunit.UniqueUnitAgent;
import eu.ggnet.dwoss.uniqueunit.assist.UniqueUnitPu;
import eu.ggnet.dwoss.uniqueunit.entity.UniqueUnit.Identifier;
import eu.ggnet.dwoss.price.engine.PriceEngineResult;
import static org.junit.Assert.*;
public class PriceCoreOperationIT {
private EJBContainer container;
@Inject
private ReceiptGeneratorOperation receiptGenerator;
@Inject
private PriceCoreOperation priceCore;
@Inject
private StockGeneratorOperation stockGenerator;
@Inject
private Mandator mandator;
@EJB
private UniqueUnitAgent uniqueUnitAgent;
@Before
public void setUp() throws NamingException {
Map<String, Object> c = new HashMap<>();
c.putAll(CustomerPu.CMP_IN_MEMORY);
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();
}
@Test
public void testStore() {
stockGenerator.makeStocksAndLocations(2);
List<UniqueUnit> generated = receiptGenerator.makeUniqueUnits(20, true, false);
// Estimate all Units
List<PriceEngineResult> pers = priceCore.loadAndCalculate(null);
final double fixedUnitPrice = 100;
final double fixedProductPrice = 50;
String fixedPriceRefurbishId = pers.get(0).getRefurbishedId();
pers.get(0).setCustomerPrice(100);
pers.get(0).setRetailerPrice(100);
pers.get(0).setUnitPriceFixed(PriceEngineResult.Change.SET);
String fixedPartNo = pers.get(3).getManufacturerPartNo();
pers.get(3).setCustomerPrice(50);
pers.get(3).setRetailerPrice(50);
pers.get(3).setManufacturerPartPriceFixed(PriceEngineResult.Change.SET);
priceCore.store(pers, "via test", "testuser", null);
UniqueUnit uniqueUnit = uniqueUnitAgent.findUnitByIdentifierEager(Identifier.REFURBISHED_ID, fixedPriceRefurbishId);
assertEquals(fixedUnitPrice, uniqueUnit.getPrice(PriceType.CUSTOMER), 0.001);
assertEquals(fixedUnitPrice, uniqueUnit.getPrice(PriceType.RETAILER), 0.001);
assertTrue("Unit should contain Flage PriceFixed" + uniqueUnit.getFlags(), uniqueUnit.getFlags().contains(UniqueUnit.Flag.PRICE_FIXED));
for (PriceHistory priceHistory : uniqueUnit.getPriceHistory()) {
assertTrue(priceHistory.getComment().contains("unitfix"));
assertEquals(fixedUnitPrice, priceHistory.getPrice(), 0.001);
assertTrue(priceHistory.getType() == PriceType.CUSTOMER || priceHistory.getType() == PriceType.RETAILER);
}
Product product = uniqueUnitAgent.findProductByPartNoEager(fixedPartNo);
assertEquals(fixedProductPrice, product.getPrice(PriceType.CUSTOMER), 0.001);
assertEquals(fixedProductPrice, product.getPrice(PriceType.RETAILER), 0.001);
assertTrue(product.getFlags().contains(Product.Flag.PRICE_FIXED));
for (PriceHistory priceHistory : product.getPriceHistory()) {
assertTrue(priceHistory.getComment().contains("productfix"));
assertEquals(fixedProductPrice, priceHistory.getPrice(), 0.001);
assertTrue(priceHistory.getType() == PriceType.CUSTOMER || priceHistory.getType() == PriceType.RETAILER);
}
}
}