/*
*
* 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.jpwebdynamicform.apsadmin.message;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.agiletec.plugins.jpwebdynamicform.apsadmin.ApsAdminPluginBaseTestCase;
import com.agiletec.plugins.jpwebdynamicform.util.JpwebdynamicformTestHelper;
import com.agiletec.aps.util.DateConverter;
import com.agiletec.plugins.jpmail.aps.services.JpmailSystemConstants;
import com.agiletec.plugins.jpmail.aps.services.mail.IMailManager;
import com.agiletec.plugins.jpmail.aps.services.mail.MailManager;
import com.agiletec.plugins.jpwebdynamicform.aps.system.services.message.model.Answer;
import com.agiletec.plugins.jpwebdynamicform.aps.system.services.message.model.Message;
import com.agiletec.plugins.jpwebdynamicform.apsadmin.message.common.AbstractMessageAction;
import com.opensymphony.xwork2.Action;
public class TestOperatorMessageAction extends ApsAdminPluginBaseTestCase {
@Override
protected void setUp() throws Exception {
super.setUp();
this.activeMailManager(false);
}
public void testView() throws Throwable {
String result = this.executeView("admin", "PER", "1");
assertEquals("messageNotFound", result);
Message message = this._helper.createMessage(null, "mainEditor", "it", new Date(), "MyName", "MySurname", "MyAddress", JpwebdynamicformTestHelper.EMAIL, "MyNotes");
this._helper.addMessage(message);
String messageId = message.getId();
Answer answer1 = this._helper.createAnswer("1", messageId, "mainEditor", new Date(), "text1");
this._helper.addAnswer(answer1);
Answer answer2 = this._helper.createAnswer("2", messageId, "mainEditor", new Date(), "text2");
this._helper.addAnswer(answer2);
result = this.executeView("admin", "PER", messageId);
assertEquals(Action.SUCCESS, result);
AbstractMessageAction action = (AbstractMessageAction) this.getAction();
Message receivedMessage = action.getMessage();
this.compareMessages(message, receivedMessage);
List<Answer> answers = action.getAnswers();
assertEquals(2, answers.size());
for (Answer answer : answers) {
if (answer.getAnswerId().equals(answer1.getAnswerId())) {
this.compareAnswer(answer1, answer);
} else {
this.compareAnswer(answer2, answer);
}
}
}
public void testNewAnswer() throws Throwable {
String result = this.executeNewAnswer("admin", "PER", "1");
assertEquals("messageNotFound", result);
Message message1 = this._helper.createMessage(null, "mainEditor", "it", new Date(), "MyName1", "MySurname1", "MyAddress1", "", "MyNotes1");
this._helper.addMessage(message1);
Message message2 = this._helper.createMessage(null, "mainEditor", "it", new Date(), "MyName2", "MySurname2", "MyAddress2", JpwebdynamicformTestHelper.EMAIL, "MyNotes2");
this._helper.addMessage(message2);
String messageId = message1.getId();
result = this.executeNewAnswer("admin", "PER", messageId);
assertEquals(Action.INPUT, result);
Collection<String> actionErrors = this.getAction().getActionErrors();
assertEquals(1, actionErrors.size());
assertTrue(((String) actionErrors.toArray()[0]).contains(this.getAction().getText("Message.eMailAddress.notFound")));
messageId = message2.getId();
result = this.executeNewAnswer("admin", "PER", messageId);
assertEquals(Action.SUCCESS, result);
}
public void testSendAnswerFailure() throws Throwable {
Message message1 = this._helper.createMessage(null, "mainEditor", "it", new Date(), "MyName1", "MySurname1", "MyAddress1", "", "MyNotes1");
this._helper.addMessage(message1);
Message message2 = this._helper.createMessage(null, "mainEditor", "it", new Date(), "MyName2", "MySurname2", "MyAddress2", JpwebdynamicformTestHelper.EMAIL, "MyNotes2");
this._helper.addMessage(message2);
// Message without eMail address.
String messageId = message1.getId();
Map<String, String> params = new HashMap<String, String>();
params.put("id", messageId);
params.put("text", "Text of answer");
String result = this.executeSendAnswer("admin", params);
assertEquals("messageNotFound", result);
// Incomplete fields
messageId = message2.getId(); // Message with eMail address.
params.put("id", messageId);
params.put("text", "");
result = this.executeSendAnswer("admin", params);
assertEquals(Action.INPUT, result);
Map<String, List<String>> fieldErrors = this.getAction().getFieldErrors();
assertEquals(1, fieldErrors.size());
List<String> currentFielderrors = fieldErrors.get("text");
assertEquals(1, currentFielderrors.size());
assertTrue(((String) currentFielderrors.get(0)).contains(this.getAction().getText("requiredstring")));
}
public void testSendAnswer() throws Throwable {
Message message1 = this._helper.createMessage(null, "mainEditor", "it", new Date(), "MyName1", "MySurname1", "MyAddress1", "", "MyNotes1");
this._helper.addMessage(message1);
Message message2 = this._helper.createMessage(null, "mainEditor", "it", new Date(), "MyName2", "MySurname2", "MyAddress2", JpwebdynamicformTestHelper.EMAIL, "MyNotes2");
this._helper.addMessage(message2);
String messageId = message2.getId(); // Message with eMail address.
Map<String, String> params = new HashMap<String, String>();
params.put("id", messageId);
params.put("text", "Text of answer");
String result = this.executeSendAnswer("admin", params);
assertEquals(Action.SUCCESS, result);
List<Answer> addedAnswers = this._messageManager.getAnswers(messageId);
assertEquals(1, addedAnswers.size());
Answer answer = addedAnswers.get(0);
assertEquals(messageId, answer.getMessageId());
assertEquals("admin", answer.getOperator());
assertEquals("Text of answer", answer.getText());
assertNotNull(answer.getAnswerId());
assertNotNull(answer.getSendDate());
}
public void testTrash() throws Throwable {
Message message = this._helper.createMessage(null, "mainEditor", "it", new Date(), "MyName", "MySurname", "MyAddress", JpwebdynamicformTestHelper.EMAIL, "MyNotes");
this._helper.addMessage(message);
String messageId = message.getId();
assertNotNull(this._messageManager.getMessage(messageId));
Answer answer1 = this._helper.createAnswer("1", messageId, "mainEditor", new Date(), "text1");
this._helper.addAnswer(answer1);
String result = this.executeTrash("admin", messageId+"unknow");
assertEquals("messageNotFound", result);
result = this.executeTrash("admin", messageId);
assertEquals(Action.SUCCESS, result);
assertNotNull(this._messageManager.getMessage(messageId));
}
public void testDelete() throws Throwable {
Message message = this._helper.createMessage(null, "mainEditor", "it", new Date(), "MyName", "MySurname", "MyAddress", JpwebdynamicformTestHelper.EMAIL, "MyNotes");
this._helper.addMessage(message);
String messageId = message.getId();
assertNotNull(this._messageManager.getMessage(messageId));
Answer answer1 = this._helper.createAnswer("1", messageId, "mainEditor", new Date(), "text1");
this._helper.addAnswer(answer1);
String result = this.executeDelete("admin", messageId+"unknow");
assertEquals("messageNotFound", result);
result = this.executeDelete("admin", messageId);
assertEquals(Action.SUCCESS, result);
assertNull(this._messageManager.getMessage(messageId));
}
private void compareMessages(Message expected, Message received) {
assertEquals(expected.getId(), received.getId());
assertEquals(expected.getDescr(), received.getDescr());
assertEquals(expected.getTypeCode(), received.getTypeCode());
assertEquals(expected.getTypeDescr(), received.getTypeDescr());
assertEquals(expected.getXML(), received.getXML());
assertEquals(expected.getUsername(), received.getUsername());
assertEquals(DateConverter.getFormattedDate(expected.getCreationDate(), "dd/MM/yyyy hh:mm:ss"),
DateConverter.getFormattedDate(received.getCreationDate(), "dd/MM/yyyy hh:mm:ss"));
}
private void compareAnswer(Answer expected, Answer received) {
assertEquals(expected.getAnswerId(), received.getAnswerId());
assertEquals(expected.getMessageId(), received.getMessageId());
assertEquals(expected.getOperator(), received.getOperator());
assertEquals(DateConverter.getFormattedDate(expected.getSendDate(), "dd/MM/yyyy hh:mm:ss"),
DateConverter.getFormattedDate(received.getSendDate(), "dd/MM/yyyy hh:mm:ss"));
assertEquals(expected.getText(), received.getText());
}
private String executeView(String username, String typeCode, String id) throws Throwable {
this.setUserOnSession(username);
this.initAction("/do/jpwebdynamicform/Message/Operator", "view");
this.addParameter("typeCode", typeCode);
this.addParameter("id", id);
return this.executeAction();
}
private String executeNewAnswer(String username, String typeCode, String id) throws Throwable {
this.setUserOnSession(username);
this.initAction("/do/jpwebdynamicform/Message/Operator", "newAnswer");
this.addParameter("typeCode", typeCode);
this.addParameter("id", id);
return this.executeAction();
}
private String executeTrash(String username, String id) throws Throwable {
this.setUserOnSession(username);
this.initAction("/do/jpwebdynamicform/Message/Operator", "trash");
this.addParameter("id", id);
return this.executeAction();
}
private String executeDelete(String username, String id) throws Throwable {
this.setUserOnSession(username);
this.initAction("/do/jpwebdynamicform/Message/Operator", "delete");
this.addParameter("id", id);
return this.executeAction();
}
private String executeSendAnswer(String username, Map<String, String> params) throws Throwable {
this.setUserOnSession(username);
this.initAction("/do/jpwebdynamicform/Message/Operator", "sendAnswer");
this.addParameters(params);
return this.executeAction();
}
@Override
protected void tearDown() throws Exception {
this.activeMailManager(true);
super.tearDown();
}
private void activeMailManager(boolean active) {
IMailManager mailManager = (IMailManager) this.getService(JpmailSystemConstants.MAIL_MANAGER);
if (mailManager instanceof MailManager) {
((MailManager) mailManager).setActive(active);
}
}
}