package lt.emasina.resthub;
import java.io.IOException;
import java.util.List;
import javax.xml.bind.JAXBException;
import lt.emasina.resthub.TableFactory;
import lt.emasina.resthub.factory.XmlClasspathFactory;
import lt.emasina.resthub.model.MdTable;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import static junit.framework.TestCase.assertTrue;
import static junit.framework.TestCase.assertEquals;
import static junit.framework.TestCase.assertNotNull;
import static junit.framework.TestCase.assertNull;
import lt.emasina.resthub.model.MdColumn;
import lt.emasina.resthub.model.MdParameter;
import lt.emasina.resthub.model.MdType;
import org.xml.sax.SAXException;
/**
* XmlTableFactoryTest
* @author valdo
*/
@RunWith(JUnit4.class)
public class XmlTableFactoryTest {
private final TableFactory tf;
public XmlTableFactoryTest() throws IOException, SAXException, JAXBException {
this.tf = new XmlClasspathFactory("lt.emasina.resthub.xml");
}
private MdTable getTable(String namespace, String name) throws Exception {
for (MdTable t: tf.getTables()) {
if (t.getNamespace().equals(namespace) && t.getName().equals(name)) {
return t;
}
}
return null;
}
@Test
public void allXMLTests() throws Exception {
List<MdTable> tables = this.tf.getTables();
assertTrue(tables.size() > 0);
// sql01.xml
MdTable t = getTable("Lorem", "ipsum");
assertNull(t);
t = getTable("lorem", "ipsum");
assertNotNull(t);
assertEquals("lorem", t.getNamespace());
assertEquals("ipsum", t.getName());
assertEquals((Integer) 1, t.getHitCount());
assertEquals((Integer) 0, t.getCacheTime());
assertEquals((Integer) 30, t.getTimeout());
assertEquals((Integer) 1000, t.getRowsLimit());
assertEquals("amet", t.getConnectionName());
assertEquals((int) 6, t.getMetadata().size());
assertEquals("lt/emasina/resthub/xml/sql01.xml", t.getMetadata().get("Source"));
assertEquals("Lorem ipsum dolor sit amet", t.getMetadata().get("sit"));
assertNotNull(t.getSql());
assertEquals((int) 1, t.getParameters().size());
assertEquals((int) 0, t.getColumns().size());
MdParameter p = t.getParameters().get(0);
assertEquals("param", p.getName());
assertEquals(MdType.NUMBER, p.getType());
assertEquals(Boolean.FALSE, p.getArray());
// sql02.xml
t = getTable("wrong", "xml");
assertNull(t);
// sql03.xml
t = getTable("complete", "example");
assertNotNull(t);
assertEquals("complete", t.getNamespace());
assertEquals("example", t.getName());
assertEquals((Integer) 1, t.getHitCount());
assertEquals((Integer) 120, t.getCacheTime());
assertEquals((Integer) 30, t.getTimeout());
assertEquals((Integer) 1000, t.getRowsLimit());
assertEquals("default", t.getConnectionName());
assertEquals((int) 2, t.getMetadata().size());
assertEquals("lt/emasina/resthub/xml/sql03.xml", t.getMetadata().get("Source"));
assertEquals("Complete example", t.getMetadata().get("description"));
assertNotNull(t.getSql());
assertEquals((int) 2, t.getParameters().size());
assertEquals((int) 2, t.getColumns().size());
p = t.getParameters().get(0);
assertEquals("p1", p.getName());
assertEquals(MdType.NUMBER, p.getType());
assertEquals(Boolean.FALSE, p.getArray());
assertEquals((int) 1, p.getMetadata().size());
assertEquals("metadata", p.getMetadata().get("description"));
p = t.getParameters().get(1);
assertEquals("p2", p.getName());
assertEquals(MdType.STRING, p.getType());
assertEquals(Boolean.TRUE, p.getArray());
assertEquals((int) 1, p.getMetadata().size());
assertEquals("metadata", p.getMetadata().get("description"));
MdColumn c = t.getColumns().get(0);
assertEquals("c1", c.getName());
assertEquals(MdType.NUMBER, c.getType());
assertNull(c.getTable());
assertEquals((int) 1, c.getMetadata().size());
assertEquals("metadata", c.getMetadata().get("description"));
c = t.getColumns().get(1);
assertEquals("c2", c.getName());
assertEquals(MdType.STRING, c.getType());
assertNull(c.getTable());
assertEquals((int) 1, c.getMetadata().size());
assertEquals("metadata", c.getMetadata().get("description"));
}
}