diff --git a/pom.xml b/pom.xml index 5667370..eb579b7 100644 --- a/pom.xml +++ b/pom.xml @@ -1,6 +1,6 @@ - + 4.0.0 KoSIT XML Prüftool Implementierung @@ -117,6 +117,12 @@ 3.3.0 test + + org.mockito + mockito-core + 3.2.4 + test + de.kosit.validationtool packaged-test-scenarios diff --git a/src/main/java/de/kosit/validationtool/impl/model/BaseScenario.java b/src/main/java/de/kosit/validationtool/impl/model/BaseScenario.java index 71c723f..510f636 100644 --- a/src/main/java/de/kosit/validationtool/impl/model/BaseScenario.java +++ b/src/main/java/de/kosit/validationtool/impl/model/BaseScenario.java @@ -69,9 +69,15 @@ public abstract class BaseScenario { private XPathExecutable matchExecutable; private XPathExecutable acceptExecutable; + + @Setter private Schema schema; + + @Setter private List schematronValidations; + private ContentRepository repository; + private Transformation reportTransformation; /** diff --git a/src/test/java/de/kosit/validationtool/impl/tasks/SchemaValidatorActionTest.java b/src/test/java/de/kosit/validationtool/impl/tasks/SchemaValidatorActionTest.java index c41d726..d720475 100644 --- a/src/test/java/de/kosit/validationtool/impl/tasks/SchemaValidatorActionTest.java +++ b/src/test/java/de/kosit/validationtool/impl/tasks/SchemaValidatorActionTest.java @@ -19,34 +19,36 @@ package de.kosit.validationtool.impl.tasks; +import static de.kosit.validationtool.impl.tasks.TestBagBuilder.createBag; import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.doThrow; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; +import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; import java.net.MalformedURLException; -import java.net.URI; import javax.xml.transform.stream.StreamSource; import javax.xml.validation.Schema; +import javax.xml.validation.Validator; import org.junit.Before; import org.junit.Test; import org.junit.rules.ExpectedException; +import org.xml.sax.SAXException; import de.kosit.validationtool.api.Input; import de.kosit.validationtool.api.InputFactory; import de.kosit.validationtool.impl.ContentRepository; -import de.kosit.validationtool.impl.Helper; import de.kosit.validationtool.impl.Helper.Simple; import de.kosit.validationtool.impl.ObjectFactory; import de.kosit.validationtool.impl.input.SourceInput; -import de.kosit.validationtool.impl.model.Result; import de.kosit.validationtool.impl.tasks.CheckAction.Bag; -import de.kosit.validationtool.model.reportInput.CreateReportInput; -import de.kosit.validationtool.model.scenarios.ResourceType; import de.kosit.validationtool.model.scenarios.ScenarioType; -import de.kosit.validationtool.model.scenarios.ValidateWithXmlSchema; /** * Tests die {@link SchemaValidationAction}. @@ -59,15 +61,11 @@ public class SchemaValidatorActionTest { private SchemaValidationAction service; - private ContentRepository repository; - @Before public void setup() { this.service = new SchemaValidationAction(); - this.repository = new ContentRepository(ObjectFactory.createProcessor(), Simple.REPOSITORY); } - @Test public void testSimple() throws MalformedURLException { final CheckAction.Bag bag = createBag(InputFactory.read(Simple.SIMPLE_VALID.toURL())); @@ -83,33 +81,15 @@ public class SchemaValidatorActionTest { final CheckAction.Bag bag = createBag(input); this.service.check(bag); assertThat(bag.getSchemaValidationResult().isValid()).isFalse(); - bag.getSchemaValidationResult().getErrors().forEach(e->{ + bag.getSchemaValidationResult().getErrors().forEach(e -> { assertThat(e.getRowNumber()).isGreaterThan(0); assertThat(e.getColumnNumber()).isGreaterThan(0); }); } - private Bag createBag(final Input input) { - final Bag bag = new Bag(input, new CreateReportInput()); - bag.setScenarioSelectionResult(new Result<>(createScenario(Helper.Simple.getSchemaLocation()))); - return bag; - } - - private ScenarioType createScenario(final URI schemafile) { - final ScenarioType t = new ScenarioType(); - final ValidateWithXmlSchema v = new ValidateWithXmlSchema(); - final ResourceType r = new ResourceType(); - r.setLocation(schemafile.getRawPath()); - r.setName("invoice"); - v.getResource().add(r); - t.setValidateWithXmlSchema(v); - t.initialize(this.repository, true); - return t; - } - @Test public void testSchemaReferences() { - final Schema reportInputSchema = this.repository.getReportInputSchema(); + final Schema reportInputSchema = new ContentRepository(ObjectFactory.createProcessor(), Simple.REPOSITORY).getReportInputSchema(); assertThat(reportInputSchema).isNotNull(); } @@ -171,4 +151,17 @@ public class SchemaValidatorActionTest { } } + @Test + public void testProcessingError() throws IOException, SAXException { + final CheckAction.Bag bag = createBag(InputFactory.read(Simple.SIMPLE_VALID.toURL())); + final ScenarioType scenario = bag.getScenarioSelectionResult().getObject(); + final Schema schema = mock(Schema.class); + final Validator validator = mock(Validator.class); + when(schema.newValidator()).thenReturn(validator); + doThrow(SAXException.class).when(validator).validate(any()); + scenario.setSchema(schema); + this.service.check(bag); + assertThat(bag.getReportInput().getProcessingError().getError()).isNotEmpty(); + } + } diff --git a/src/test/java/de/kosit/validationtool/impl/tasks/SchematronValidationActionTest.java b/src/test/java/de/kosit/validationtool/impl/tasks/SchematronValidationActionTest.java new file mode 100644 index 0000000..6a9a868 --- /dev/null +++ b/src/test/java/de/kosit/validationtool/impl/tasks/SchematronValidationActionTest.java @@ -0,0 +1,58 @@ +package de.kosit.validationtool.impl.tasks; + +import static de.kosit.validationtool.impl.tasks.TestBagBuilder.createBag; +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.doThrow; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import java.io.IOException; +import java.util.Collections; + +import org.junit.Before; +import org.junit.Test; + +import de.kosit.validationtool.api.InputFactory; +import de.kosit.validationtool.impl.ContentRepository; +import de.kosit.validationtool.impl.ConversionService; +import de.kosit.validationtool.impl.Helper.Simple; +import de.kosit.validationtool.impl.ObjectFactory; +import de.kosit.validationtool.impl.model.BaseScenario.Transformation; +import de.kosit.validationtool.model.scenarios.ResourceType; +import de.kosit.validationtool.model.scenarios.ScenarioType; + +import net.sf.saxon.s9api.SaxonApiException; +import net.sf.saxon.s9api.XsltExecutable; +import net.sf.saxon.s9api.XsltTransformer; + +/** + * Tests {@link SchematronValidationAction}. + * + * @author Andreas Penski + */ +public class SchematronValidationActionTest { + + private SchematronValidationAction action; + + @Before + public void setup() { + final ContentRepository repository = new ContentRepository(ObjectFactory.createProcessor(), Simple.REPOSITORY); + this.action = new SchematronValidationAction(repository, new ConversionService()); + } + + @Test + public void testProcessingError() throws IOException, SaxonApiException { + final CheckAction.Bag bag = createBag(InputFactory.read(Simple.SIMPLE_VALID.toURL()), true); + + final ScenarioType scenario = bag.getScenarioSelectionResult().getObject(); + final XsltExecutable exec = mock(XsltExecutable.class); + final XsltTransformer transformer = mock(XsltTransformer.class); + doThrow(new SaxonApiException("invalid")).when(transformer).transform(); + when(exec.load()).thenReturn(transformer); + final ResourceType resourceType = new ResourceType(); + resourceType.setName("invalid internal"); + scenario.setSchematronValidations(Collections.singletonList(new Transformation(exec, resourceType))); + this.action.check(bag); + assertThat(bag.getReportInput().getProcessingError().getError()).isNotEmpty(); + } +} diff --git a/src/test/java/de/kosit/validationtool/impl/tasks/TestBagBuilder.java b/src/test/java/de/kosit/validationtool/impl/tasks/TestBagBuilder.java new file mode 100644 index 0000000..2594786 --- /dev/null +++ b/src/test/java/de/kosit/validationtool/impl/tasks/TestBagBuilder.java @@ -0,0 +1,49 @@ +package de.kosit.validationtool.impl.tasks; + +import java.net.URI; + +import de.kosit.validationtool.api.Input; +import de.kosit.validationtool.impl.ContentRepository; +import de.kosit.validationtool.impl.Helper; +import de.kosit.validationtool.impl.Helper.Simple; +import de.kosit.validationtool.impl.ObjectFactory; +import de.kosit.validationtool.impl.model.Result; +import de.kosit.validationtool.impl.tasks.CheckAction.Bag; +import de.kosit.validationtool.model.reportInput.CreateReportInput; +import de.kosit.validationtool.model.scenarios.ResourceType; +import de.kosit.validationtool.model.scenarios.ScenarioType; +import de.kosit.validationtool.model.scenarios.ValidateWithXmlSchema; + +/** + * Utilities for creating test objects. + * + * @author Andreas Penski + */ +public class TestBagBuilder { + + public static Bag createBag(final Input input) { + return createBag(input, false); + } + + public static Bag createBag(final Input input, final boolean parse) { + final Bag bag = new Bag(input, new CreateReportInput()); + if (parse) { + bag.setParserResult(DocumentParseAction.parseDocument(bag.getInput())); + } + bag.setScenarioSelectionResult(new Result<>(createScenario(Helper.Simple.getSchemaLocation()))); + return bag; + } + + private static ScenarioType createScenario(final URI schemafile) { + final ContentRepository repository = new ContentRepository(ObjectFactory.createProcessor(), Simple.REPOSITORY); + final ScenarioType t = new ScenarioType(); + final ValidateWithXmlSchema v = new ValidateWithXmlSchema(); + final ResourceType r = new ResourceType(); + r.setLocation(schemafile.getRawPath()); + r.setName("invoice"); + v.getResource().add(r); + t.setValidateWithXmlSchema(v); + t.initialize(repository, true); + return t; + } +}