package eu.ggnet.dwoss.redtape.entity;
import eu.ggnet.dwoss.redtape.entity.Dossier;
import eu.ggnet.dwoss.redtape.entity.Position;
import eu.ggnet.dwoss.redtape.entity.PositionBuilder;
import eu.ggnet.dwoss.redtape.entity.Address;
import eu.ggnet.dwoss.redtape.entity.Document;
import eu.ggnet.dwoss.rules.PositionType;
import java.util.ArrayList;
import java.util.Arrays;
import org.junit.Test;
import eu.ggnet.dwoss.rules.DocumentType;
import static org.junit.Assert.*;
/**
*
* @author pascal.perau
*/
public class DocumentTest {
@Test
public void testAppend() {
Document doc = new Document();
assertEquals("Document.posistion.size", 0, doc.getPositions().size());
Position p1 = doc.append(new PositionBuilder().setType(PositionType.UNIT).createPosition());
assertEquals("Document.posistion.size", 1, doc.getPositions().size());
assertEquals(p1, doc.getPosition(p1.getId()));
doc.append(new PositionBuilder().setType(PositionType.UNIT).createPosition());
doc.append(new PositionBuilder().setType(PositionType.UNIT).createPosition());
assertEquals("Document.posistion.size", 3, doc.getPositions().size());
assertEquals("Postions order", Arrays.asList(1, 2, 3), new ArrayList<>(doc.getPositions().keySet()));
}
@Test
public void testRemove() {
Document doc = new Document();
Position p1 = doc.append(new PositionBuilder().setType(PositionType.UNIT).createPosition());
assertEquals("Document.posistion.size", 1, doc.getPositions().size());
doc.remove(p1);
assertEquals("Document.posistion.size", 0, doc.getPositions().size());
p1 = doc.append(new PositionBuilder().setType(PositionType.UNIT).createPosition());
doc.append(new PositionBuilder().setType(PositionType.UNIT).createPosition());
Position p3 = doc.append(new PositionBuilder().setType(PositionType.UNIT).createPosition());
doc.append(new PositionBuilder().setType(PositionType.UNIT).createPosition());
assertEquals("Document.posistion.size", 4, doc.getPositions().size());
assertEquals("Postions order", Arrays.asList(1, 2, 3, 4), new ArrayList<>(doc.getPositions().keySet()));
doc.remove(p1);
assertEquals("Document.posistion.size", 3, doc.getPositions().size());
assertEquals("Postions order", Arrays.asList(1, 2, 3), new ArrayList<>(doc.getPositions().keySet()));
assertEquals("Position p3 should have id 2", 2, p3.getId());
}
@Test
public void testPartialCloneAndEqualsContent() {
Dossier dos = new Dossier();
Address a1 = new Address("ShippingAddress");
Address a2 = new Address("InvoiceAddress");
Address a3 = new Address("Another ShippingAddress");
Address a4 = new Address("Another InvoiceAddress");
Document doc1 = new Document();
doc1.setShippingAddress(a1);
doc1.setInvoiceAddress(a2);
doc1.setType(DocumentType.ORDER);
doc1.add(Document.Flag.CUSTOMER_BRIEFED);
dos.add(doc1);
doc1.append(new PositionBuilder().setType(PositionType.UNIT).createPosition());
//copy and test equality
Document doc2 = doc1.partialClone();
doc2.setDossier(dos);
assertTrue("The following Documents are not equal:\n" + doc1 + "\n" + doc2, doc1.equalsContent(doc2));
//add and remove positions with equality test
Position p1 = doc2.append(new PositionBuilder().setType(PositionType.UNIT).createPosition());
Position p2 = doc2.append(new PositionBuilder().setType(PositionType.UNIT).createPosition());
assertFalse("Should not be equals, but is.\n- " + doc1 + "\n- " + doc2,doc1.equalsContent(doc2));
doc2.remove(p1);
doc2.remove(p2);
assertTrue(doc1.equalsContent(doc2));
//add and remove flags with equality test
doc2.setClosed(true);
assertFalse(doc1.equalsContent(doc2));
doc2.setClosed(false);
assertTrue(doc1.equalsContent(doc2));
//change Document type
doc2.setType(DocumentType.INVOICE);
assertFalse(doc1.equalsContent(doc2));
doc2.setType(DocumentType.ORDER);
assertTrue(doc1.equalsContent(doc2));
//change addresses
doc2.setShippingAddress(a3);
doc2.setInvoiceAddress(a4);
assertFalse(doc2.equalsContent(doc1));
doc2.setShippingAddress(a1);
doc2.setInvoiceAddress(a2);
assertTrue(doc2.equalsContent(doc1));
}
@Test
public void testGetPositionsByType() {
Document doc1 = new Document();
doc1.append(new PositionBuilder().setType(PositionType.UNIT).createPosition());
doc1.append(new PositionBuilder().setType(PositionType.UNIT).createPosition());
doc1.append(new PositionBuilder().setType(PositionType.UNIT).createPosition());
doc1.append(new PositionBuilder().setType(PositionType.COMMENT).createPosition());
doc1.append(new PositionBuilder().setType(PositionType.COMMENT).createPosition());
doc1.append(new PositionBuilder().setType(PositionType.SHIPPING_COST).createPosition());
assertEquals("Service Positions", 0, doc1.getPositions(PositionType.SERVICE).size());
assertEquals("Service Positions", 1, doc1.getPositions(PositionType.SHIPPING_COST).size());
assertEquals("Service Positions", 2, doc1.getPositions(PositionType.COMMENT).size());
assertEquals("Service Positions", 3, doc1.getPositions(PositionType.UNIT).size());
}
}