package gov.samhsa.acs.common.validation;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import gov.samhsa.acs.common.tool.FileReaderImpl;
import gov.samhsa.acs.common.validation.exception.InvalidXmlDocumentException;
import gov.samhsa.acs.common.validation.exception.XmlDocumentReadFailureException;
import java.io.ByteArrayInputStream;
import org.junit.Before;
import org.junit.Test;
import org.springframework.test.util.ReflectionTestUtils;
import org.xml.sax.SAXParseException;
public class XmlValidationTest {
private static final String BASE_PATH = "schema/cdar2c32/infrastructure/cda/";
private String invalidC32;
private String validC32;
private FileReaderImpl fileReader;
private XmlValidation sut;
@Before
public void setUp() throws Exception {
fileReader = new FileReaderImpl();
invalidC32 = fileReader.readFile("invalidC32.xml");
validC32 = fileReader.readFile("validC32.xml");
sut = new XmlValidation(this.getClass().getClassLoader().getResourceAsStream(BASE_PATH+"C32_CDA.xsd"), BASE_PATH);
}
@Test(expected = InvalidXmlDocumentException.class)
public void testValidateInputStream() throws InvalidXmlDocumentException, XmlDocumentReadFailureException {
assertFalse(sut.validate(invalidC32));
}
@Test
public void testXmlValidation_Initialization_Failure() {
// Act
XmlValidation xmlValidation = new XmlValidation(new ByteArrayInputStream(new byte[2]), "a");
// Assert
assertNull(ReflectionTestUtils.getField(xmlValidation, "validator"));
}
@Test
public void testValidateString() throws InvalidXmlDocumentException, XmlDocumentReadFailureException {
assertTrue(sut.validate(validC32));
}
@Test
public void testValidateWithAllErrors() throws XmlDocumentReadFailureException{
// Act
XmlValidationResult result = sut.validateWithAllErrors(invalidC32);
// Assert
assertEquals(2, result.getExceptions().size());
for(SAXParseException e: result.getExceptions()){
assertTrue(e.getMessage().contains("noSuchElement") || e.getMessage().contains("noSuchElement2"));
}
}
}