/* * * Copyright 2013 Entando S.r.l. (http://www.entando.com) All rights reserved. * * This file is part of Entando Enterprise Edition software. * You can redistribute it and/or modify it * under the terms of the Entando's EULA * * See the file License for the specific language governing permissions * and limitations under the License * * * * Copyright 2013 Entando S.r.l. (http://www.entando.com) All rights reserved. * */ package com.agiletec.plugins.jpwtt.apsadmin.ticket; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import com.agiletec.aps.system.services.role.Permission; import com.agiletec.apsadmin.system.BaseAction; import com.agiletec.plugins.jpwtt.aps.system.services.ticket.model.Ticket; import com.agiletec.plugins.jpwtt.aps.system.services.ticket.model.TicketOperation; import com.agiletec.plugins.jpwtt.apsadmin.ApsAdminPluginBaseTestCase; import com.agiletec.plugins.jpwtt.apsadmin.ticket.common.AbstractTicketAction; import com.opensymphony.xwork2.Action; public class TestTicketAction extends ApsAdminPluginBaseTestCase { public void testView() throws Throwable { assertEquals(0, this._ticketManager.searchTicketIds(null).size()); Ticket t1 = this._helper.createTicket(null, new Date(), null, "message1", "mainEditor", 0, 0, "pageManagerCustomers", null, Ticket.STATES_ASSIGNED, null, false); this._ticketManager.addTicket(t1); String ticketCode = t1.getCode(); TicketOperation op1 = this._helper.createTicketOperation(0, ticketCode, "pageManagerCustomers", TicketOperation.OPERATIONS_TAKEINCHARGE, "notw", 0, 0, null, new Date()); this._ticketManager.updateTicketWithOperation(t1, op1); String result = this.executeAction("pageManagerCoach", "view", ticketCode); assertEquals(BaseAction.USER_NOT_ALLOWED, result); result = this.executeAction("admin", "view", ticketCode); assertEquals(Action.SUCCESS, result); Ticket ticket = ((AbstractTicketAction) this.getAction()).getTicket(); this.compareTickets(t1, ticket); List<TicketOperation> operations = ((AbstractTicketAction) this.getAction()).getTicketOperations(); assertEquals(1, operations.size()); } public void testTakeInCharge() throws Throwable { String actionCode = "takeInCharge"; assertEquals(0, this._ticketManager.searchTicketIds(null).size()); Ticket t1 = this._helper.createTicket(null, new Date(), null, "message1", null, 0, 0, null, null, Ticket.STATES_OPENED, null, false); this._ticketManager.addTicket(t1); Ticket t2 = this._helper.createTicket(null, new Date(), null, "message2", null, 0, 0, "pageManagerCustomers", Permission.SUPERVISOR, Ticket.STATES_ASSIGNABLE, null, false); this._ticketManager.addTicket(t2); Ticket t3 = this._helper.createTicket(null, new Date(), null, "message3", null, 0, 0, "pageManagerCustomers", null, Ticket.STATES_ASSIGNED, null, false); this._ticketManager.addTicket(t3); Ticket t4 = this._helper.createTicket(null, new Date(), null, "message4", null, 0, 0, "pageManagerCustomers", "editor", Ticket.STATES_ASSIGNABLE, null, false); this._ticketManager.addTicket(t4); Ticket t5 = this._helper.createTicket(null, new Date(), null, "message5", null, 0, 0, "pageManagerCustomers", null, Ticket.STATES_CLOSED, null, false); this._ticketManager.addTicket(t5); // t1 OPENED Ticket current = t1; String result = this.executeAction("admin", actionCode, current.getCode()); assertEquals(Action.SUCCESS, result); Ticket ticket = this._ticketManager.getTicket(current.getCode()); assertEquals(Ticket.STATES_ASSIGNED, ticket.getStatus()); assertEquals("admin", ticket.getWttOperator()); List<TicketOperation> operations = this._ticketManager.getTicketOperations(current.getCode()); assertEquals(1, operations.size()); TicketOperation operation = operations.get(0); assertEquals(TicketOperation.OPERATIONS_TAKEINCHARGE, operation.getOperationCode()); assertEquals("admin", operation.getOperator()); // t2 ASSIGNABLE current = t2; result = this.executeAction("admin", actionCode, current.getCode()); assertEquals("opNotAllowed", result); ticket = this._ticketManager.getTicket(current.getCode()); this.compareTickets(current, ticket); assertEquals(0, this._ticketManager.getTicketOperations(current.getCode()).size()); // t3 ASSIGNED current = t3; result = this.executeAction("admin", actionCode, current.getCode()); assertEquals("opNotAllowed", result); ticket = this._ticketManager.getTicket(current.getCode()); this.compareTickets(current, ticket); assertEquals(0, this._ticketManager.getTicketOperations(current.getCode()).size()); // t4 ASSIGNABLE current = t4; result = this.executeAction("mainEditor", actionCode, current.getCode()); assertEquals(Action.SUCCESS, result); ticket = this._ticketManager.getTicket(current.getCode()); assertEquals(Ticket.STATES_ASSIGNED, ticket.getStatus()); assertEquals("mainEditor", ticket.getWttOperator()); operations = this._ticketManager.getTicketOperations(current.getCode()); assertEquals(1, operations.size()); operation = operations.get(0); assertEquals(TicketOperation.OPERATIONS_TAKEINCHARGE, operation.getOperationCode()); assertEquals("mainEditor", operation.getOperator()); // t5 CLOSED current = t5; result = this.executeAction("admin", actionCode, current.getCode()); assertEquals("opNotAllowed", result); ticket = this._ticketManager.getTicket(current.getCode()); this.compareTickets(current, ticket); assertEquals(0, this._ticketManager.getTicketOperations(current.getCode()).size()); } public void testAssign() throws Throwable { String actionCode = "assign"; Map<String, String> params = new HashMap<String, String>(); params.put("note", "note"); try { assertEquals(0, this._ticketManager.searchTicketIds(null).size()); Ticket t1 = this._helper.createTicket(null, new Date(), "email1@inesistente.itte", "message1", "mainEditor", 0, 0, null, null, Ticket.STATES_OPENED, null, false); this._ticketManager.addTicket(t1); Ticket t2 = this._helper.createTicket(null, new Date(), "email2@inesistente.itte", "message2", "mainEditor", 0, 0, "pageManagerCustomers", null, Ticket.STATES_ASSIGNABLE, null, false); this._ticketManager.addTicket(t2); Ticket t3 = this._helper.createTicket(null, new Date(), "email3@inesistente.itte", "message3", "mainEditor", 0, 0, "pageManagerCustomers", null, Ticket.STATES_ASSIGNED, null, false); this._ticketManager.addTicket(t3); Ticket t4 = this._helper.createTicket(null, new Date(), "email4@inesistente.itte", "message4", "mainEditor", 0, 0, "pageManagerCustomers", null, Ticket.STATES_CLOSED, null, false); this._ticketManager.addTicket(t4); String ticketCode = t1.getCode(); String result = this.executeAction("mainEditor", actionCode, ticketCode, params); assertEquals("opNotAllowed", result); assertEquals(1, this.getAction().getActionErrors().size()); assertEquals(0, this.getAction().getFieldErrors().size()); result = this.executeAction("admin", actionCode, ticketCode, params); assertEquals("input", result); Map<String, List<String>> fieldErrors = this.getAction().getFieldErrors(); assertEquals(1, fieldErrors.size()); assertEquals(1, fieldErrors.get("roleName").size()); assertEquals(0, this.getAction().getActionErrors().size()); params.put("roleName", "editor"); result = this.executeAction("admin", actionCode, ticketCode, params); assertEquals(Action.SUCCESS, result); assertEquals(Ticket.STATES_ASSIGNABLE, this._ticketManager.getTicket(ticketCode).getStatus()); List<TicketOperation> operations = this._ticketManager.getTicketOperations(ticketCode); assertEquals(1, operations.size()); TicketOperation operation = operations.get(0); assertEquals(TicketOperation.OPERATIONS_SETASSIGNABLE, operation.getOperationCode()); assertEquals(null, operation.getNote()); result = this.executeAction("admin", actionCode, t2.getCode(), params); assertEquals("opNotAllowed", result); assertEquals(1, this.getAction().getActionErrors().size()); result = this.executeAction("admin", actionCode, t3.getCode(), params); assertEquals("opNotAllowed", result); assertEquals(1, this.getAction().getActionErrors().size()); result = this.executeAction("admin", actionCode, t4.getCode(), params); assertEquals("opNotAllowed", result); assertEquals(1, this.getAction().getActionErrors().size()); } catch (Throwable t) { throw t; } finally { this._helper.deleteTickets(); } } public void testAnswer() throws Throwable { String actionCode = "answer"; Map<String, String> params = new HashMap<String, String>(); try { assertEquals(0, this._ticketManager.searchTicketIds(null).size()); Ticket t1 = this._helper.createTicket(null, new Date(), "email1@inesistente.itte", "message1", "mainEditor", 0, 0, null, null, Ticket.STATES_OPENED, null, false); this._ticketManager.addTicket(t1); Ticket t2 = this._helper.createTicket(null, new Date(), "email2@inesistente.itte", "message2", "mainEditor", 0, 0, "pageManagerCustomers", null, Ticket.STATES_ASSIGNABLE, null, false); this._ticketManager.addTicket(t2); Ticket t3 = this._helper.createTicket(null, new Date(), "email3@inesistente.itte", "message3", "mainEditor", 0, 0, "admin", null, Ticket.STATES_ASSIGNED, null, false); this._ticketManager.addTicket(t3); Ticket t4 = this._helper.createTicket(null, new Date(), "", "message4", "mainEditor", 0, 0, "admin", null, Ticket.STATES_ASSIGNED, null, false); this._ticketManager.addTicket(t4); Ticket t5 = this._helper.createTicket(null, new Date(), "email5@inesistente.itte", "message5", "mainEditor", 0, 0, "pageManagerCustomers", null, Ticket.STATES_CLOSED, null, false); this._ticketManager.addTicket(t5); Ticket t6 = this._helper.createTicket(null, new Date(), "email6@inesistente.itte", "message6", "mainEditor", 0, 0, "mainEditor", null, Ticket.STATES_ASSIGNED, null, false); this._ticketManager.addTicket(t6); Ticket current = t3; String result = this.executeAction("admin", actionCode, current.getCode(), params); assertEquals(Action.INPUT, result); assertEquals(0, this.getAction().getActionErrors().size()); Map fieldErrors = this.getAction().getFieldErrors(); assertEquals(1, fieldErrors.size()); assertNotNull(fieldErrors.get("message")); params.put("message", "note"); result = this.executeAction("admin", actionCode, current.getCode(), params); assertEquals(Action.SUCCESS, result); Ticket ticket = this._ticketManager.getTicket(current.getCode()); assertEquals(Ticket.STATES_ASSIGNED, ticket.getStatus()); List<TicketOperation> operations = this._ticketManager.getTicketOperations(current.getCode()); assertEquals(1, operations.size()); TicketOperation operation = operations.get(0); assertEquals(TicketOperation.OPERATIONS_ANSWER, operation.getOperationCode()); assertEquals("note", operation.getNote()); current = t1; result = this.executeAction("admin", actionCode, current.getCode(), params); assertEquals("opNotAllowed", result); assertEquals(1, this.getAction().getActionErrors().size()); current = t2; result = this.executeAction("admin", actionCode, current.getCode(), params); assertEquals("opNotAllowed", result); assertEquals(1, this.getAction().getActionErrors().size()); current = t5; result = this.executeAction("admin", actionCode, current.getCode(), params); assertEquals("opNotAllowed", result); assertEquals(1, this.getAction().getActionErrors().size()); current = t6; result = this.executeAction("admin", actionCode, current.getCode(), params); assertEquals("opNotAllowed", result); assertEquals(1, this.getAction().getActionErrors().size()); current = t6; result = this.executeAction("mainEditor", actionCode, current.getCode(), params); assertEquals(Action.SUCCESS, result); current = t4; result = this.executeAction("admin", actionCode, current.getCode(), params); assertEquals(Action.INPUT, result); assertEquals(1, this.getAction().getActionErrors().size()); } catch (Throwable t) { throw t; } finally { this._helper.deleteTickets(); } } public void testUpdate() throws Throwable { String actionCode = "update"; Map<String, String> params = new HashMap<String, String>(); params.put("interventionType", "10"); params.put("priority", "10"); try { assertEquals(0, this._ticketManager.searchTicketIds(null).size()); Ticket t1 = this._helper.createTicket(null, new Date(), "email1@inesistente.itte", "message1", "mainEditor", 0, 0, null, null, Ticket.STATES_OPENED, null, false); this._ticketManager.addTicket(t1); Ticket t2 = this._helper.createTicket(null, new Date(), "email2@inesistente.itte", "message2", "mainEditor", 0, 0, "pageManagerCustomers", null, Ticket.STATES_ASSIGNABLE, null, false); this._ticketManager.addTicket(t2); Ticket t3 = this._helper.createTicket(null, new Date(), "email3@inesistente.itte", "message3", "mainEditor", 0, 0, "admin", null, Ticket.STATES_ASSIGNED, null, false); this._ticketManager.addTicket(t3); Ticket t4 = this._helper.createTicket(null, new Date(), "email4@inesistente.itte", "message4", "mainEditor", 0, 0, "mainEditor", null, Ticket.STATES_ASSIGNED, null, false); this._ticketManager.addTicket(t4); Ticket t5 = this._helper.createTicket(null, new Date(), "email5@inesistente.itte", "message5", "mainEditor", 0, 0, "pageManagerCustomers", null, Ticket.STATES_CLOSED, null, false); this._ticketManager.addTicket(t5); Ticket current = t3; String result = this.executeAction("admin", actionCode, current.getCode(), params); assertEquals(Action.INPUT, result); assertEquals(0, this.getAction().getActionErrors().size()); Map fieldErrors = this.getAction().getFieldErrors(); assertEquals(2, fieldErrors.size()); assertNotNull(fieldErrors.get("interventionType")); assertNotNull(fieldErrors.get("priority")); params.put("interventionType", "1"); params.put("priority", "1"); params.put("note", "note"); result = this.executeAction("admin", actionCode, current.getCode(), params); assertEquals(Action.SUCCESS, result); Ticket ticket = this._ticketManager.getTicket(current.getCode()); assertEquals(Ticket.STATES_ASSIGNED, ticket.getStatus()); assertEquals(1, ticket.getOpInterventionType()); assertEquals(0, ticket.getUserInterventionType()); assertEquals(1, ticket.getPriority()); List<TicketOperation> operations = this._ticketManager.getTicketOperations(current.getCode()); assertEquals(1, operations.size()); TicketOperation operation = operations.get(0); assertEquals(TicketOperation.OPERATIONS_UPDATE, operation.getOperationCode()); assertEquals("note", operation.getNote()); current = t1; result = this.executeAction("admin", actionCode, current.getCode(), params); assertEquals("opNotAllowed", result); assertEquals(1, this.getAction().getActionErrors().size()); current = t2; result = this.executeAction("admin", actionCode, current.getCode(), params); assertEquals("opNotAllowed", result); assertEquals(1, this.getAction().getActionErrors().size()); current = t4; result = this.executeAction("admin", actionCode, current.getCode(), params); assertEquals("opNotAllowed", result); assertEquals(1, this.getAction().getActionErrors().size()); result = this.executeAction("mainEditor", actionCode, current.getCode(), params); assertEquals(Action.SUCCESS, result); current = t5; result = this.executeAction("admin", actionCode, current.getCode(), params); assertEquals("opNotAllowed", result); assertEquals(1, this.getAction().getActionErrors().size()); } catch (Throwable t) { throw t; } finally { this._helper.deleteTickets(); } } public void testClose() throws Throwable { String actionCode = "close"; Map<String, String> params = new HashMap<String, String>(); params.put("interventionType", "10"); params.put("priority", "10"); try { assertEquals(0, this._ticketManager.searchTicketIds(null).size()); Ticket t1 = this._helper.createTicket(null, new Date(), "email1@inesistente.itte", "message1", "mainEditor", 0, 0, null, null, Ticket.STATES_OPENED, null, false); this._ticketManager.addTicket(t1); Ticket t2 = this._helper.createTicket(null, new Date(), "email2@inesistente.itte", "message2", "mainEditor", 0, 0, "pageManagerCustomers", null, Ticket.STATES_ASSIGNABLE, null, false); this._ticketManager.addTicket(t2); Ticket t3 = this._helper.createTicket(null, new Date(), "email3@inesistente.itte", "message3", "mainEditor", 0, 0, "admin", null, Ticket.STATES_ASSIGNED, null, false); this._ticketManager.addTicket(t3); Ticket t4 = this._helper.createTicket(null, new Date(), "email4@inesistente.itte", "message4", "mainEditor", 0, 0, "mainEditor", null, Ticket.STATES_ASSIGNED, null, false); this._ticketManager.addTicket(t4); Ticket t5 = this._helper.createTicket(null, new Date(), "email5@inesistente.itte", "message5", "mainEditor", 0, 0, "pageManagerCustomers", null, Ticket.STATES_CLOSED, null, false); this._ticketManager.addTicket(t5); Ticket current = t1; String result = this.executeAction("admin", actionCode, current.getCode(), params); assertEquals("opNotAllowed", result); assertEquals(1, this.getAction().getActionErrors().size()); current = t2; result = this.executeAction("admin", actionCode, current.getCode(), params); assertEquals("opNotAllowed", result); assertEquals(1, this.getAction().getActionErrors().size()); current = t3; result = this.executeAction("admin", actionCode, current.getCode(), params); assertEquals(Action.SUCCESS, result); Ticket ticket = this._ticketManager.getTicket(current.getCode()); assertEquals(Ticket.STATES_CLOSED, ticket.getStatus()); assertEquals(false, ticket.isResolved()); List<TicketOperation> operations = this._ticketManager.getTicketOperations(current.getCode()); assertEquals(1, operations.size()); TicketOperation operation = operations.get(0); assertEquals(TicketOperation.OPERATIONS_CLOSE, operation.getOperationCode()); current = t4; result = this.executeAction("admin", actionCode, current.getCode(), params); assertEquals("opNotAllowed", result); assertEquals(1, this.getAction().getActionErrors().size()); params.put("resolved", "true"); result = this.executeAction("mainEditor", actionCode, current.getCode(), params); assertEquals(Action.SUCCESS, result); ticket = this._ticketManager.getTicket(current.getCode()); assertEquals(Ticket.STATES_CLOSED, ticket.getStatus()); assertEquals(true, ticket.isResolved()); operations = this._ticketManager.getTicketOperations(current.getCode()); assertEquals(1, operations.size()); operation = operations.get(0); assertEquals(TicketOperation.OPERATIONS_CLOSE, operation.getOperationCode()); current = t5; result = this.executeAction("admin", actionCode, current.getCode(), params); assertEquals("opNotAllowed", result); assertEquals(1, this.getAction().getActionErrors().size()); } catch (Throwable t) { throw t; } finally { this._helper.deleteTickets(); } } public void testRelease() throws Throwable { String actionCode = "release"; try { assertEquals(0, this._ticketManager.searchTicketIds(null).size()); Ticket t1 = this._helper.createTicket(null, new Date(), "subject1", "message1", "mainEditor", 0, 0, null, null, Ticket.STATES_OPENED, null, false); this._ticketManager.addTicket(t1); Ticket t2 = this._helper.createTicket(null, new Date(), "subject2", "message2", "mainEditor", 0, 0, "pageManagerCustomers", null, Ticket.STATES_ASSIGNABLE, null, false); this._ticketManager.addTicket(t2); Ticket t3 = this._helper.createTicket(null, new Date(), "subject3", "message3", "mainEditor", 0, 0, "mainEditor", null, Ticket.STATES_ASSIGNED, null, false); this._ticketManager.addTicket(t3); Ticket t5 = this._helper.createTicket(null, new Date(), "subject5", "message5", "mainEditor", 0, 0, "pageManagerCustomers", null, Ticket.STATES_CLOSED, null, false); this._ticketManager.addTicket(t5); Ticket t4 = this._helper.createTicket(null, new Date(), "email4@inesistente.itte", "message4", "mainEditor", 0, 0, "mainEditor", null, Ticket.STATES_ASSIGNED, null, false); this._ticketManager.addTicket(t4); String ticketCode = t2.getCode(); String result = this.executeAction("admin", actionCode, ticketCode); assertEquals(Action.SUCCESS, result); assertEquals(Ticket.STATES_WORKING, this._ticketManager.getTicket(ticketCode).getStatus()); List<TicketOperation> operations = this._ticketManager.getTicketOperations(ticketCode); assertEquals(1, operations.size()); assertEquals(TicketOperation.OPERATIONS_RELEASE, operations.get(0).getOperationCode()); ticketCode = t3.getCode(); result = this.executeAction("admin", actionCode, ticketCode); assertEquals(Action.SUCCESS, result); assertEquals(Ticket.STATES_WORKING, this._ticketManager.getTicket(ticketCode).getStatus()); operations = this._ticketManager.getTicketOperations(ticketCode); assertEquals(1, operations.size()); assertEquals(TicketOperation.OPERATIONS_RELEASE, operations.get(0).getOperationCode()); ticketCode = t4.getCode(); result = this.executeAction("mainEditor", actionCode, ticketCode); assertEquals(Action.SUCCESS, result); assertEquals(Ticket.STATES_WORKING, this._ticketManager.getTicket(ticketCode).getStatus()); operations = this._ticketManager.getTicketOperations(ticketCode); assertEquals(1, operations.size()); assertEquals(TicketOperation.OPERATIONS_RELEASE, operations.get(0).getOperationCode()); result = this.executeAction("admin", actionCode, t1.getCode()); assertEquals("opNotAllowed", result); assertEquals(1, this.getAction().getActionErrors().size()); result = this.executeAction("admin", actionCode, t5.getCode()); assertEquals("opNotAllowed", result); assertEquals(1, this.getAction().getActionErrors().size()); result = this.executeAction("admin", actionCode, "notExistantCode"); assertEquals("ticketNotFound", result); assertEquals(1, this.getAction().getActionErrors().size()); } catch (Throwable t) { throw t; } finally { this._helper.deleteTickets(); } } private String executeAction(String username, String action, String code) throws Throwable { this.setUserOnSession(username); this.initAction("/do/jpwtt/Ticket", action); this.addParameter("code", code); String result = this.executeAction(); return result; } private String executeAction(String username, String action, String code, Map<String, String> params) throws Throwable { this.setUserOnSession(username); this.initAction("/do/jpwtt/Ticket", action); this.addParameter("code", code); this.addParameters(params); String result = this.executeAction(); return result; } }