package eu.ggnet.dwoss.stock.entity; import java.util.Date; import java.util.Set; import javax.validation.*; import org.junit.Test; import static eu.ggnet.dwoss.stock.entity.StockTransactionStatusType.*; import static org.junit.Assert.*; /** * */ public class ValidationTest { private final Validator validator = Validation.buildDefaultValidatorFactory().getValidator(); @Test public void testStockUnit() { StockUnit su = new StockUnit("Bla", 0); Set<? extends ConstraintViolation> violations = validator.validate(su); if ( violations.isEmpty() ) fail("No violation, but StockUnit has neither Stock nor Position"); Stock s = new Stock(1, "Teststock"); su.setStock(s); violations = validator.validate(su); if ( !violations.isEmpty() ) fail("Violation, but StockUnit has Stock. msg: " + buildMessage(violations)); su.setStock(null); violations = validator.validate(su); if ( violations.isEmpty() ) fail("No violation, but StockUnit has neither Stock nor Position"); StockTransactionPosition stp = new StockTransactionPosition(su); if ( validator.validate(su).isEmpty() ) fail("No violation, but StockUnit has invalid Position"); StockTransaction t = new StockTransaction(); t.addPosition(stp); if ( validator.validate(su).isEmpty() ) fail("No violation, but StockTransaction is still invalid (no status, no type)"); t.addStatus(new StockTransactionStatus(StockTransactionStatusType.PREPARED, new Date())); if ( validator.validate(su).isEmpty() ) fail("No violation, but StockTransaction is still invalid (no type)"); t.setType(StockTransactionType.TRANSFER); violations = validator.validate(su); if ( !violations.isEmpty() ) fail("Violation, but StockUnit has valid Position and Transaction. msg: " + buildMessage(violations)); su.setStock(s); violations = validator.validate(su); if ( !violations.isEmpty() ) fail("Violation, Special Case: StockUnit has Stock and Transaction(Prepared) which is ok. msg: " + buildMessage(violations)); t.addStatus(new StockTransactionStatus(StockTransactionStatusType.COMMISSIONED, new Date())); if ( validator.validate(su).isEmpty() ) fail("No violation, but now StockUnit has Stock and StockTransaction( not prepared), which is not ok."); } @Test public void testValidTransaction() { StockTransaction t1 = new StockTransaction(); t1.setType(StockTransactionType.TRANSFER); t1.addStatus(new StockTransactionStatus(PREPARED, new Date())); t1.addStatus(new StockTransactionStatus(COMMISSIONED, new Date())); t1.addStatus(new StockTransactionStatus(IN_TRANSFER, new Date())); t1.addStatus(new StockTransactionStatus(RECEIVED, new Date())); assertNull("Asserted null but it was:" + t1.getValidationViolations(), t1.getValidationViolations()); t1.addStatus(new StockTransactionStatus(RECEIVED, new Date())); assertNotNull(t1.getValidationViolations()); } private String buildMessage(Set<? extends ConstraintViolation> violations) { StringBuilder sb = new StringBuilder(); for (ConstraintViolation violation : violations) { if ( violation.getPropertyPath().toString().endsWith("validationViolations") ) { sb.append(violation.getInvalidValue().toString()); } else { sb.append("Validation Violation: ").append(violation.getPropertyPath()).append("=").append(violation.getInvalidValue()).append(",").append(violation.getMessage()); } } return sb.toString(); } }