Skip to content

Commit 64f733e

Browse files
marmoureadamretter
authored andcommitted
[test] RESTSerice tests for Accept header, RESTSerive must prioritize declared options over accept header
1 parent 26ee1e5 commit 64f733e

1 file changed

Lines changed: 120 additions & 0 deletions

File tree

exist-core/src/test/java/org/exist/http/RESTServiceTest.java

Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@
6060
import org.apache.http.HttpResponse;
6161
import org.apache.http.client.fluent.Request;
6262
import org.apache.http.entity.ContentType;
63+
import org.apache.http.util.EntityUtils;
6364
import org.eclipse.jetty.http.HttpStatus;
6465
import org.exist.EXistException;
6566
import org.exist.Namespaces;
@@ -234,6 +235,20 @@ public class RESTServiceTest {
234235
private static final XmldbURI TEST_XMLDECL_COLLECTION_URI = XmldbURI.ROOT_COLLECTION_URI.append("rest-test-xmldecl");
235236
private static final XmldbURI TEST_XML_DOC_WITH_XMLDECL_URI = XmldbURI.create("test-with-xmldecl.xml");
236237

238+
private static final String TEST_PRODUCES_XML_XQUERY =
239+
"xquery version \"3.0\";\n" +
240+
"declare namespace output = \"http://www.w3.org/2010/xslt-xquery-serialization\";\n" +
241+
"declare option output:method \"xml\";\n" +
242+
"declare option output:media-type \"application/xml\";\n" +
243+
"<test>xml</test>";
244+
245+
private static final String TEST_PRODUCES_JSON_XQUERY =
246+
"xquery version \"3.0\";\n" +
247+
"declare namespace output = \"http://www.w3.org/2010/xslt-xquery-serialization\";\n" +
248+
"declare option output:method \"json\";\n" +
249+
"declare option output:media-type \"application/json\";\n" +
250+
"<test><json1>json</json1> <json2>json</json2></test>";
251+
237252
private static String credentials;
238253
private static String badCredentials;
239254

@@ -1249,6 +1264,111 @@ public void getXmlDeclYes() throws IOException {
12491264
assertEquals("<bookmap id=\"bookmap-2\"/>\r\n", responseBody);
12501265
}
12511266

1267+
@Test
1268+
public void queryProducesXmlWithAcceptXml() throws IOException {
1269+
doPut(TEST_PRODUCES_XML_XQUERY, "produces-xml.xq", HttpStatus.CREATED_201);
1270+
final String uri = getCollectionUri() + "/produces-xml.xq";
1271+
1272+
final HttpResponse response = Request.Get(uri)
1273+
.setHeader("Accept", MediaType.APPLICATION_XML)
1274+
.setHeader("Authorization", "Basic " + credentials)
1275+
.execute()
1276+
.returnResponse();
1277+
1278+
final int resultStatusCode = response.getStatusLine().getStatusCode();
1279+
final String responseBody = EntityUtils.toString(response.getEntity(), "UTF-8");
1280+
assertEquals("Server returned response code: " + resultStatusCode, HttpStatus.OK_200, resultStatusCode);
1281+
assertResponseMediaType(MediaType.APPLICATION_XML, response);
1282+
assertEquals("<test>xml</test>", responseBody);
1283+
}
1284+
1285+
@Test
1286+
public void queryProducesJsonWithAcceptXml() throws IOException {
1287+
doPut(TEST_PRODUCES_JSON_XQUERY, "produces-json.xq", HttpStatus.CREATED_201);
1288+
final String uri = getCollectionUri() + "/produces-json.xq";
1289+
1290+
final HttpResponse response = Request.Get(uri)
1291+
.setHeader("Authorization", "Basic " + credentials)
1292+
.setHeader("Accept", MediaType.APPLICATION_XML)
1293+
.execute()
1294+
.returnResponse();
1295+
1296+
final int resultStatusCode = response.getStatusLine().getStatusCode();
1297+
final String responseBody = EntityUtils.toString(response.getEntity(), "UTF-8");
1298+
assertEquals("Server returned response code: " + resultStatusCode, HttpStatus.OK_200, resultStatusCode);
1299+
assertResponseMediaType("application/json", response);
1300+
assertEquals("{ \"json1\" : \"json\", \"json2\" : \"json\" }", responseBody);
1301+
}
1302+
1303+
@Test
1304+
public void queryProducesXmlWithAcceptJson() throws IOException {
1305+
doPut(TEST_PRODUCES_XML_XQUERY, "produces-xml.xq", HttpStatus.CREATED_201);
1306+
final String uri = getCollectionUri() + "/produces-xml.xq";
1307+
1308+
final HttpResponse response = Request.Get(uri)
1309+
.setHeader("Authorization", "Basic " + credentials)
1310+
.setHeader("Accept", "application/json")
1311+
.execute()
1312+
.returnResponse();
1313+
1314+
final int resultStatusCode = response.getStatusLine().getStatusCode();
1315+
final String responseBody = EntityUtils.toString(response.getEntity(), "UTF-8");
1316+
assertEquals("Server returned response code: " + resultStatusCode, HttpStatus.OK_200, resultStatusCode);
1317+
assertResponseMediaType(MediaType.APPLICATION_XML, response);
1318+
assertEquals("<test>xml</test>", responseBody);
1319+
}
1320+
1321+
@Test
1322+
public void queryProducesJsonWithAcceptJson() throws IOException {
1323+
doPut(TEST_PRODUCES_JSON_XQUERY, "produces-json.xq", HttpStatus.CREATED_201);
1324+
final String uri = getCollectionUri() + "/produces-json.xq";
1325+
1326+
final HttpResponse response = Request.Get(uri)
1327+
.setHeader("Authorization", "Basic " + credentials)
1328+
.setHeader("Accept", "application/json")
1329+
.execute()
1330+
.returnResponse();
1331+
1332+
final int resultStatusCode = response.getStatusLine().getStatusCode();
1333+
final String responseBody = EntityUtils.toString(response.getEntity(), "UTF-8");
1334+
assertEquals("Server returned response code: " + resultStatusCode, HttpStatus.OK_200, resultStatusCode);
1335+
assertResponseMediaType("application/json", response);
1336+
assertEquals("{ \"json1\" : \"json\", \"json2\" : \"json\" }", responseBody);
1337+
}
1338+
1339+
@Test
1340+
public void queryProducesXmlWithNoAccept() throws IOException {
1341+
doPut(TEST_PRODUCES_XML_XQUERY, "produces-xml.xq", HttpStatus.CREATED_201);
1342+
final String uri = getCollectionUri() + "/produces-xml.xq";
1343+
1344+
final HttpResponse response = Request.Get(uri)
1345+
.setHeader("Authorization", "Basic " + credentials)
1346+
.execute()
1347+
.returnResponse();
1348+
1349+
final int resultStatusCode = response.getStatusLine().getStatusCode();
1350+
final String responseBody = EntityUtils.toString(response.getEntity(), "UTF-8");
1351+
assertEquals("Server returned response code: " + resultStatusCode, HttpStatus.OK_200, resultStatusCode);
1352+
assertResponseMediaType(MediaType.APPLICATION_XML, response);
1353+
assertEquals("<test>xml</test>", responseBody);
1354+
}
1355+
1356+
@Test
1357+
public void queryProducesJsonWithNoAccept() throws IOException {
1358+
doPut(TEST_PRODUCES_JSON_XQUERY, "produces-json.xq", HttpStatus.CREATED_201);
1359+
final String uri = getCollectionUri() + "/produces-json.xq";
1360+
1361+
final HttpResponse response = Request.Get(uri)
1362+
.setHeader("Authorization", "Basic " + credentials)
1363+
.execute()
1364+
.returnResponse();
1365+
1366+
final int resultStatusCode = response.getStatusLine().getStatusCode();
1367+
final String responseBody = EntityUtils.toString(response.getEntity(), "UTF-8");
1368+
assertEquals("Server returned response code: " + resultStatusCode, HttpStatus.OK_200, resultStatusCode);
1369+
assertResponseMediaType("application/json", response);
1370+
assertEquals("{ \"json1\" : \"json\", \"json2\" : \"json\" }", responseBody);
1371+
}
12521372

12531373

12541374
private void chmod(final String resourcePath, final String mode) throws IOException {

0 commit comments

Comments
 (0)