package org.activiti.rest.service.api.management;
import java.util.List;
import org.activiti.engine.impl.persistence.entity.VariableInstanceEntity;
import org.activiti.engine.task.Task;
import org.activiti.rest.service.BaseSpringRestTestCase;
import org.activiti.rest.service.api.RestUrls;
import org.apache.http.HttpStatus;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ArrayNode;
/**
* Test for all REST-operations related to the Table columns.
*
* @author Frederik Heremans
*/
public class TableDataResourceTest extends BaseSpringRestTestCase {
/**
* Test getting a single table's row data. GET
* management/tables/{tableName}/data
*/
public void testGetTableColumns() throws Exception {
try {
Task task = taskService.newTask();
taskService.saveTask(task);
taskService.setVariable(task.getId(), "var1", 123);
taskService.setVariable(task.getId(), "var2", 456);
taskService.setVariable(task.getId(), "var3", 789);
// We use variable-table as a reference
String tableName = managementService.getTableName(VariableInstanceEntity.class);
CloseableHttpResponse response = executeRequest(new HttpGet(SERVER_URL_PREFIX +
RestUrls.createRelativeResourceUrl(RestUrls.URL_TABLE_DATA, tableName)), HttpStatus.SC_OK);
// Check paging result
JsonNode responseNode = objectMapper.readTree(response.getEntity().getContent());
closeResponse(response);
assertNotNull(responseNode);
assertEquals(3, responseNode.get("total").intValue());
assertEquals(3, responseNode.get("size").intValue());
assertEquals(0, responseNode.get("start").intValue());
assertTrue(responseNode.get("order").isNull());
assertTrue(responseNode.get("sort").isNull());
// Check variables are actually returned
ArrayNode rows = (ArrayNode) responseNode.get("data");
assertNotNull(rows);
assertEquals(3, rows.size());
// Check sorting, ascending
response = executeRequest(new HttpGet(SERVER_URL_PREFIX +
RestUrls.createRelativeResourceUrl(RestUrls.URL_TABLE_DATA, tableName) + "?orderAscendingColumn=LONG_"), HttpStatus.SC_OK);
responseNode = objectMapper.readTree(response.getEntity().getContent());
closeResponse(response);
assertNotNull(responseNode);
assertEquals(3, responseNode.get("total").intValue());
assertEquals(3, responseNode.get("size").intValue());
assertEquals(0, responseNode.get("start").intValue());
assertEquals("asc", responseNode.get("order").textValue());
assertEquals("LONG_", responseNode.get("sort").textValue());
rows = (ArrayNode) responseNode.get("data");
assertNotNull(rows);
assertEquals(3, rows.size());
assertEquals("var1", rows.get(0).get("NAME_").textValue());
assertEquals("var2", rows.get(1).get("NAME_").textValue());
assertEquals("var3", rows.get(2).get("NAME_").textValue());
// Check sorting, descending
response = executeRequest(new HttpGet(SERVER_URL_PREFIX +
RestUrls.createRelativeResourceUrl(RestUrls.URL_TABLE_DATA, tableName) + "?orderDescendingColumn=LONG_"), HttpStatus.SC_OK);
responseNode = objectMapper.readTree(response.getEntity().getContent());
closeResponse(response);
assertNotNull(responseNode);
assertEquals(3, responseNode.get("total").intValue());
assertEquals(3, responseNode.get("size").intValue());
assertEquals(0, responseNode.get("start").intValue());
assertEquals("desc", responseNode.get("order").textValue());
assertEquals("LONG_", responseNode.get("sort").textValue());
rows = (ArrayNode) responseNode.get("data");
assertNotNull(rows);
assertEquals(3, rows.size());
assertEquals("var3", rows.get(0).get("NAME_").textValue());
assertEquals("var2", rows.get(1).get("NAME_").textValue());
assertEquals("var1", rows.get(2).get("NAME_").textValue());
// Finally, check result limiting
response = executeRequest(new HttpGet(SERVER_URL_PREFIX +
RestUrls.createRelativeResourceUrl(RestUrls.URL_TABLE_DATA, tableName) + "?orderAscendingColumn=LONG_&start=1&size=1"), HttpStatus.SC_OK);
responseNode = objectMapper.readTree(response.getEntity().getContent());
closeResponse(response);
assertNotNull(responseNode);
assertEquals(3, responseNode.get("total").intValue());
assertEquals(1, responseNode.get("size").intValue());
assertEquals(1, responseNode.get("start").intValue());
rows = (ArrayNode) responseNode.get("data");
assertNotNull(rows);
assertEquals(1, rows.size());
assertEquals("var2", rows.get(0).get("NAME_").textValue());
} finally {
// Clean adhoc-tasks even if test fails
List<Task> tasks = taskService.createTaskQuery().list();
for (Task task : tasks) {
taskService.deleteTask(task.getId(), true);
}
}
}
public void testGetDataForUnexistingTable() throws Exception {
closeResponse(executeRequest(new HttpGet(SERVER_URL_PREFIX +
RestUrls.createRelativeResourceUrl(RestUrls.URL_TABLE_DATA, "unexisting")), HttpStatus.SC_NOT_FOUND));
}
public void testGetDataSortByIllegalColumn() throws Exception {
// We use variable-table as a reference
String tableName = managementService.getTableName(VariableInstanceEntity.class);
closeResponse(executeRequest(new HttpGet(SERVER_URL_PREFIX +
RestUrls.createRelativeResourceUrl(RestUrls.URL_TABLE_DATA, tableName) + "?orderAscendingColumn=unexistingColumn"), HttpStatus.SC_INTERNAL_SERVER_ERROR));
}
}