diff --git a/hoot-services/src/test/java/hoot/services/controllers/osm/changeset/ChangesetResourceUploadCreateTest.java b/hoot-services/src/test/java/hoot/services/controllers/osm/changeset/ChangesetResourceUploadCreateTest.java
index 5e408ee..e7a18d2 100644
--- a/hoot-services/src/test/java/hoot/services/controllers/osm/changeset/ChangesetResourceUploadCreateTest.java
+++ b/hoot-services/src/test/java/hoot/services/controllers/osm/changeset/ChangesetResourceUploadCreateTest.java
@@ -22,7 +22,7 @@
* This will properly maintain the copyright information. DigitalGlobe
* copyrights will be updated automatically.
*
- * @copyright Copyright (C) 2016, 2017 DigitalGlobe (http://www.digitalglobe.com/)
+ * @copyright Copyright (C) 2016, 2017, 2019 DigitalGlobe (http://www.digitalglobe.com/)
*/
package hoot.services.controllers.osm.changeset;
@@ -1178,49 +1178,35 @@ public class ChangesetResourceUploadCreateTest extends OSMResourceTestAbstract {
}
}
- // haven't been able to find any good way to handle this yet, so I'm
- // choosing not to for now
- @Test(expected = ClientErrorException.class)
+ @Test
@Category(UnitTest.class)
- public void testUploadCreateRelationWhereRelationReferencesAnotherRelationThatComesAfterIt() throws Exception {
+ public void testUploadModifyRelationWithNegativeIdReference() throws Exception {
BoundingBox originalBounds = OSMTestUtils.createStartingTestBounds();
long changesetId = OSMTestUtils.createTestChangeset(originalBounds);
Set<Long> nodeIds = OSMTestUtils.createTestNodes(changesetId, originalBounds);
Long[] nodeIdsArr = nodeIds.toArray(new Long[nodeIds.size()]);
Set<Long> wayIds = OSMTestUtils.createTestWays(changesetId, nodeIds);
- Long[] wayIdsArr = wayIds.toArray(new Long[wayIds.size()]);
- Set<Long> relationIds = OSMTestUtils.createTestRelations(changesetId, nodeIds, wayIds);
+ Set<Long> relationIds = OSMTestUtils.createTestRelationsNegative(changesetId, nodeIds, wayIds);
+ Long[] relationIdsArr = relationIds.toArray(new Long[relationIds.size()]);
- // Try to create a relation that references a relation that is
- // referenced after it in the request. This isn't supported by the server, so the request should fail and no
- // data in the system should be modified.
- try {
- target("api/0.6/changeset/" + changesetId + "/upload")
+ // Do a modify upload where a member is referencing a relation with a negative id.
+ // Should pass since we allow negative ids in the hoot database now
+ Document responseData = target("api/0.6/changeset/" + changesetId + "/upload")
.queryParam("mapId", String.valueOf(mapId))
.request(MediaType.TEXT_XML)
.post(Entity.entity(
- "<osmChange version=\"0.3\" generator=\"iD\">" +
- "<create>" +
- "<relation id=\"-1\" version=\"0\" changeset=\"" + changesetId + "\" >" +
- "<member type=\"way\" role=\"role1\" ref=\"" + wayIdsArr[0] + "\"></member>" +
- "<member type=\"relation\" role=\"role1\" ref=\"-2\"></member>" +
- "</relation>" +
- "<relation id=\"-2\" version=\"0\" changeset=\"" + changesetId + "\" >" +
- "<member type=\"way\" role=\"role1\" ref=\"" + wayIdsArr[0] + "\"></member>" +
- "<member type=\"node\" role=\"role1\" ref=\"" + nodeIdsArr[0] + "\"></member>" +
- "</relation>" +
- "</create>" +
- "<modify/>" +
- "<delete if-unused=\"true\"/>" +
- "</osmChange>", MediaType.TEXT_XML_TYPE), Document.class);
- }
- catch (ClientErrorException e) {
- Response r = e.getResponse();
- assertEquals(Response.Status.PRECONDITION_FAILED, Response.Status.fromStatusCode(r.getStatus()));
- assertTrue(r.readEntity(String.class).contains("does not exist for relation"));
- OSMTestUtils.verifyTestDataUnmodified(originalBounds, changesetId, nodeIds, wayIds, relationIds);
- throw e;
- }
+ "<osmChange version=\"0.3\" generator=\"iD\">" +
+ "<create>" +
+ "<relation id=\"-1\" version=\"0\" changeset=\"" + changesetId + "\" >" +
+ "<member ref=\"" + nodeIdsArr[0] + "\" role=\"role1\" type=\"node\"/>"+
+ "<member ref=\"" + relationIdsArr[0] + "\" role=\"role1\" type=\"relation\"/>" +
+ "</relation>" +
+ "</create>" +
+ "<modify/>" +
+ "<delete if-unused=\"true\"/>" +
+ "</osmChange>", MediaType.TEXT_XML_TYPE), Document.class);
+
+ assertNotNull(responseData);
}
@Test(expected = BadRequestException.class)