package eu.ggnet.dwoss.redtape.entity; import eu.ggnet.dwoss.redtape.entity.Position; import eu.ggnet.dwoss.redtape.entity.PositionBuilder; import eu.ggnet.dwoss.redtape.entity.DocumentHistory; import eu.ggnet.dwoss.redtape.entity.Document; import java.util.Set; import javax.validation.*; import org.junit.Test; import eu.ggnet.dwoss.configuration.GlobalConfig; import eu.ggnet.dwoss.redtape.entity.Position.DefaultUi; import eu.ggnet.dwoss.redtape.entity.Position.Returns; import eu.ggnet.dwoss.rules.PositionType; import eu.ggnet.dwoss.util.validation.ConstraintViolationFormater; import static org.junit.Assert.*; /** * * @author pascal.perau, oliver.guenther */ public class PositionTest { private final static Validator V = Validation.buildDefaultValidatorFactory().getValidator(); @Test public void testEqualsContentBug() { Position p1 = new PositionBuilder().setType(PositionType.UNIT).setName("SopoNr.: 9 Seriennummer: CCCCCCCCCC12011778EEEE").setAfterTaxPrice(1428) .setPrice(1200).setAmount(1).setTax(0.19) .setDescription("Display: 21.5\" (54,61 cm), Crystal Bright, Full HD (1920x1080), 16:9, Farbe: schwarz, Videokonnektor(en) : VGA, DVI") .setBookingAccount(8401).setUniqueUnitId(9).createPosition(); Position p2 = new PositionBuilder().setType(PositionType.UNIT).setName("SopoNr.: 9 Seriennummer: CCCCCCCCCC12011778EEEE").setAfterTaxPrice(1428) .setPrice(1200).setAmount(1).setTax(0.19) .setDescription("Display: 21.5\" (54,61 cm), Crystal Bright, Full HD (1920x1080), 16:9, Farbe: schwarz, Videokonnektor(en) : VGA, DVI") .setBookingAccount(8401).setUniqueUnitId(9).createPosition(); assertTrue(p1.equalsContent(p2)); } @Test public void testEqualsContent() { Position posUnit = new PositionBuilder().setType(PositionType.UNIT).setBookingAccount(1).setName("TestUnit"). setTax(GlobalConfig.TAX).setPrice(50.0).setAfterTaxPrice(50.0).setDescription("TestUnit Description").setUniqueUnitId(1).createPosition(); //copy and equality test Position posCopy = posUnit.partialClone(); assertTrue(posCopy.equalsContent(posUnit)); //id equality test posCopy.id = 2; assertFalse(posCopy.equalsContent(posUnit)); posCopy.id = 0; assertTrue(posCopy.equalsContent(posUnit)); //type eqality test posCopy.setType(PositionType.COMMENT); assertFalse(posCopy.equalsContent(posUnit)); posCopy.setType(posUnit.getType()); assertTrue(posCopy.equalsContent(posUnit)); //bookingAccount equality test posCopy.setBookingAccount(2); assertFalse(posCopy.equalsContent(posUnit)); posCopy.setBookingAccount(posUnit.getBookingAccount()); assertTrue(posCopy.equalsContent(posUnit)); //name equality test posCopy.setName("Anderer Name"); assertFalse(posCopy.equalsContent(posUnit)); posCopy.setName(posUnit.getName()); assertTrue(posCopy.equalsContent(posUnit)); //tax equality test posCopy.setTax(1.5); assertFalse(posCopy.equalsContent(posUnit)); posCopy.setTax(posUnit.getTax()); assertTrue(posCopy.equalsContent(posUnit)); //price equality test posCopy.setPrice(25.5); assertFalse(posCopy.equalsContent(posUnit)); posCopy.setPrice(posUnit.getPrice()); assertTrue(posCopy.equalsContent(posUnit)); //afterTaxPrice equality test posCopy.setAfterTaxPrice(posCopy.getPrice() * posCopy.getTax()); assertFalse(posCopy.equalsContent(posUnit)); posCopy.setAfterTaxPrice(posUnit.getAfterTaxPrice()); assertTrue(posCopy.equalsContent(posUnit)); //description equality test posCopy.setDescription("Neue Despcription"); assertFalse(posCopy.equalsContent(posUnit)); posCopy.setDescription(posUnit.getDescription()); assertTrue(posCopy.equalsContent(posUnit)); //unitId equality test posCopy.setUniqueUnitId(2); assertFalse(posCopy.equalsContent(posUnit)); posCopy.setUniqueUnitId(posUnit.getUniqueUnitId()); assertTrue(posCopy.equalsContent(posUnit)); //document equality test posCopy.document = new Document(); assertFalse(posCopy.equalsContent(posUnit)); posCopy.document = null; assertTrue(posCopy.equalsContent(posUnit)); //ammount equality test posCopy.setAmount(3.); assertFalse(posCopy.equalsContent(posUnit)); posCopy.setAmount(posUnit.getAmount()); assertTrue(posCopy.equalsContent(posUnit)); } @Test public void testDefaultValidation() { Position p = new Position(); assertFalse("Position must be invalid.", V.validate(p).isEmpty()); Document doc = new Document(); doc.setDirective(Document.Directive.NONE); doc.setHistory(new DocumentHistory("Hans", "Info")); doc.append(p); assertFalse("Position must be invalid.", V.validate(p).isEmpty()); p.setType(PositionType.UNIT); assertFalse("Position must be invalid.", V.validate(p).isEmpty()); p.setPrice(1); assertFalse("Position must be invalid.", V.validate(p).isEmpty()); p.setAfterTaxPrice(1); assertFalse("Position must be invalid.", V.validate(p).isEmpty()); p.setAmount(1); assertFalse("Position must be invalid.", V.validate(p).isEmpty()); p.setTax(1); assertFalse("Position must be invalid.", V.validate(p).isEmpty()); p.setUniqueUnitId(1); assertFalse("Position must be invalid.", V.validate(p).isEmpty()); p.setUniqueUnitProductId(1); assertFalse("Position must be invalid.", V.validate(p).isEmpty()); p.setName("Name"); assertFalse("Position must be invalid.", V.validate(p).isEmpty()); p.setDescription("Blub"); assertTrue("Position must be valid! " + ConstraintViolationFormater.toSingleLine(V.validate(p)), V.validate(p).isEmpty()); } //<editor-fold defaultstate="collapsed" desc="Test Positions with Validation Group DefaultUi"> @Test public void testDefaultUiUnitValid() { Position p = makeValidDefaultUiUnit(); Set<ConstraintViolation<Position>> violations = V.validate(p, DefaultUi.class); assertTrue("Position must be valid for group " + DefaultUi.class + ", but is not. " + ConstraintViolationFormater.toSingleLine(violations), violations.isEmpty()); violations = V.validate(p); assertFalse("Position must be invalid for group default, but is valid.", violations.isEmpty()); } @Test public void testDefaultUiServiceValid() { Position p = makeValidDefaultUiService(); Set<ConstraintViolation<Position>> violations = V.validate(p, DefaultUi.class); assertTrue("Position must be valid for group " + DefaultUi.class + ", but is not. " + ConstraintViolationFormater.toSingleLine(violations), violations.isEmpty()); violations = V.validate(p); assertFalse("Position must be invalid for group default, but is valid.", violations.isEmpty()); } @Test public void testDefaultUiUnitInvalidPriceZero() { Position p = makeValidDefaultUiUnit(); p.setPrice(0); assertFalse("Position must be invalid for group " + DefaultUi.class + ", but is valid.", V.validate(p, DefaultUi.class).isEmpty()); } @Test public void testDefaultUiUnitInvalidAfterTaxPriceZero() { Position p = makeValidDefaultUiUnit(); p.setAfterTaxPrice(0); assertFalse("Position must be invalid for group " + DefaultUi.class + ", but is valid.", V.validate(p, DefaultUi.class).isEmpty()); } @Test public void testDefaultUiUnitInvalidAmount() { Position p = makeValidDefaultUiUnit(); p.setAmount(2); assertFalse("Position must be invalid for group " + DefaultUi.class + ", but is valid.", V.validate(p, DefaultUi.class).isEmpty()); } @Test public void testDefaultUiUnitInvalidUniqueUnitId() { Position p = makeValidDefaultUiUnit(); p.setUniqueUnitId(0); assertFalse("Position must be invalid for group " + DefaultUi.class + ", but is valid.", V.validate(p, DefaultUi.class).isEmpty()); } @Test public void testDefaultUiUnitInvalidProductId() { Position p = makeValidDefaultUiUnit(); p.setUniqueUnitProductId(0); assertFalse("Position must be invalid for group " + DefaultUi.class + ", but is valid.", V.validate(p, DefaultUi.class).isEmpty()); } @Test public void testDefaultUiServiceInvalidPriceZero() { Position p = makeValidDefaultUiService(); p.setPrice(0); assertFalse("Position must be invalid for group " + DefaultUi.class + ", but is valid.", V.validate(p, DefaultUi.class).isEmpty()); } @Test public void testDefaultUiServiceInvalidAfterTaxPriceZero() { Position p = makeValidDefaultUiService(); p.setAfterTaxPrice(0); assertFalse("Position must be invalid for group " + DefaultUi.class + ", but is valid.", V.validate(p, DefaultUi.class).isEmpty()); } @Test public void testDefaultUiServiceInvalidTax() { Position p = makeValidDefaultUiService(); p.setTax(0); assertFalse("Position must be invalid for group " + DefaultUi.class + ", but is valid.", V.validate(p, DefaultUi.class).isEmpty()); } @Test public void testDefaultUiServiceInvalidAmount() { Position p = makeValidDefaultUiService(); p.setAmount(0); assertFalse("Position must be invalid for group " + DefaultUi.class + ", but is valid.", V.validate(p, DefaultUi.class).isEmpty()); } @Test public void testDefaultUiUnitInvalidName() { Position p = makeValidDefaultUiUnit(); p.setName(null); assertFalse("Position must be invalid for group " + DefaultUi.class + ", but is valid.", V.validate(p, DefaultUi.class).isEmpty()); } @Test public void testDefaultUiUnitInvalidDescription() { Position p = makeValidDefaultUiUnit(); p.setDescription(null); assertFalse("Position must be invalid for group " + DefaultUi.class + ", but is valid.", V.validate(p, DefaultUi.class).isEmpty()); } //</editor-fold> //<editor-fold defaultstate="collapsed" desc="Test Positions with Validation Group Returns"> @Test public void testReturnsUnitValid() { Position p = makeValidReturnsUnit(); Set<ConstraintViolation<Position>> violations = V.validate(p, Returns.class); assertTrue("Position must be valid for group " + Returns.class + ", but is not. " + ConstraintViolationFormater.toSingleLine(violations), violations.isEmpty()); violations = V.validate(p); assertFalse("Position must be invalid for group default, but is valid.", violations.isEmpty()); } @Test public void testReturnsServiceValid() { Position p = makeValidReturnsService(); Set<ConstraintViolation<Position>> violations = V.validate(p, Returns.class); assertTrue("Position must be valid for group " + Returns.class + ", but is not. " + ConstraintViolationFormater.toSingleLine(violations), violations.isEmpty()); violations = V.validate(p); assertFalse("Position must be invalid for group default, but is valid.", violations.isEmpty()); } @Test public void testReturnsUnitInvalidPriceNotZero() { Position p = makeValidReturnsUnit(); p.setPrice(1); assertFalse("Position must be invalid for group " + Returns.class + ", but is valid.", V.validate(p, Returns.class).isEmpty()); } @Test public void testReturnsUnitInvalidAfterTaxPriceNotZero() { Position p = makeValidReturnsUnit(); p.setAfterTaxPrice(1); assertFalse("Position must be invalid for group " + Returns.class + ", but is valid.", V.validate(p, Returns.class).isEmpty()); } @Test public void testReturnsUnitInvalidAmount() { Position p = makeValidReturnsUnit(); p.setAmount(2); assertFalse("Position must be invalid for group " + Returns.class + ", but is valid.", V.validate(p, Returns.class).isEmpty()); } @Test public void testReturnsUnitInvalidUniqueUnitId() { Position p = makeValidReturnsUnit(); p.setUniqueUnitId(0); assertFalse("Position must be invalid for group " + Returns.class + ", but is valid.", V.validate(p, Returns.class).isEmpty()); } @Test public void testReturnsUnitInvalidProductId() { Position p = makeValidReturnsUnit(); p.setUniqueUnitProductId(0); assertFalse("Position must be invalid for group " + Returns.class + ", but is valid.", V.validate(p, Returns.class).isEmpty()); } @Test public void testReturnsServiceInvalidPriceZero() { Position p = makeValidReturnsService(); p.setPrice(0); assertFalse("Position must be invalid for group " + Returns.class + ", but is valid.", V.validate(p, Returns.class).isEmpty()); } @Test public void testReturnsServiceInvalidAfterTaxPriceZero() { Position p = makeValidReturnsService(); p.setAfterTaxPrice(0); assertFalse("Position must be invalid for group " + Returns.class + ", but is valid.", V.validate(p, Returns.class).isEmpty()); } @Test public void testReturnsServiceInvalidTax() { Position p = makeValidReturnsService(); p.setTax(0); assertFalse("Position must be invalid for group " + Returns.class + ", but is valid.", V.validate(p, Returns.class).isEmpty()); } @Test public void testReturnsServiceInvalidAmount() { Position p = makeValidReturnsService(); p.setAmount(0); assertFalse("Position must be invalid for group " + Returns.class + ", but is valid.", V.validate(p, Returns.class).isEmpty()); } @Test public void testReturnsUnitInvalidName() { Position p = makeValidReturnsUnit(); p.setName(null); assertFalse("Position must be invalid for group " + Returns.class + ", but is valid.", V.validate(p, Returns.class).isEmpty()); } @Test public void testReturnsUnitInvalidDescription() { Position p = makeValidReturnsUnit(); p.setDescription(null); assertFalse("Position must be invalid for group " + Returns.class + ", but is valid.", V.validate(p, Returns.class).isEmpty()); } //</editor-fold> //<editor-fold defaultstate="collapsed" desc="Make Positions"> private Position makeValidDefaultUiUnit() { Position p = new Position(); p.setType(PositionType.UNIT); p.setPrice(1); p.setAfterTaxPrice(1); p.setAmount(1); p.setTax(1); p.setUniqueUnitId(1); p.setUniqueUnitProductId(1); p.setName("Name"); p.setDescription("Blub"); return p; } private Position makeValidDefaultUiService() { Position p = new Position(); p.setType(PositionType.SERVICE); p.setPrice(1); p.setAfterTaxPrice(1); p.setAmount(1); p.setTax(1); p.setName("Name"); p.setDescription("Blub"); return p; } private Position makeValidReturnsUnit() { Position p = new Position(); p.setType(PositionType.UNIT); p.setPrice(0); p.setAfterTaxPrice(0); p.setAmount(1); p.setTax(0); p.setUniqueUnitId(1); p.setUniqueUnitProductId(1); p.setName("Name"); p.setDescription("Blub"); return p; } private Position makeValidReturnsService() { Position p = new Position(); p.setType(PositionType.SERVICE); p.setPrice(1); p.setAfterTaxPrice(1); p.setAmount(1); p.setTax(1); p.setName("Name"); p.setDescription("Blub"); return p; } //</editor-fold> }