/*
* Copyright 2011 JBoss Inc
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jbpm.formbuilder.server;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletContext;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
import org.easymock.EasyMock;
import org.jboss.resteasy.util.HttpHeaderNames;
import org.jbpm.formbuilder.server.xml.ListTasksDTO;
import org.jbpm.formbuilder.server.xml.TaskRefDTO;
import org.jbpm.formbuilder.shared.task.TaskDefinitionService;
import org.jbpm.formbuilder.shared.task.TaskRef;
import org.jbpm.formbuilder.shared.task.TaskServiceException;
import org.springframework.context.support.FileSystemXmlApplicationContext;
public class RESTIoServiceTest extends RESTAbstractTest {
public void testSetContextOK() throws Exception {
RESTIoService restService = new RESTIoService();
URL pathToClasses = getClass().getResource("/FormBuilder.properties");
String filePath = pathToClasses.toExternalForm();
//assumes compilation is in target/classes
filePath = filePath.replace("target/classes/FormBuilder.properties", "src/main/webapp");
filePath = filePath + "/WEB-INF/springComponents.xml";
FileSystemXmlApplicationContext ctx = new FileSystemXmlApplicationContext(filePath);
ServiceFactory.getInstance().setBeanFactory(ctx);
ServletContext context = EasyMock.createMock(ServletContext.class);
EasyMock.replay(context);
restService.setContext(context);
EasyMock.verify(context);
TaskDefinitionService service = restService.getTaskService();
assertNotNull("service shouldn't be null", service);
}
//test happy path for RESTIoService.getIoAssociations(...)
public void testGetIoAssociationsOK() throws Exception {
RESTIoService restService = new RESTIoService();
TaskDefinitionService taskService = EasyMock.createMock(TaskDefinitionService.class);
List<TaskRef> tasks = new ArrayList<TaskRef>();
tasks.add(new TaskRef());
tasks.add(new TaskRef());
EasyMock.expect(taskService.query(EasyMock.eq("somePackage"), EasyMock.eq("someFilter"))).andReturn(tasks).once();
restService.setTaskService(taskService);
ServletContext context = EasyMock.createMock(ServletContext.class);
EasyMock.replay(taskService, context);
Response resp = restService.getIoAssociations("someFilter", "somePackage", context);
EasyMock.verify(taskService, context);
assertNotNull("resp shouldn't be null", resp);
assertStatus(resp.getStatus(), Status.OK);
assertNotNull("resp.entity shouldn't be null", resp.getEntity());
Object entity = resp.getEntity();
assertNotNull("resp.metadata shouldn't be null", resp.getMetadata());
Object contentType = resp.getMetadata().getFirst(HttpHeaderNames.CONTENT_TYPE);
assertNotNull("resp.entity shouldn't be null", contentType);
assertEquals("contentType should be application/xml but is" + contentType, contentType, MediaType.APPLICATION_XML);
assertTrue("entity should be of type ListTasksDTO", entity instanceof ListTasksDTO);
ListTasksDTO dto = (ListTasksDTO) entity;
List<TaskRefDTO> dtoTasks = dto.getTask();
assertNotNull("dtoTasks shouldn't be null", dtoTasks);
assertEquals("dtoTasks should have " + tasks.size() + " elements but it has " + dtoTasks.size(), tasks.size(), dtoTasks.size());
}
//test happy path without filtering param for RESTIoService.getIoAssociations(...)
public void testGetIoAssociationsNoQParam() throws Exception {
RESTIoService restService = new RESTIoService();
TaskDefinitionService taskService = EasyMock.createMock(TaskDefinitionService.class);
List<TaskRef> tasks = new ArrayList<TaskRef>();
tasks.add(new TaskRef());
tasks.add(new TaskRef());
EasyMock.expect(taskService.query(EasyMock.eq("somePackage"), EasyMock.eq(""))).andReturn(tasks).once();
restService.setTaskService(taskService);
ServletContext context = EasyMock.createMock(ServletContext.class);
EasyMock.replay(taskService, context);
Response resp = restService.getIoAssociations(null, "somePackage", context);
EasyMock.verify(taskService, context);
assertNotNull("resp shouldn't be null", resp);
assertStatus(resp.getStatus(), Status.OK);
assertNotNull("resp.entity shouldn't be null", resp.getEntity());
Object entity = resp.getEntity();
assertNotNull("resp.metadata shouldn't be null", resp.getMetadata());
Object contentType = resp.getMetadata().getFirst(HttpHeaderNames.CONTENT_TYPE);
assertNotNull("resp.entity shouldn't be null", contentType);
assertEquals("contentType should be application/xml but is" + contentType, contentType, MediaType.APPLICATION_XML);
assertTrue("entity should be of type ListTasksDTO", entity instanceof ListTasksDTO);
ListTasksDTO dto = (ListTasksDTO) entity;
List<TaskRefDTO> dtoTasks = dto.getTask();
assertNotNull("dtoTasks shouldn't be null", dtoTasks);
assertEquals("dtoTasks should have " + tasks.size() + " elements but it has " + dtoTasks.size(), tasks.size(), dtoTasks.size());
}
//test response to a TaskServiceException for RESTIoService.getIoAssociations(...)
public void testGetIoAssociationsServiceProblem() throws Exception {
RESTIoService restService = new RESTIoService();
TaskDefinitionService taskService = EasyMock.createMock(TaskDefinitionService.class);
TaskServiceException exception = new TaskServiceException("Something going wrong");
EasyMock.expect(taskService.query(EasyMock.eq("somePackage"), EasyMock.eq(""))).andThrow(exception).once();
restService.setTaskService(taskService);
ServletContext context = EasyMock.createMock(ServletContext.class);
EasyMock.replay(taskService, context);
Response resp = restService.getIoAssociations(null, "somePackage", context);
EasyMock.verify(taskService, context);
assertNotNull("resp shouldn't be null", resp);
assertStatus(resp.getStatus(), Status.INTERNAL_SERVER_ERROR);
}
//test happy path for RESTIoService.getIoAssociations(...)
public void testGetIoAssociationOK() throws Exception {
RESTIoService restService = new RESTIoService();
TaskDefinitionService taskService = EasyMock.createMock(TaskDefinitionService.class);
List<TaskRef> tasks = new ArrayList<TaskRef>();
tasks.add(new TaskRef());
EasyMock.expect(taskService.getTasksByName(
EasyMock.eq("somePackage"), EasyMock.eq("someProcess"), EasyMock.eq("someTask"))).andReturn(tasks).once();
restService.setTaskService(taskService);
ServletContext context = EasyMock.createMock(ServletContext.class);
EasyMock.replay(taskService, context);
Response resp = restService.getIoAssociation("somePackage", "someProcess", "someTask", context);
EasyMock.verify(taskService, context);
assertNotNull("resp shouldn't be null", resp);
assertStatus(resp.getStatus(), Status.OK);
assertNotNull("resp.entity shouldn't be null", resp.getEntity());
Object entity = resp.getEntity();
assertNotNull("resp.metadata shouldn't be null", resp.getMetadata());
Object contentType = resp.getMetadata().getFirst(HttpHeaderNames.CONTENT_TYPE);
assertNotNull("resp.entity shouldn't be null", contentType);
assertEquals("contentType should be application/xml but is" + contentType, contentType, MediaType.APPLICATION_XML);
assertTrue("entity should be of type ListTasksDTO", entity instanceof ListTasksDTO);
ListTasksDTO dto = (ListTasksDTO) entity;
List<TaskRefDTO> dtoTasks = dto.getTask();
assertNotNull("dtoTasks shouldn't be null", dtoTasks);
assertEquals("dtoTasks should have " + tasks.size() + " elements but it has " + dtoTasks.size(), tasks.size(), dtoTasks.size());
}
//test response to a TaskServiceException for RESTIoService.getIoAssociation(...)
public void testGetIoAssociationServiceProblem() throws Exception {
RESTIoService restService = new RESTIoService();
TaskDefinitionService taskService = EasyMock.createMock(TaskDefinitionService.class);
TaskServiceException exception = new TaskServiceException("Something going wrong");
EasyMock.expect(taskService.getTasksByName(
EasyMock.eq("somePackage"), EasyMock.eq("someProcess"), EasyMock.eq("someTask"))).andThrow(exception).once();
restService.setTaskService(taskService);
ServletContext context = EasyMock.createMock(ServletContext.class);
EasyMock.replay(taskService, context);
Response resp = restService.getIoAssociation("somePackage", "someProcess", "someTask", context);
EasyMock.verify(taskService, context);
assertNotNull("resp shouldn't be null", resp);
assertStatus(resp.getStatus(), Status.INTERNAL_SERVER_ERROR);
}
}