/** * Copyright (C) 2010-2017 Structr GmbH * * This file is part of Structr <http://structr.org>. * * Structr is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * Structr is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Structr. If not, see <http://www.gnu.org/licenses/>. */ package org.structr.rest.document; import com.jayway.restassured.RestAssured; import com.jayway.restassured.filter.log.ResponseLoggingFilter; import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.hasSize; import org.junit.Test; import org.structr.core.entity.Relation; import org.structr.rest.common.StructrRestTest; /** * * */ public class DocumentTest extends StructrRestTest { @Test public void testSchemaAutocreateNone() { final String projectNodeId = createSchemaNode("Project", new Pair("_name", "+String!")); final String taskNodeId = createSchemaNode("Task", new Pair("_name", "+String")); createSchemaRelationships(projectNodeId, taskNodeId, "TASK", "1", "*", "project", "tasks", Relation.NONE, Relation.SOURCE_TO_TARGET); // post document: expect success (Project -> Task) RestAssured .given() .contentType("application/json; charset=UTF-8") .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(201)) .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(500)) .body("{\"name\":\"Project1\",\"tasks\":[{\"name\":\"Task1\"}]}") .expect() .statusCode(422) .when() .post("/projects"); // post document: expect failure (Task -> Project) RestAssured .given() .contentType("application/json; charset=UTF-8") .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(201)) .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(500)) .body("{\"name\":\"Task2\",\"project\":{\"name\":\"Project2\"}}") .expect() .statusCode(422) .when() .post("/tasks"); } @Test public void testSchemaAutocreateSourceToTarget() { final String projectNodeId = createSchemaNode("Project", new Pair("_name", "+String!")); final String taskNodeId = createSchemaNode("Task", new Pair("_name", "+String")); createSchemaRelationships(projectNodeId, taskNodeId, "TASK", "1", "*", "project", "tasks", Relation.SOURCE_TO_TARGET, Relation.SOURCE_TO_TARGET); // post document: expect success (Project -> Task) RestAssured .given() .contentType("application/json; charset=UTF-8") .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(422)) .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(500)) .body("{\"name\":\"Project1\",\"tasks\":[{\"name\":\"Task1\"}]}") .expect() .statusCode(201) .when() .post("/projects"); // post document: expect failure (Task -> Project) RestAssured .given() .contentType("application/json; charset=UTF-8") .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(201)) .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(500)) .body("{\"name\":\"Task2\",\"project\":{\"name\":\"Project2\"}}") .expect() .statusCode(422) .when() .post("/tasks"); } @Test public void testSchemaAutocreateTargetToSource() { final String projectNodeId = createSchemaNode("Project", new Pair("_name", "+String!")); final String taskNodeId = createSchemaNode("Task", new Pair("_name", "+String")); createSchemaRelationships(projectNodeId, taskNodeId, "TASK", "1", "*", "project", "tasks", Relation.TARGET_TO_SOURCE, Relation.SOURCE_TO_TARGET); // post document: expect success (Project -> Task) RestAssured .given() .contentType("application/json; charset=UTF-8") .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(201)) .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(500)) .body("{\"name\":\"Project1\",\"tasks\":[{\"name\":\"Task1\"}]}") .expect() .statusCode(422) .when() .post("/projects"); // post document: expect failure (Task -> Project) RestAssured .given() .contentType("application/json; charset=UTF-8") .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(422)) .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(500)) .body("{\"name\":\"Task2\",\"project\":{\"name\":\"Project2\"}}") .expect() .statusCode(201) .when() .post("/tasks"); } @Test public void testSchemaAutocreateAlways() { final String projectNodeId = createSchemaNode("Project", new Pair("_name", "+String!")); final String taskNodeId = createSchemaNode("Task", new Pair("_name", "+String")); createSchemaRelationships(projectNodeId, taskNodeId, "TASK", "1", "*", "project", "tasks", Relation.ALWAYS, Relation.SOURCE_TO_TARGET); // post document: expect success (Project -> Task) RestAssured .given() .contentType("application/json; charset=UTF-8") .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(422)) .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(500)) .body("{\"name\":\"Project1\",\"tasks\":[{\"name\":\"Task1\"}]}") .expect() .statusCode(201) .when() .post("/projects"); // post document: expect failure (Task -> Project) RestAssured .given() .contentType("application/json; charset=UTF-8") .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(422)) .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(500)) .body("{\"name\":\"Task2\",\"project\":{\"name\":\"Project2\"}}") .expect() .statusCode(201) .when() .post("/tasks"); } @Test public void testSimpleDocumentWithSchema() { final String projectNodeId = createSchemaNode("Project", new Pair("_name", "+String!")); final String taskNodeId = createSchemaNode("Task", new Pair("_name", "+String")); final String workerNodeId = createSchemaNode("Worker", new Pair("_name", "+String!")); // create relationships createSchemaRelationships(projectNodeId, taskNodeId, "TASK", "1", "*", "project", "tasks", Relation.SOURCE_TO_TARGET, Relation.SOURCE_TO_TARGET); createSchemaRelationships(taskNodeId, taskNodeId, "SUBTASK", "1", "*", "parentTask", "subtasks", Relation.SOURCE_TO_TARGET, Relation.SOURCE_TO_TARGET); createSchemaRelationships(workerNodeId, taskNodeId, "WORKS", "1", "*", "worker", "tasks", Relation.ALWAYS, Relation.SOURCE_TO_TARGET); // create views RestAssured.given().contentType("application/json; charset=UTF-8") .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(422)) .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(500)) .body("{ \"__test\": \"_name, _tasks\" }") .expect().statusCode(200).when().put("/schema_nodes/" + projectNodeId); RestAssured.given().contentType("application/json; charset=UTF-8") .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(422)) .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(500)) .body("{ \"__test\": \"_name, _project, _subtasks, _parentTask, _worker\" }") .expect().statusCode(200).when().put("/schema_nodes/" + taskNodeId); RestAssured.given().contentType("application/json; charset=UTF-8") .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(422)) .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(500)) .body("{ \"__test\": \"_name, _tasks\" }") .expect().statusCode(200).when().put("/schema_nodes/" + workerNodeId); // post document RestAssured .given() .contentType("application/json; charset=UTF-8") .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(422)) .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(500)) .body("{\"name\":\"Project1\",\"tasks\":[{\"name\":\"Task1\",\"worker\":{\"name\":\"Worker1\"},\"subtasks\":[{\"name\":\"Subtask1.1\",\"worker\":{\"name\":\"Worker1\"}},{\"name\":\"Subtask1.2\",\"worker\":{\"name\":\"Worker2\"}}]}]}") .expect() .statusCode(201) .when() .post("/projects"); // check result RestAssured .given() .contentType("application/json; charset=UTF-8") .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(422)) .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(500)) .expect() .statusCode(200) .body("result", hasSize(1)) .body("result_count", equalTo(1)) .body("result[0].name", equalTo("Project1")) .body("result[0].tasks[0].name", equalTo("Task1")) .body("result[0].tasks[0].worker.name", equalTo("Worker1")) .body("result[0].tasks[0].subtasks[0].name", equalTo("Subtask1.1")) .body("result[0].tasks[0].subtasks[0].worker.name", equalTo("Worker1")) .body("result[0].tasks[0].subtasks[1].name", equalTo("Subtask1.2")) .body("result[0].tasks[0].subtasks[1].worker.name", equalTo("Worker2")) .when() .get("/projects/test?name=Project1"); // post document RestAssured .given() .contentType("application/json; charset=UTF-8") .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(422)) .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(500)) .body("{\"name\":\"Project2\",\"tasks\":[{\"name\":\"Task2\",\"worker\":{\"name\":\"Worker2\"},\"subtasks\":[{\"name\":\"Subtask2.1\",\"worker\":{\"name\":\"Worker2\"}},{\"name\":\"Subtask2.2\",\"worker\":{\"name\":\"Worker3\"}}]}]}") .expect() .statusCode(201) .when() .post("/projects"); // check result RestAssured .given() .contentType("application/json; charset=UTF-8") .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(422)) .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(500)) .expect() .statusCode(200) .body("result", hasSize(1)) .body("result_count", equalTo(1)) .body("result[0].name", equalTo("Project2")) .body("result[0].tasks[0].name", equalTo("Task2")) .body("result[0].tasks[0].worker.name", equalTo("Worker2")) .body("result[0].tasks[0].subtasks[0].name", equalTo("Subtask2.1")) .body("result[0].tasks[0].subtasks[0].worker.name", equalTo("Worker2")) .body("result[0].tasks[0].subtasks[1].name", equalTo("Subtask2.2")) .body("result[0].tasks[0].subtasks[1].worker.name", equalTo("Worker3")) .when() .get("/projects/test?name=Project2"); // check workers RestAssured .given() .contentType("application/json; charset=UTF-8") .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(422)) .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(500)) .expect() .statusCode(200) .body("result", hasSize(1)) .body("result_count", equalTo(1)) .body("result[0].name", equalTo("Worker2")) .body("result[0].tasks", hasSize(3)) .body("result[0].tasks[0].name", equalTo("Subtask1.2")) .body("result[0].tasks[1].name", equalTo("Subtask2.1")) .body("result[0].tasks[2].name", equalTo("Task2")) .when() .get("/workers/test?name=Worker2"); } @Test public void testComplexDocumentWithSchema() { final String projectNodeId = createSchemaNode("Project", new Pair("_name", "+String!")); final String taskNodeId = createSchemaNode("Task", new Pair("_name", "+String")); final String workerNodeId = createSchemaNode("Worker", new Pair("_name", "+String!")); final String companyNodeId = createSchemaNode("Company", new Pair("_name", "+String!")); // create relationships createSchemaRelationships(projectNodeId, taskNodeId, "TASK", "1", "*", "project", "tasks", Relation.ALWAYS, Relation.SOURCE_TO_TARGET); createSchemaRelationships(taskNodeId, taskNodeId, "SUBTASK", "1", "*", "parentTask", "subtasks", Relation.ALWAYS, Relation.SOURCE_TO_TARGET); createSchemaRelationships(workerNodeId, taskNodeId, "WORKS_ON", "1", "*", "worker", "tasks", Relation.ALWAYS, Relation.SOURCE_TO_TARGET); createSchemaRelationships(workerNodeId, companyNodeId, "WORKS_AT", "*", "1", "workers", "company", Relation.ALWAYS, Relation.SOURCE_TO_TARGET); // create views RestAssured.given().contentType("application/json; charset=UTF-8") .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(422)) .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(500)) .body("{ \"__test\": \"_name, _tasks\" }") .expect().statusCode(200).when().put("/schema_nodes/" + projectNodeId); RestAssured.given().contentType("application/json; charset=UTF-8") .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(422)) .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(500)) .body("{ \"__test\": \"_name, _subtasks, _worker\" }") .expect().statusCode(200).when().put("/schema_nodes/" + taskNodeId); RestAssured.given().contentType("application/json; charset=UTF-8") .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(422)) .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(500)) .body("{ \"__test\": \"_name, _tasks, _company\" }") .expect().statusCode(200).when().put("/schema_nodes/" + workerNodeId); RestAssured.given().contentType("application/json; charset=UTF-8") .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(422)) .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(500)) .body("{ \"__test\": \"_name, _workers\" }") .expect().statusCode(200).when().put("/schema_nodes/" + companyNodeId); String jsonBody = "{" + "\n" + " \"name\": \"Project1\"," + "\n" + " \"tasks\": [" + "\n" + " {" + "\n" + " \"name\": \"Task1\"," + "\n" + " \"worker\": {" + "\n" + " \"name\": \"Worker1\"," + "\n" + " \"company\": { " + "\n" + " \"name\": \"Company1\"" + "\n" + " }" + "\n" + " }," + "\n" + " \"subtasks\": [" + "\n" + " {" + "\n" + " \"name\": \"Subtask1.1\"," + "\n" + " \"worker\": {" + "\n" + " \"name\": \"Worker1\"," + "\n" + " \"company\": { " + "\n" + " \"name\": \"Company1\"" + "\n" + " }" + "\n" + " }" + "\n" + " }," + "\n" + " {" + "\n" + " \"name\": \"Subtask1.2\"," + "\n" + " \"worker\": {" + "\n" + " \"name\": \"Worker2\"," + "\n" + " \"company\": { " + "\n" + " \"name\": \"Company1\"" + "\n" + " }" + "\n" + " }" + "\n" + " }," + "\n" + " {" + "\n" + " \"name\": \"Subtask1.3\"," + "\n" + " \"worker\": {" + "\n" + " \"name\": \"Worker2\"," + "\n" + " \"company\": { " + "\n" + " \"name\": \"Company1\"" + "\n" + " }" + "\n" + " }" + "\n" + " }," + "\n" + " {" + "\n" + " \"name\": \"Subtask1.4\"," + "\n" + " \"worker\": {" + "\n" + " \"name\": \"Worker3\"," + "\n" + " \"company\": { " + "\n" + " \"name\": \"Company2\"" + "\n" + " }" + "\n" + " }" + "\n" + " }" + "\n" + " ]" + "\n" + " }," + "\n" + " {" + "\n" + " \"name\": \"Task2\"," + "\n" + " \"worker\": {" + "\n" + " \"name\": \"Worker2\"," + "\n" + " \"company\": { " + "\n" + " \"name\": \"Company1\"" + "\n" + " }" + "\n" + " }" + "\n" + " }," + "\n" + " {" + "\n" + " \"name\": \"Task3\"," + "\n" + " \"worker\": {" + "\n" + " \"name\": \"Worker3\"," + "\n" + " \"company\": { " + "\n" + " \"name\": \"Company2\"" + "\n" + " }" + "\n" + " }" + "\n" + " }," + "\n" + " {" + "\n" + " \"name\": \"Task4\"," + "\n" + " \"worker\": {" + "\n" + " \"name\": \"Worker4\"," + "\n" + " \"company\": { " + "\n" + " \"name\": \"Company3\"" + "\n" + " }" + "\n" + " }," + "\n" + " \"subtasks\": [" + "\n" + " {" + "\n" + " \"name\": \"Subtask4.1\"," + "\n" + " \"worker\": {" + "\n" + " \"name\": \"Worker4\"," + "\n" + " \"company\": { " + "\n" + " \"name\": \"Company3\"" + "\n" + " }" + "\n" + " }" + "\n" + " }," + "\n" + " {" + "\n" + " \"name\": \"Subtask4.2\"," + "\n" + " \"worker\": {" + "\n" + " \"name\": \"Worker4\"," + "\n" + " \"company\": { " + "\n" + " \"name\": \"Company3\"" + "\n" + " }" + "\n" + " }" + "\n" + " }," + "\n" + " {" + "\n" + " \"name\": \"Subtask4.3\"," + "\n" + " \"worker\": {" + "\n" + " \"name\": \"Worker4\"," + "\n" + " \"company\": { " + "\n" + " \"name\": \"Company3\"" + "\n" + " }" + "\n" + " }" + "\n" + " }," + "\n" + " {" + "\n" + " \"name\": \"Subtask4.4\"," + "\n" + " \"worker\": {" + "\n" + " \"name\": \"Worker5\"," + "\n" + " \"company\": { " + "\n" + " \"name\": \"Company3\"" + "\n" + " }" + "\n" + " }" + "\n" + " }" + "\n" + " ]" + "\n" + " }," + "\n" + " {" + "\n" + " \"name\": \"Task5\"," + "\n" + " \"worker\": {" + "\n" + " \"name\": \"Worker5\"," + "\n" + " \"company\": { " + "\n" + " \"name\": \"Company3\"" + "\n" + " }" + "\n" + " }," + "\n" + " \"subtasks\": [" + "\n" + " {" + "\n" + " \"name\": \"Subtask5.1\"," + "\n" + " \"worker\": {" + "\n" + " \"name\": \"Worker4\"," + "\n" + " \"company\": { " + "\n" + " \"name\": \"Company3\"" + "\n" + " }" + "\n" + " }," + "\n" + " \"subtasks\": [" + "\n" + " {" + "\n" + " \"name\": \"Subtask5.1.1\"," + "\n" + " \"worker\": {" + "\n" + " \"name\": \"Worker4\"," + "\n" + " \"company\": { " + "\n" + " \"name\": \"Company3\"" + "\n" + " }" + "\n" + " }" + "\n" + " }," + "\n" + " {" + "\n" + " \"name\": \"Subtask5.1.2\"," + "\n" + " \"worker\": {" + "\n" + " \"name\": \"Worker4\"," + "\n" + " \"company\": { " + "\n" + " \"name\": \"Company3\"" + "\n" + " }" + "\n" + " }" + "\n" + " }" + "\n" + " ]" + "\n" + " }," + "\n" + " {" + "\n" + " \"name\": \"Subtask5.2\"," + "\n" + " \"worker\": {" + "\n" + " \"name\": \"Worker4\"," + "\n" + " \"company\": { " + "\n" + " \"name\": \"Company3\"" + "\n" + " }" + "\n" + " }," + "\n" + " \"subtasks\": [" + "\n" + " {" + "\n" + " \"name\": \"Subtask5.2.1\"," + "\n" + " \"worker\": {" + "\n" + " \"name\": \"Worker4\"," + "\n" + " \"company\": { " + "\n" + " \"name\": \"Company3\"" + "\n" + " }" + "\n" + " }" + "\n" + " }," + "\n" + " {" + "\n" + " \"name\": \"Subtask5.2.2\"," + "\n" + " \"worker\": {" + "\n" + " \"name\": \"Worker4\"," + "\n" + " \"company\": { " + "\n" + " \"name\": \"Company3\"" + "\n" + " }" + "\n" + " }" + "\n" + " }" + "\n" + " ]" + "\n" + " }" + "\n" + " ]" + "\n" + " }" + "\n" + " ]" + "\n" + "}"; // post document RestAssured .given() .contentType("application/json; charset=UTF-8") .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(400)) .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(422)) .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(500)) .body(jsonBody) .expect() .statusCode(201) .when() .post("/projects"); // JSON output depth limits our ability to check the result here, so we need to check separately RestAssured .given() .contentType("application/json; charset=UTF-8") .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(422)) .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(500)) .expect() .statusCode(200) .body("result", hasSize(1)) .body("result_count", equalTo(1)) .body("result[0].name", equalTo("Project1")) .body("result[0].tasks[0].name", equalTo("Task1")) .body("result[0].tasks[0].worker.name", equalTo("Worker1")) .body("result[0].tasks[1].name", equalTo("Task2")) .body("result[0].tasks[1].worker.name", equalTo("Worker2")) .body("result[0].tasks[2].name", equalTo("Task3")) .body("result[0].tasks[2].worker.name", equalTo("Worker3")) .body("result[0].tasks[3].name", equalTo("Task4")) .body("result[0].tasks[3].worker.name", equalTo("Worker4")) .body("result[0].tasks[4].name", equalTo("Task5")) .body("result[0].tasks[4].worker.name", equalTo("Worker5")) .when() .get("/projects/test?name=Project1"); // check Task1 RestAssured .given() .contentType("application/json; charset=UTF-8") .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(422)) .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(500)) .expect() .statusCode(200) .body("result", hasSize(1)) .body("result_count", equalTo(1)) .body("result[0].name", equalTo("Task1")) .body("result[0].worker.name", equalTo("Worker1")) .body("result[0].worker.company.name", equalTo("Company1")) .body("result[0].subtasks[0].name", equalTo("Subtask1.1")) .body("result[0].subtasks[0].worker.name", equalTo("Worker1")) .body("result[0].subtasks[0].worker.company.name", equalTo("Company1")) .body("result[0].subtasks[1].name", equalTo("Subtask1.2")) .body("result[0].subtasks[1].worker.name", equalTo("Worker2")) .body("result[0].subtasks[1].worker.company.name", equalTo("Company1")) .body("result[0].subtasks[2].name", equalTo("Subtask1.3")) .body("result[0].subtasks[2].worker.name", equalTo("Worker2")) .body("result[0].subtasks[2].worker.company.name", equalTo("Company1")) .body("result[0].subtasks[3].name", equalTo("Subtask1.4")) .body("result[0].subtasks[3].worker.name", equalTo("Worker3")) .body("result[0].subtasks[3].worker.company.name", equalTo("Company2")) .when() .get("/tasks/test?name=Task1"); // check Task2 RestAssured .given() .contentType("application/json; charset=UTF-8") .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(422)) .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(500)) .expect() .statusCode(200) .body("result", hasSize(1)) .body("result_count", equalTo(1)) .body("result[0].name", equalTo("Task2")) .body("result[0].worker.name", equalTo("Worker2")) .body("result[0].worker.company.name", equalTo("Company1")) .when() .get("/tasks/test?name=Task2"); // check Task3 RestAssured .given() .contentType("application/json; charset=UTF-8") .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(422)) .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(500)) .expect() .statusCode(200) .body("result", hasSize(1)) .body("result_count", equalTo(1)) .body("result[0].name", equalTo("Task3")) .body("result[0].worker.name", equalTo("Worker3")) .body("result[0].worker.company.name", equalTo("Company2")) .when() .get("/tasks/test?name=Task3"); // check Task4 RestAssured .given() .contentType("application/json; charset=UTF-8") .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(422)) .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(500)) .expect() .statusCode(200) .body("result", hasSize(1)) .body("result_count", equalTo(1)) .body("result[0].name", equalTo("Task4")) .body("result[0].worker.name", equalTo("Worker4")) .body("result[0].worker.company.name", equalTo("Company3")) .body("result[0].subtasks[0].name", equalTo("Subtask4.1")) .body("result[0].subtasks[0].worker.name", equalTo("Worker4")) .body("result[0].subtasks[0].worker.company.name", equalTo("Company3")) .body("result[0].subtasks[1].name", equalTo("Subtask4.2")) .body("result[0].subtasks[1].worker.name", equalTo("Worker4")) .body("result[0].subtasks[1].worker.company.name", equalTo("Company3")) .body("result[0].subtasks[2].name", equalTo("Subtask4.3")) .body("result[0].subtasks[2].worker.name", equalTo("Worker4")) .body("result[0].subtasks[2].worker.company.name", equalTo("Company3")) .body("result[0].subtasks[3].name", equalTo("Subtask4.4")) .body("result[0].subtasks[3].worker.name", equalTo("Worker5")) .body("result[0].subtasks[3].worker.company.name", equalTo("Company3")) .when() .get("/tasks/test?name=Task4"); // check Task5 RestAssured .given() .contentType("application/json; charset=UTF-8") .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(422)) .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(500)) .expect() .statusCode(200) .body("result", hasSize(1)) .body("result_count", equalTo(1)) .body("result[0].name", equalTo("Task5")) .body("result[0].worker.name", equalTo("Worker5")) .body("result[0].worker.company.name", equalTo("Company3")) .body("result[0].subtasks[0].name", equalTo("Subtask5.1")) .body("result[0].subtasks[0].worker.name", equalTo("Worker4")) .body("result[0].subtasks[0].worker.company.name", equalTo("Company3")) .body("result[0].subtasks[0].subtasks[0].name", equalTo("Subtask5.1.1")) .body("result[0].subtasks[0].subtasks[0].worker.name", equalTo("Worker4")) .body("result[0].subtasks[0].subtasks[1].name", equalTo("Subtask5.1.2")) .body("result[0].subtasks[0].subtasks[1].worker.name", equalTo("Worker4")) .body("result[0].subtasks[1].name", equalTo("Subtask5.2")) .body("result[0].subtasks[1].worker.name", equalTo("Worker4")) .body("result[0].subtasks[1].worker.company.name", equalTo("Company3")) .body("result[0].subtasks[1].subtasks[0].name", equalTo("Subtask5.2.1")) .body("result[0].subtasks[1].subtasks[0].worker.name", equalTo("Worker4")) .body("result[0].subtasks[1].subtasks[1].name", equalTo("Subtask5.2.2")) .body("result[0].subtasks[1].subtasks[1].worker.name", equalTo("Worker4")) .when() .get("/tasks/test?name=Task5"); // check Subtask5.1 RestAssured .given() .contentType("application/json; charset=UTF-8") .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(422)) .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(500)) .expect() .statusCode(200) .body("result", hasSize(1)) .body("result_count", equalTo(1)) .body("result[0].name", equalTo("Subtask5.1")) .body("result[0].worker.name", equalTo("Worker4")) .body("result[0].worker.company.name", equalTo("Company3")) .body("result[0].subtasks[0].name", equalTo("Subtask5.1.1")) .body("result[0].subtasks[0].worker.name", equalTo("Worker4")) .body("result[0].subtasks[0].worker.company.name", equalTo("Company3")) .body("result[0].subtasks[1].name", equalTo("Subtask5.1.2")) .body("result[0].subtasks[1].worker.name", equalTo("Worker4")) .body("result[0].subtasks[1].worker.company.name", equalTo("Company3")) .when() .get("/tasks/test?name=Subtask5.1"); // check Subtask5.2 RestAssured .given() .contentType("application/json; charset=UTF-8") .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(422)) .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(500)) .expect() .statusCode(200) .body("result", hasSize(1)) .body("result_count", equalTo(1)) .body("result[0].name", equalTo("Subtask5.2")) .body("result[0].worker.name", equalTo("Worker4")) .body("result[0].worker.company.name", equalTo("Company3")) .body("result[0].subtasks[0].name", equalTo("Subtask5.2.1")) .body("result[0].subtasks[0].worker.name", equalTo("Worker4")) .body("result[0].subtasks[0].worker.company.name", equalTo("Company3")) .body("result[0].subtasks[1].name", equalTo("Subtask5.2.2")) .body("result[0].subtasks[1].worker.name", equalTo("Worker4")) .body("result[0].subtasks[1].worker.company.name", equalTo("Company3")) .when() .get("/tasks/test?name=Subtask5.2"); // check companies RestAssured .given() .contentType("application/json; charset=UTF-8") .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(422)) .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(500)) .expect() .statusCode(200) .body("result", hasSize(3)) .body("result_count", equalTo(3)) .body("result[0].name", equalTo("Company1")) .body("result[1].name", equalTo("Company2")) .body("result[2].name", equalTo("Company3")) .when() .get("/companies/test"); // check workers RestAssured .given() .contentType("application/json; charset=UTF-8") .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(422)) .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(500)) .expect() .statusCode(200) .body("result", hasSize(5)) .body("result_count", equalTo(5)) .body("result[0].name", equalTo("Worker1")) .body("result[0].company.name", equalTo("Company1")) .body("result[1].name", equalTo("Worker2")) .body("result[1].company.name", equalTo("Company1")) .body("result[2].name", equalTo("Worker3")) .body("result[2].company.name", equalTo("Company2")) .body("result[3].name", equalTo("Worker4")) .body("result[3].company.name", equalTo("Company3")) .body("result[4].name", equalTo("Worker5")) .body("result[4].company.name", equalTo("Company3")) .when() .get("/workers/test"); } @Test public void testComplexDocumentUpdate() { final String projectNodeId = createSchemaNode("Project", new Pair("_name", "+String!"), new Pair("_description", "String")); final String taskNodeId = createSchemaNode("Task", new Pair("_name", "+String!"), new Pair("_description", "String")); final String workerNodeId = createSchemaNode("Worker", new Pair("_name", "+String!"), new Pair("_description", "String")); final String companyNodeId = createSchemaNode("Company", new Pair("_name", "+String!"), new Pair("_description", "String")); // create relationships createSchemaRelationships(projectNodeId, taskNodeId, "TASK", "1", "*", "project", "tasks", Relation.ALWAYS, Relation.SOURCE_TO_TARGET); createSchemaRelationships(taskNodeId, taskNodeId, "SUBTASK", "1", "*", "parentTask", "subtasks", Relation.ALWAYS, Relation.SOURCE_TO_TARGET); createSchemaRelationships(workerNodeId, taskNodeId, "WORKS_ON", "1", "*", "worker", "tasks", Relation.ALWAYS, Relation.SOURCE_TO_TARGET); createSchemaRelationships(workerNodeId, companyNodeId, "WORKS_AT", "*", "1", "workers", "company", Relation.ALWAYS, Relation.SOURCE_TO_TARGET); // create views RestAssured.given().contentType("application/json; charset=UTF-8") .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(422)) .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(500)) .body("{ \"__test\": \"_name, _description, _tasks\" }") .expect().statusCode(200).when().put("/schema_nodes/" + projectNodeId); RestAssured.given().contentType("application/json; charset=UTF-8") .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(422)) .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(500)) .body("{ \"__test\": \"_name, _description, _subtasks, _worker\" }") .expect().statusCode(200).when().put("/schema_nodes/" + taskNodeId); RestAssured.given().contentType("application/json; charset=UTF-8") .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(422)) .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(500)) .body("{ \"__test\": \"_name, _description, _tasks, _company\" }") .expect().statusCode(200).when().put("/schema_nodes/" + workerNodeId); RestAssured.given().contentType("application/json; charset=UTF-8") .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(422)) .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(500)) .body("{ \"__test\": \"_name, _description, _workers\" }") .expect().statusCode(200).when().put("/schema_nodes/" + companyNodeId); String jsonBody1 = "{" + "\n" + " \"name\": \"Project1\"," + "\n" + " \"description\": \"projectDescription1\"," + "\n" + " \"tasks\": [" + "\n" + " {" + "\n" + " \"name\": \"Task1\"," + "\n" + " \"description\": \"taskDescription1\"," + "\n" + " \"worker\": {" + "\n" + " \"name\": \"Worker1\"," + "\n" + " \"company\": { " + "\n" + " \"name\": \"Company1\"" + "\n" + " }" + "\n" + " }," + "\n" + " \"subtasks\": [" + "\n" + " {" + "\n" + " \"name\": \"Subtask1.1\"," + "\n" + " \"description\": \"subtaskDescription1.1\"," + "\n" + " \"worker\": {" + "\n" + " \"name\": \"Worker1\"," + "\n" + " \"company\": { " + "\n" + " \"name\": \"Company1\"" + "\n" + " }" + "\n" + " }" + "\n" + " }," + "\n" + " {" + "\n" + " \"name\": \"Subtask1.2\"," + "\n" + " \"description\": \"subtaskDescription1.2\"," + "\n" + " \"worker\": {" + "\n" + " \"name\": \"Worker2\"," + "\n" + " \"company\": { " + "\n" + " \"name\": \"Company1\"" + "\n" + " }" + "\n" + " }" + "\n" + " }," + "\n" + " {" + "\n" + " \"name\": \"Subtask1.3\"," + "\n" + " \"description\": \"subtaskDescription1.3\"," + "\n" + " \"worker\": {" + "\n" + " \"name\": \"Worker2\"," + "\n" + " \"company\": { " + "\n" + " \"name\": \"Company1\"" + "\n" + " }" + "\n" + " }" + "\n" + " }," + "\n" + " {" + "\n" + " \"name\": \"Subtask1.4\"," + "\n" + " \"description\": \"subtaskDescription1.4\"," + "\n" + " \"worker\": {" + "\n" + " \"name\": \"Worker3\"," + "\n" + " \"company\": { " + "\n" + " \"name\": \"Company2\"" + "\n" + " }" + "\n" + " }" + "\n" + " }" + "\n" + " ]" + "\n" + " }," + "\n" + " {" + "\n" + " \"name\": \"Task2\"," + "\n" + " \"description\": \"taskDescription2\"," + "\n" + " \"worker\": {" + "\n" + " \"name\": \"Worker2\"," + "\n" + " \"company\": { " + "\n" + " \"name\": \"Company1\"" + "\n" + " }" + "\n" + " }" + "\n" + " }," + "\n" + " {" + "\n" + " \"name\": \"Task3\"," + "\n" + " \"description\": \"taskDescription3\"," + "\n" + " \"worker\": {" + "\n" + " \"name\": \"Worker3\"," + "\n" + " \"company\": { " + "\n" + " \"name\": \"Company2\"" + "\n" + " }" + "\n" + " }" + "\n" + " }," + "\n" + " {" + "\n" + " \"name\": \"Task4\"," + "\n" + " \"description\": \"taskDescription4\"," + "\n" + " \"worker\": {" + "\n" + " \"name\": \"Worker4\"," + "\n" + " \"company\": { " + "\n" + " \"name\": \"Company3\"" + "\n" + " }" + "\n" + " }," + "\n" + " \"subtasks\": [" + "\n" + " {" + "\n" + " \"name\": \"Subtask4.1\"," + "\n" + " \"description\": \"subtaskDescription4.1\"," + "\n" + " \"worker\": {" + "\n" + " \"name\": \"Worker4\"," + "\n" + " \"company\": { " + "\n" + " \"name\": \"Company3\"" + "\n" + " }" + "\n" + " }" + "\n" + " }," + "\n" + " {" + "\n" + " \"name\": \"Subtask4.2\"," + "\n" + " \"description\": \"subtaskDescription4.2\"," + "\n" + " \"worker\": {" + "\n" + " \"name\": \"Worker4\"," + "\n" + " \"company\": { " + "\n" + " \"name\": \"Company3\"" + "\n" + " }" + "\n" + " }" + "\n" + " }," + "\n" + " {" + "\n" + " \"name\": \"Subtask4.3\"," + "\n" + " \"description\": \"subtaskDescription4.3\"," + "\n" + " \"worker\": {" + "\n" + " \"name\": \"Worker4\"," + "\n" + " \"company\": { " + "\n" + " \"name\": \"Company3\"" + "\n" + " }" + "\n" + " }" + "\n" + " }," + "\n" + " {" + "\n" + " \"name\": \"Subtask4.4\"," + "\n" + " \"description\": \"subtaskDescription4.4\"," + "\n" + " \"worker\": {" + "\n" + " \"name\": \"Worker5\"," + "\n" + " \"company\": { " + "\n" + " \"name\": \"Company3\"" + "\n" + " }" + "\n" + " }" + "\n" + " }" + "\n" + " ]" + "\n" + " }" + "\n" + " ]" + "\n" + "}"; // post document final String projectId = getUuidFromLocation(RestAssured .given() .contentType("application/json; charset=UTF-8") .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(400)) .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(422)) .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(500)) .body(jsonBody1) .expect() .statusCode(201) .when() .post("/projects") .getHeader("Location")); String jsonBody2 = "{" + "\n" + " \"name\": \"Project1\"," + "\n" + " \"description\": \"new projectDescription1\"," + "\n" + " \"tasks\": [" + "\n" + " {" + "\n" + " \"name\": \"Task1\"," + "\n" + " \"description\": \"new taskDescription1\"," + "\n" + " \"worker\": {" + "\n" + " \"name\": \"Worker1\"," + "\n" + " \"description\": \"new workerDescription1\"," + "\n" + " \"company\": { " + "\n" + " \"name\": \"Company1\"," + "\n" + " \"description\": \"new companyDescription1\"" + "\n" + " }" + "\n" + " }," + "\n" + " \"subtasks\": [" + "\n" + " {" + "\n" + " \"name\": \"Subtask1.1\"," + "\n" + " \"description\": \"new subtaskDescription1.1\"," + "\n" + " \"worker\": {" + "\n" + " \"name\": \"Worker1\"," + "\n" + " \"company\": { " + "\n" + " \"name\": \"Company1\"" + "\n" + " }" + "\n" + " }" + "\n" + " }," + "\n" + " {" + "\n" + " \"name\": \"Subtask1.2\"," + "\n" + " \"description\": \"new subtaskDescription1.2\"," + "\n" + " \"worker\": {" + "\n" + " \"name\": \"Worker2\"," + "\n" + " \"company\": { " + "\n" + " \"name\": \"Company1\"" + "\n" + " }" + "\n" + " }" + "\n" + " }," + "\n" + " {" + "\n" + " \"name\": \"Subtask1.3\"," + "\n" + " \"description\": \"new subtaskDescription1.3\"," + "\n" + " \"worker\": {" + "\n" + " \"name\": \"Worker2\"," + "\n" + " \"description\": \"new workerDescription2\"," + "\n" + " \"company\": { " + "\n" + " \"name\": \"Company1\"" + "\n" + " }" + "\n" + " }" + "\n" + " }," + "\n" + " {" + "\n" + " \"name\": \"Subtask1.4\"," + "\n" + " \"description\": \"new subtaskDescription1.4\"," + "\n" + " \"worker\": {" + "\n" + " \"name\": \"Worker3\"," + "\n" + " \"company\": { " + "\n" + " \"name\": \"Company2\"," + "\n" + " \"description\": \"new companyDescription2\"" + "\n" + " }" + "\n" + " }" + "\n" + " }" + "\n" + " ]" + "\n" + " }," + "\n" + " {" + "\n" + " \"name\": \"Task2\"," + "\n" + " \"description\": \"new taskDescription2\"," + "\n" + " \"worker\": {" + "\n" + " \"name\": \"Worker2\"," + "\n" + " \"company\": { " + "\n" + " \"name\": \"Company1\"" + "\n" + " }" + "\n" + " }" + "\n" + " }," + "\n" + " {" + "\n" + " \"name\": \"Task3\"," + "\n" + " \"description\": \"new taskDescription3\"," + "\n" + " \"worker\": {" + "\n" + " \"name\": \"Worker3\"," + "\n" + " \"description\": \"new workerDescription3\"," + "\n" + " \"company\": { " + "\n" + " \"name\": \"Company2\"" + "\n" + " }" + "\n" + " }" + "\n" + " }," + "\n" + " {" + "\n" + " \"name\": \"Task4\"," + "\n" + " \"description\": \"new taskDescription4\"," + "\n" + " \"worker\": {" + "\n" + " \"name\": \"Worker4\"," + "\n" + " \"company\": { " + "\n" + " \"name\": \"Company3\"" + "\n" + " }" + "\n" + " }," + "\n" + " \"subtasks\": [" + "\n" + " {" + "\n" + " \"name\": \"Subtask4.1\"," + "\n" + " \"description\": \"new subtaskDescription4.1\"," + "\n" + " \"worker\": {" + "\n" + " \"name\": \"Worker4\"," + "\n" + " \"company\": { " + "\n" + " \"name\": \"Company3\"," + "\n" + " \"description\": \"new companyDescription3\"" + "\n" + " }" + "\n" + " }" + "\n" + " }," + "\n" + " {" + "\n" + " \"name\": \"Subtask4.2\"," + "\n" + " \"description\": \"new subtaskDescription4.2\"," + "\n" + " \"worker\": {" + "\n" + " \"name\": \"Worker4\"," + "\n" + " \"company\": { " + "\n" + " \"name\": \"Company3\"" + "\n" + " }" + "\n" + " }" + "\n" + " }," + "\n" + " {" + "\n" + " \"name\": \"Subtask4.3\"," + "\n" + " \"description\": \"new subtaskDescription4.3\"," + "\n" + " \"worker\": {" + "\n" + " \"name\": \"Worker4\"," + "\n" + " \"description\": \"new workerDescription4\"," + "\n" + " \"company\": { " + "\n" + " \"name\": \"Company3\"" + "\n" + " }" + "\n" + " }" + "\n" + " }," + "\n" + " {" + "\n" + " \"name\": \"Subtask4.4\"," + "\n" + " \"description\": \"new subtaskDescription4.4\"," + "\n" + " \"worker\": {" + "\n" + " \"name\": \"Worker5\"," + "\n" + " \"description\": \"new workerDescription5\"," + "\n" + " \"company\": { " + "\n" + " \"name\": \"Company3\"" + "\n" + " }" + "\n" + " }" + "\n" + " }" + "\n" + " ]" + "\n" + " }" + "\n" + " ]" + "\n" + "}"; // update document RestAssured .given() .contentType("application/json; charset=UTF-8") .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(400)) .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(422)) .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(500)) .body(jsonBody2) .expect() .statusCode(200) .when() .put("/projects/" + projectId); RestAssured .given() .contentType("application/json; charset=UTF-8") .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(422)) .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(500)) .expect() .statusCode(200) .body("result", hasSize(1)) .body("result_count", equalTo(1)) .body("result[0].name", equalTo("Project1")) .body("result[0].description", equalTo("new projectDescription1")) .body("result[0].tasks[0].name", equalTo("Task1")) .body("result[0].tasks[0].description", equalTo("new taskDescription1")) .body("result[0].tasks[0].worker.name", equalTo("Worker1")) .body("result[0].tasks[0].worker.description", equalTo("new workerDescription1")) .body("result[0].tasks[1].name", equalTo("Task2")) .body("result[0].tasks[1].description", equalTo("new taskDescription2")) .body("result[0].tasks[1].worker.name", equalTo("Worker2")) .body("result[0].tasks[1].worker.description", equalTo("new workerDescription2")) .body("result[0].tasks[2].name", equalTo("Task3")) .body("result[0].tasks[2].description", equalTo("new taskDescription3")) .body("result[0].tasks[2].worker.name", equalTo("Worker3")) .body("result[0].tasks[2].worker.description", equalTo("new workerDescription3")) .body("result[0].tasks[3].name", equalTo("Task4")) .body("result[0].tasks[3].description", equalTo("new taskDescription4")) .body("result[0].tasks[3].worker.name", equalTo("Worker4")) .body("result[0].tasks[3].worker.description", equalTo("new workerDescription4")) .when() .get("/projects/test?name=Project1"); // check Task1 RestAssured .given() .contentType("application/json; charset=UTF-8") .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(422)) .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(500)) .expect() .statusCode(200) .body("result", hasSize(1)) .body("result_count", equalTo(1)) .body("result[0].name", equalTo("Task1")) .body("result[0].description", equalTo("new taskDescription1")) .body("result[0].worker.name", equalTo("Worker1")) .body("result[0].worker.description", equalTo("new workerDescription1")) .body("result[0].worker.company.name", equalTo("Company1")) .body("result[0].worker.company.description", equalTo("new companyDescription1")) .body("result[0].subtasks[0].name", equalTo("Subtask1.1")) .body("result[0].subtasks[0].description", equalTo("new subtaskDescription1.1")) .body("result[0].subtasks[0].worker.name", equalTo("Worker1")) .body("result[0].subtasks[0].worker.description", equalTo("new workerDescription1")) .body("result[0].subtasks[0].worker.company.name", equalTo("Company1")) .body("result[0].subtasks[0].worker.company.description", equalTo("new companyDescription1")) .body("result[0].subtasks[1].name", equalTo("Subtask1.2")) .body("result[0].subtasks[1].description", equalTo("new subtaskDescription1.2")) .body("result[0].subtasks[1].worker.name", equalTo("Worker2")) .body("result[0].subtasks[1].worker.description", equalTo("new workerDescription2")) .body("result[0].subtasks[1].worker.company.name", equalTo("Company1")) .body("result[0].subtasks[1].worker.company.description", equalTo("new companyDescription1")) .body("result[0].subtasks[2].name", equalTo("Subtask1.3")) .body("result[0].subtasks[2].description", equalTo("new subtaskDescription1.3")) .body("result[0].subtasks[2].worker.name", equalTo("Worker2")) .body("result[0].subtasks[2].worker.description", equalTo("new workerDescription2")) .body("result[0].subtasks[2].worker.company.name", equalTo("Company1")) .body("result[0].subtasks[2].worker.company.description", equalTo("new companyDescription1")) .body("result[0].subtasks[3].name", equalTo("Subtask1.4")) .body("result[0].subtasks[3].description", equalTo("new subtaskDescription1.4")) .body("result[0].subtasks[3].worker.name", equalTo("Worker3")) .body("result[0].subtasks[3].worker.description", equalTo("new workerDescription3")) .body("result[0].subtasks[3].worker.company.name", equalTo("Company2")) .body("result[0].subtasks[3].worker.company.description", equalTo("new companyDescription2")) .when() .get("/tasks/test?name=Task1"); // check Task2 RestAssured .given() .contentType("application/json; charset=UTF-8") .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(422)) .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(500)) .expect() .statusCode(200) .body("result", hasSize(1)) .body("result_count", equalTo(1)) .body("result[0].name", equalTo("Task2")) .body("result[0].description", equalTo("new taskDescription2")) .body("result[0].worker.name", equalTo("Worker2")) .body("result[0].worker.description", equalTo("new workerDescription2")) .body("result[0].worker.company.name", equalTo("Company1")) .body("result[0].worker.company.description", equalTo("new companyDescription1")) .when() .get("/tasks/test?name=Task2"); // check Task3 RestAssured .given() .contentType("application/json; charset=UTF-8") .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(422)) .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(500)) .expect() .statusCode(200) .body("result", hasSize(1)) .body("result_count", equalTo(1)) .body("result[0].name", equalTo("Task3")) .body("result[0].description", equalTo("new taskDescription3")) .body("result[0].worker.name", equalTo("Worker3")) .body("result[0].worker.description", equalTo("new workerDescription3")) .body("result[0].worker.company.name", equalTo("Company2")) .body("result[0].worker.company.description", equalTo("new companyDescription2")) .when() .get("/tasks/test?name=Task3"); // check Task4 RestAssured .given() .contentType("application/json; charset=UTF-8") .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(422)) .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(500)) .expect() .statusCode(200) .body("result", hasSize(1)) .body("result_count", equalTo(1)) .body("result[0].name", equalTo("Task4")) .body("result[0].description", equalTo("new taskDescription4")) .body("result[0].worker.name", equalTo("Worker4")) .body("result[0].worker.description", equalTo("new workerDescription4")) .body("result[0].worker.company.name", equalTo("Company3")) .body("result[0].worker.company.description", equalTo("new companyDescription3")) .body("result[0].subtasks[0].name", equalTo("Subtask4.1")) .body("result[0].subtasks[0].description", equalTo("new subtaskDescription4.1")) .body("result[0].subtasks[0].worker.name", equalTo("Worker4")) .body("result[0].subtasks[0].worker.description", equalTo("new workerDescription4")) .body("result[0].subtasks[0].worker.company.name", equalTo("Company3")) .body("result[0].subtasks[0].worker.company.description", equalTo("new companyDescription3")) .body("result[0].subtasks[1].name", equalTo("Subtask4.2")) .body("result[0].subtasks[1].description", equalTo("new subtaskDescription4.2")) .body("result[0].subtasks[1].worker.name", equalTo("Worker4")) .body("result[0].subtasks[1].worker.description", equalTo("new workerDescription4")) .body("result[0].subtasks[1].worker.company.name", equalTo("Company3")) .body("result[0].subtasks[1].worker.company.description", equalTo("new companyDescription3")) .body("result[0].subtasks[2].name", equalTo("Subtask4.3")) .body("result[0].subtasks[2].description", equalTo("new subtaskDescription4.3")) .body("result[0].subtasks[2].worker.name", equalTo("Worker4")) .body("result[0].subtasks[2].worker.description", equalTo("new workerDescription4")) .body("result[0].subtasks[2].worker.company.name", equalTo("Company3")) .body("result[0].subtasks[2].worker.company.description", equalTo("new companyDescription3")) .body("result[0].subtasks[3].name", equalTo("Subtask4.4")) .body("result[0].subtasks[3].description", equalTo("new subtaskDescription4.4")) .body("result[0].subtasks[3].worker.name", equalTo("Worker5")) .body("result[0].subtasks[3].worker.description", equalTo("new workerDescription5")) .body("result[0].subtasks[3].worker.company.name", equalTo("Company3")) .body("result[0].subtasks[3].worker.company.description", equalTo("new companyDescription3")) .when() .get("/tasks/test?name=Task4"); // check companies RestAssured .given() .contentType("application/json; charset=UTF-8") .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(422)) .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(500)) .expect() .statusCode(200) .body("result", hasSize(3)) .body("result_count", equalTo(3)) .body("result[0].name", equalTo("Company1")) .body("result[0].description", equalTo("new companyDescription1")) .body("result[1].name", equalTo("Company2")) .body("result[1].description", equalTo("new companyDescription2")) .body("result[2].name", equalTo("Company3")) .body("result[2].description", equalTo("new companyDescription3")) .when() .get("/companies/test"); // check workers RestAssured .given() .contentType("application/json; charset=UTF-8") .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(422)) .filter(ResponseLoggingFilter.logResponseIfStatusCodeIs(500)) .expect() .statusCode(200) .body("result", hasSize(5)) .body("result_count", equalTo(5)) .body("result[0].name", equalTo("Worker1")) .body("result[0].description", equalTo("new workerDescription1")) .body("result[0].company.name", equalTo("Company1")) .body("result[0].company.description", equalTo("new companyDescription1")) .body("result[1].name", equalTo("Worker2")) .body("result[1].description", equalTo("new workerDescription2")) .body("result[1].company.name", equalTo("Company1")) .body("result[1].company.description", equalTo("new companyDescription1")) .body("result[2].name", equalTo("Worker3")) .body("result[2].description", equalTo("new workerDescription3")) .body("result[2].company.name", equalTo("Company2")) .body("result[2].company.description", equalTo("new companyDescription2")) .body("result[3].name", equalTo("Worker4")) .body("result[3].description", equalTo("new workerDescription4")) .body("result[3].company.name", equalTo("Company3")) .body("result[3].company.description", equalTo("new companyDescription3")) .body("result[4].name", equalTo("Worker5")) .body("result[4].description", equalTo("new workerDescription5")) .body("result[4].company.name", equalTo("Company3")) .body("result[4].company.description", equalTo("new companyDescription3")) .when() .get("/workers/test"); } private String createSchemaNode(final String name, Pair... properties) { final StringBuilder buf = new StringBuilder(); // append name buf.append("{ \"name\": \""); buf.append(name); buf.append("\""); for (final Pair pair : properties) { final boolean isString = pair.value instanceof String; buf.append(", \""); buf.append(pair.key); buf.append("\": "); if (isString) { buf.append("\""); } buf.append(pair.value); if (isString) { buf.append("\""); } } buf.append(" }"); return createEntity("/schema_nodes", buf.toString()); } // ----- private methods ----- private String createSchemaRelationships(final String sourceId, final String targetId, final String relationshipType, final String sourceMultiplicity, final String targetMultiplicity, final String sourceJsonName, final String targetJsonName, final int autocreate, final int cascadingDelete) { return createEntity( "/schema_relationship_nodes", "{ \"sourceId\": \"" + sourceId + "\"" + ", \"targetId\": \"" + targetId + "\"" + ", \"relationshipType\": \"" + relationshipType + "\"" + ", \"sourceMultiplicity\": \"" + sourceMultiplicity + "\"" + ", \"targetMultiplicity\": \"" + targetMultiplicity + "\"" + ", \"sourceJsonName\": \"" + sourceJsonName + "\"" + ", \"targetJsonName\": \"" + targetJsonName + "\"" + ", \"cascadingDeleteFlag\": " + cascadingDelete + ", \"autocreationFlag\": " + autocreate + " }"); } private static class Pair { public String key = null; public Object value = null; public Pair(final String key, final Object value) { this.key = key; this.value = value; } } }