package org.geoserver.wfsv;
import static org.custommonkey.xmlunit.XMLAssert.assertXpathEvaluatesTo;
import junit.framework.Test;
import org.custommonkey.xmlunit.XMLUnit;
import org.custommonkey.xmlunit.XpathEngine;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
public class LogOrderTest extends WFSVTestSupport {
/**
* This is a READ ONLY TEST so we can use one time setup
*/
public static Test suite() {
return new OneTimeTestSetup(new LogOrderTest());
}
@Override
protected void oneTimeSetUp() throws Exception {
super.oneTimeSetUp();
if (getTestData().isTestDataAvailable()) {
// build some history the other tests will use
String transaction = //
"<wfs:Transaction service=\"WFSV\" version=\"1.0.0\"\r\n"
+ " xmlns:topp=\"http://www.openplans.org/topp\"\r\n"
+ " xmlns:ogc=\"http://www.opengis.net/ogc\" xmlns:wfs=\"http://www.opengis.net/wfs\"\r\n"
+ " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\r\n"
+ " xmlns:gml=\"http://www.opengis.net/gml\"\r\n"
+ " handle=\"Inserting new data\">\r\n"
+ " <wfs:Insert>\r\n"
+ " <topp:archsites>\r\n"
+ " <topp:cat>2</topp:cat>\r\n"
+ " <topp:str1>Alien crash site</topp:str1>\r\n"
+ " <topp:the_geom>\r\n"
+ " <gml:Point srsName=\"http://www.opengis.net/gml/srs/epsg.xml#26713\">\r\n"
+ " <gml:coordinates decimal=\".\" cs=\",\" ts=\" \">604000,4930000</gml:coordinates>\r\n"
+ " </gml:Point>\r\n" //
+ " </topp:the_geom>\r\n" + " </topp:archsites>\r\n" //
+ " </wfs:Insert>\r\n" + "</wfs:Transaction>\r\n";
// let's just ensure the transaction was successful
Document doc = postAsDOM(root(), transaction);
assertXpathEvaluatesTo("1", "count(/wfs:WFS_TransactionResponse)", doc);
assertXpathEvaluatesTo("archsites.5",
"/wfs:WFS_TransactionResponse/wfs:InsertResult/ogc:FeatureId/@fid", doc);
assertXpathEvaluatesTo(
"1",
"count(/wfs:WFS_TransactionResponse/wfs:TransactionResult/wfs:Status/wfs:SUCCESS)",
doc);
transaction = //
"<wfs:Transaction service=\"WFSV\" version=\"1.0.0\"\r\n"
+ " xmlns:topp=\"http://www.openplans.org/topp\"\r\n"
+ " xmlns:ogc=\"http://www.opengis.net/ogc\" xmlns:wfs=\"http://www.opengis.net/wfs\"\r\n"
+ " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\r\n"
+ " xmlns:gml=\"http://www.opengis.net/gml\"\r\n"
+ " handle=\"Updating data\">\r\n"
+ " <wfs:Update typeName=\"topp:archsites\">\r\n" //
+ " <wfs:Property>\r\n" + " <wfs:Name>str1</wfs:Name>\r\n"
+ " <wfs:Value>Signature Rock, updated</wfs:Value>\r\n"
+ " </wfs:Property>\r\n" //
+ " <ogc:Filter>\r\n" //
+ " <ogc:FeatureId fid=\"archsites.1\" />\r\n" //
+ " </ogc:Filter>\r\n" //
+ " </wfs:Update>\r\n" //
+ "</wfs:Transaction>\r\n";
doc = postAsDOM(root(), transaction);
assertXpathEvaluatesTo("1", "count(/wfs:WFS_TransactionResponse)", doc);
assertXpathEvaluatesTo(
"1",
"count(/wfs:WFS_TransactionResponse/wfs:TransactionResult/wfs:Status/wfs:SUCCESS)",
doc);
}
}
public void testLogForward() throws Exception {
String request = "<wfsv:GetLog service=\"WFSV\" version=\"1.0.0\" outputFormat=\"GML2\" \r\n"
+ " xmlns:topp=\"http://www.openplans.org/topp\"\r\n"
+ " xmlns:ogc=\"http://www.opengis.net/ogc\"\r\n"
+ " xmlns:wfs=\"http://www.opengis.net/wfs\"\r\n"
+ " xmlns:wfsv=\"http://www.opengis.net/wfsv\"\r\n"
+ " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\r\n"
+ " <wfsv:DifferenceQuery typeName=\"topp:archsites\" fromFeatureVersion=\"0\" toFeatureVersion=\"100\"/>\r\n"
+ "</wfsv:GetLog>";
Document doc = postAsDOM(root(), request);
//print(doc);
XpathEngine xpath = XMLUnit.newXpathEngine();
NodeList nodes = xpath.getMatchingNodes("//wfs:FeatureCollection/gml:featureMember/topp:changesets/@fid", doc);
assertEquals(2, nodes.getLength());
assertEquals("changesets.5", nodes.item(0).getTextContent());
assertEquals("changesets.4", nodes.item(1).getTextContent());
}
public void testLogBackwards() throws Exception {
String request = "<wfsv:GetLog service=\"WFSV\" version=\"1.0.0\" outputFormat=\"GML2\" \r\n"
+ " xmlns:topp=\"http://www.openplans.org/topp\"\r\n"
+ " xmlns:ogc=\"http://www.opengis.net/ogc\"\r\n"
+ " xmlns:wfs=\"http://www.opengis.net/wfs\"\r\n"
+ " xmlns:wfsv=\"http://www.opengis.net/wfsv\"\r\n"
+ " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\r\n"
+ " <wfsv:DifferenceQuery typeName=\"topp:archsites\" fromFeatureVersion=\"100\" toFeatureVersion=\"0\"/>\r\n"
+ "</wfsv:GetLog>";
Document doc = postAsDOM(root(), request);
XpathEngine xpath = XMLUnit.newXpathEngine();
NodeList nodes = xpath.getMatchingNodes("//wfs:FeatureCollection/gml:featureMember/topp:changesets/@fid", doc);
assertEquals(2, nodes.getLength());
assertEquals("changesets.4", nodes.item(0).getTextContent());
assertEquals("changesets.5", nodes.item(1).getTextContent());
}
}