package eu.ggnet.dwoss.redtape;
import eu.ggnet.dwoss.rules.PositionType;
import eu.ggnet.dwoss.rules.AddressType;
import eu.ggnet.dwoss.redtape.entity.PositionBuilder;
import eu.ggnet.dwoss.redtape.entity.Position;
import eu.ggnet.dwoss.redtape.entity.Document;
import eu.ggnet.dwoss.redtape.entity.Dossier;
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.customer.assist.CustomerPu;
import eu.ggnet.dwoss.customer.assist.gen.CustomerGeneratorOperation;
import eu.ggnet.dwoss.event.AddressChange;
import eu.ggnet.dwoss.redtape.RedTapeAgent;
import eu.ggnet.dwoss.redtape.assist.RedTapePu;
import eu.ggnet.dwoss.stock.assist.StockPu;
import static org.junit.Assert.*;
/**
*
* @author pascal.perau
*/
public class RedTapeAddressOperationIT {
private EJBContainer container;
private long customerId;
private final String arranger = "JUnitTest";
@EJB
private RedTapeAgent redTapeAgent;
@EJB
private RedTapeWorker redTapeWorker;
@Inject
private CustomerGeneratorOperation cgo;
@Before
public void setUp() throws NamingException {
Map<String, Object> c = new HashMap<>();
c.putAll(CustomerPu.CMP_IN_MEMORY);
c.putAll(StockPu.CMP_IN_MEMORY);
c.putAll(RedTapePu.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);
// cgo.makeSystemCustomers(); // Probably don't need this.
customerId = cgo.makeCustomer();
}
@After
public void tearDown() {
container.close();
}
@Test
public void testAdressChanges() {
Dossier dos = redTapeWorker.create(customerId, false, arranger);
Document doc = dos.getActiveDocuments().get(0);
addRandomPositions(doc);
doc = redTapeWorker.update(doc, null, arranger);
//start assertion
assertEquals(doc.getInvoiceAddress(), redTapeWorker.requestAdressesByCustomer(customerId).getInvoice());
//change adress and assert the changes
cgo.scrambleAddress(customerId, AddressType.INVOICE);
assertFalse(doc.getInvoiceAddress().equals(redTapeWorker.requestAdressesByCustomer(customerId).getInvoice()));
//update adresses to all document adresses and assert changes
redTapeWorker.updateAllDocumentAdresses(new AddressChange(customerId, "Test", AddressType.INVOICE, "", ""));
doc = redTapeAgent.findByIdEager(Dossier.class, dos.getId()).getActiveDocuments().get(0);
assertEquals(doc.getInvoiceAddress(), redTapeWorker.requestAdressesByCustomer(customerId).getInvoice());
}
private void addRandomPositions(Document doc) {
Position p1 = new PositionBuilder().setType(PositionType.COMMENT).setName("Comment").setDescription("Comments Description").createPosition();
Position p2 = new PositionBuilder().setType(PositionType.SERVICE).setName("Service").setPrice(2.).setTax(2.).
setAfterTaxPrice(2.2).setAmount(1.).setDescription("Service Description").createPosition();
Position p3 = new PositionBuilder().setType(PositionType.SHIPPING_COST).setName("Shipping cost").setDescription("Shipping cost")
.setPrice(16.5).setTax(.19).setAfterTaxPrice(16.5 * 1.19).createPosition();
doc.append(p1);
doc.append(p2);
doc.append(p3);
}
}