package eu.ggnet.dwoss.redtape.entity; import eu.ggnet.dwoss.redtape.entity.Dossier; import eu.ggnet.dwoss.redtape.entity.PositionBuilder; import eu.ggnet.dwoss.redtape.entity.DocumentHistory; import eu.ggnet.dwoss.redtape.entity.Address; import eu.ggnet.dwoss.redtape.entity.Document; import eu.ggnet.dwoss.rules.PositionType; import org.junit.After; import org.junit.Before; import org.junit.Test; import eu.ggnet.dwoss.rules.DocumentType; import eu.ggnet.dwoss.rules.PaymentMethod; import static org.junit.Assert.*; /** * * @author pascal.perau */ public class DocumentExactlyBriefedTest { private Document doc1; private Document doc2; @Before public void setUp() { Address a1 = new Address("ShippingAddress"); Address a2 = new Address("InvoiceAddress"); doc1 = new Document(); doc1.setShippingAddress(a1); doc1.setInvoiceAddress(a2); doc1.setType(DocumentType.ORDER); doc1.add(Document.Flag.CUSTOMER_BRIEFED); doc1.setDossier(new Dossier()); doc1.append(new PositionBuilder().setType(PositionType.UNIT).createPosition()); doc2 = doc1.partialClone(); doc2.setDossier(new Dossier()); } @After public void tearDown() { doc1 = null; doc2 = null; } @Test public void testPositionChange() { assertTrue("Documents difference must not invalidate exactly briefed:\n" + doc1 + "\n" + doc2, doc1.isStillExactlyBriefed(doc2)); doc2.append(new PositionBuilder().setType(PositionType.UNIT).createPosition()); doc2.append(new PositionBuilder().setType(PositionType.UNIT).createPosition()); assertFalse("Position change must invalidate exactly briefed:\n" + doc1 + "\n" + doc2, doc1.isStillExactlyBriefed(doc2)); } @Test public void testDispatchChange() { assertTrue("Documents difference must not invalidate exactly briefed:\n" + doc1 + "\n" + doc2, doc1.isStillExactlyBriefed(doc2)); doc1.getDossier().setDispatch(!doc1.getDossier().isDispatch()); assertFalse("Dispatch change must invalidate exactly briefed:\n" + doc1 + "\n" + doc2, doc1.isStillExactlyBriefed(doc2)); } @Test public void testPaymentMethodChange() { assertTrue("Documents difference must not invalidate exactly briefed:\n" + doc1 + "\n" + doc2, doc1.isStillExactlyBriefed(doc2)); assertFalse(doc2.getDossier().getPaymentMethod() == PaymentMethod.CASH_ON_DELIVERY); doc1.getDossier().setPaymentMethod(PaymentMethod.CASH_ON_DELIVERY); assertFalse("PaymentMethod change must invalidate exactly briefed:\n" + doc1 + "\n" + doc2, doc1.isStillExactlyBriefed(doc2)); } @Test public void testTypeChange() { assertTrue("Documents difference must not invalidate exactly briefed:\n" + doc1 + "\n" + doc2, doc1.isStillExactlyBriefed(doc2)); assertFalse(doc2.getType() == DocumentType.INVOICE); doc1.setType(DocumentType.INVOICE); assertFalse("Type change must invalidate exactly briefed:\n" + doc1 + "\n" + doc2, doc1.isStillExactlyBriefed(doc2)); } @Test public void testInvoiceAddressChange() { assertTrue("Documents difference must not invalidate exactly briefed:\n" + doc1 + "\n" + doc2, doc1.isStillExactlyBriefed(doc2)); doc1.setInvoiceAddress(new Address("MuhBlub")); assertFalse("Invoice Address change must invalidate exactly briefed:\n" + doc1 + "\n" + doc2, doc1.isStillExactlyBriefed(doc2)); } @Test public void testShippingAddressChange() { assertTrue("Documents difference must not invalidate exactly briefed:\n" + doc1 + "\n" + doc2, doc1.isStillExactlyBriefed(doc2)); doc1.setShippingAddress(new Address("MuhBlub")); assertFalse("Shipping Address change must invalidate exactly briefed:\n" + doc1 + "\n" + doc2, doc1.isStillExactlyBriefed(doc2)); } @Test public void testChangesWithNoImpact() { assertTrue("Documents difference must not invalidate exactly briefed:\n" + doc1 + "\n" + doc2, doc1.isStillExactlyBriefed(doc2)); doc1.setActive(!doc2.isActive()); assertTrue("Active change must not invalidate exactly briefed:\n" + doc1 + "\n" + doc2, doc1.isStillExactlyBriefed(doc2)); doc1.setHistory(new DocumentHistory("Junit", "Test")); assertTrue("History change must not invalidate exactly briefed:\n" + doc1 + "\n" + doc2, doc1.isStillExactlyBriefed(doc2)); doc1.setPredecessor(doc2); assertTrue("Predecessor change must not invalidate exactly briefed:\n" + doc1 + "\n" + doc2, doc1.isStillExactlyBriefed(doc2)); doc1.setClosed(true); assertFalse("Documents must have different Flags", doc1.isClosed() == doc2.isClosed()); assertTrue("Flag change must not invalidate exactly briefed:\n" + doc1 + "\n" + doc2, doc1.isStillExactlyBriefed(doc2)); doc1.add(Document.Condition.CONFIRMED); assertFalse("Documents must have different Conditions", doc1.getConditions().equals(doc2.getConditions())); assertTrue("Condition change must not invalidate exactly briefed:\n" + doc1 + "\n" + doc2, doc1.isStillExactlyBriefed(doc2)); doc1.setDirective(Document.Directive.PREPARE_SHIPPING); assertFalse("Documents must have different Directives", doc1.getDirective().equals(doc2.getDirective())); assertTrue("Directive change must not invalidate exactly briefed:\n" + doc1 + "\n" + doc2, doc1.isStillExactlyBriefed(doc2)); doc1.setIdentifier("Ein Identifier"); assertTrue("Identifier change must not invalidate exactly briefed:\n" + doc1 + "\n" + doc2, doc1.isStillExactlyBriefed(doc2)); } }