package io.konik.zugferd;
import io.konik.InvoiceTransformer;
import io.konik.PrittyPrintInvoiceTransformer;
import io.konik.validator.NullableNotBlankValidator;
import io.konik.zugferd.profile.ConformanceLevel;
import org.custommonkey.xmlunit.XMLUnit;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
import java.io.InputStream;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import static io.konik.validation.InvoiceValidator.resolveIntoValidationGroups;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.runners.Parameterized.Parameter;
import static org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
public class FailingXmlExamplesTest {
private static final String SAMPLES_DIR = "/fail_samples/";
private static Validator validator;
@Parameter(value = 0)
public String xmlFileName;
private InvoiceTransformer transformer = new PrittyPrintInvoiceTransformer();
@Parameters(name = "{0}")
public static Iterable<String[]> getAllIncorrectXmlFiles() {
List<String[]> files = new LinkedList<String[]>();
files.add(new String[] { "RE-20151029_4.Bestellung.xml" });
files.add(new String[] { "RE-20151029_4.xml" });
return files;
}
@BeforeClass
public static void setup() {
XMLUnit.setIgnoreWhitespace(true);
XMLUnit.setIgnoreAttributeOrder(false);
XMLUnit.setIgnoreComments(true);
//validator
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
NullableNotBlankValidator notBlankValidator = factory.getConstraintValidatorFactory().getInstance(NullableNotBlankValidator.class);
assertThat(notBlankValidator).isNotNull();
validator = factory.getValidator();
}
@Test
public void validateIncorrectXmlFiles() {
//given:
InputStream xml = getClass().getResourceAsStream(SAMPLES_DIR + xmlFileName);
//when:
Invoice invoice = transformer.toModel(xml);
ConformanceLevel conformanceLevel = invoice.getContext().getGuideline().getConformanceLevel();
Class<?>[] validationGroups = resolveIntoValidationGroups(conformanceLevel);
Set<ConstraintViolation<Invoice>> validationResult = validator.validate(invoice,validationGroups);
//then:
for (ConstraintViolation<Invoice> violation : validationResult) {
System.out.println(violation.toString());
}
assertThat(validationResult).isNotEmpty();
}
}