/*
* Copyright 2015-Present Entando Inc. (http://www.entando.com) All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package com.agiletec.plugins.jpsurvey.apsadmin.survey;
import com.agiletec.plugins.jpsurvey.apsadmin.ApsAdminPluginBaseTestCase;
import com.agiletec.apsadmin.system.ApsAdminSystemConstants;
import com.agiletec.apsadmin.system.BaseAction;
import com.agiletec.plugins.jpsurvey.aps.system.services.SurveySystemConstants;
import com.agiletec.plugins.jpsurvey.aps.system.services.collect.IResponseManager;
import com.agiletec.plugins.jpsurvey.aps.system.services.survey.ISurveyManager;
import com.agiletec.plugins.jpsurvey.aps.system.services.survey.model.Question;
import com.agiletec.plugins.jpsurvey.aps.system.services.survey.model.Survey;
import com.agiletec.plugins.jpsurvey.apsadmin.survey.QuestionAction;
import com.opensymphony.xwork2.Action;
public class TestQuestionAction extends ApsAdminPluginBaseTestCase {
@Override
protected void setUp() throws Exception {
super.setUp();
this.init();
}
private void init() {
this.setResponseManager((IResponseManager) this.getService(SurveySystemConstants.SURVEY_RESPONSE_MANAGER));
this.setSurveyManager((ISurveyManager) this.getService(SurveySystemConstants.SURVEY_MANAGER));
}
//TODO FARE CONTROLLO NUMERI ERRORI E CAMPI
public void testEditSingleQuestion() throws Throwable {
String result = null;
try {
this.setUserOnSession("admin");
// edit with no parameters
this.initAction("/do/jpsurvey/Survey", "editSingleQuestion");
result = this.executeAction();
assertNotNull(result);
assertEquals(BaseAction.INPUT, result);
// edit unknown ID
this.initAction("/do/jpsurvey/Survey", "editSingleQuestion");
this.addParameter("questionId", -1);
result = this.executeAction();
assertNotNull(result);
assertEquals(BaseAction.INPUT, result);
// edit known ID
this.initAction("/do/jpsurvey/Survey", "editSingleQuestion");
this.addParameter("questionId", 1);
result = this.executeAction();
assertEquals(BaseAction.SUCCESS, result);
} catch (Throwable t) {
throw t;
}
}
//TODO FARE CONTROLLO NUMERI ERRORI E CAMPI
public void testSaveQuestion() throws Throwable {
Survey survey = this.getFakeActiveSurvey();
String result = null;
try {
this.setUserOnSession("admin");
survey.getQuestions().clear();
survey.setQuestionnaire(false);
survey.setActive(true);
this.getSurveyManager().saveSurvey(survey);
survey = this.getSurveyManager().loadSurvey(survey.getId());
assertTrue(survey.getQuestions().isEmpty());
// invoke without parameters
this.initAction("/do/jpsurvey/Survey", "saveQuestion");
result = this.executeAction();
assertNotNull(result);
assertEquals(BaseAction.INPUT, result);
// add a new question to the current survey
this.initAction("/do/jpsurvey/Survey", "saveQuestion");
this.addParameter("strutsAction", ApsAdminSystemConstants.ADD);
this.addParameter("questionnaire", true);
this.addParameter("surveyId", survey.getId());
this.addParameter("question-it", "La risposta a tutto è: ....");
this.addParameter("questionId", -1); // NOT NEEDED
result = this.executeAction();
assertNotNull(result);
assertEquals("editSingleQuestion", result);
survey = this.getSurveyManager().loadSurvey(survey.getId());
assertFalse(survey.getQuestions().isEmpty());
assertEquals("La risposta a tutto è: ....", survey.getQuestions().get(0).getQuestions().get("it"));
// modify an existing question
this.initAction("/do/jpsurvey/Survey", "saveQuestion");
this.addParameter("strutsAction", ApsAdminSystemConstants.EDIT);
this.addParameter("questionnaire", true);
this.addParameter("surveyId", survey.getId());
this.addParameter("question-it", "42");
this.addParameter("singleChoice", 1);
this.addParameter("questionId", survey.getQuestions().get(0).getId());
result = this.executeAction();
assertNotNull(result);
assertEquals(BaseAction.SUCCESS, result);
survey = this.getSurveyManager().loadSurvey(survey.getId());
assertFalse(survey.getQuestions().isEmpty());
assertEquals("42", survey.getQuestions().get(0).getQuestions().get("it"));
} catch (Throwable t) {
throw t;
} finally {
if (null != survey) {
this.getSurveyManager().deleteSurvey(survey.getId());
}
}
}
//TODO FARE CONTROLLO NUMERI ERRORI E CAMPI
public void testDeleteQuestion() throws Throwable {
Survey survey = this.createFakeSurveyForTest(false, true, false);
Question question = null;
String result = null;
try {
this.setUserOnSession("admin");
// save the survey
this.getSurveyManager().saveSurvey(survey);
// update internal id's by reloading the object
survey = this.getSurveyManager().loadSurvey(survey.getId());
assertFalse(survey.getQuestions().isEmpty()); // FIXME delete this
// delete known ID
this.initAction("/do/jpsurvey/Survey", "deleteQuestion");
this.addParameter("questionId", survey.getQuestions().get(0).getId());
result = this.executeAction();
assertNotNull(result);
assertEquals(BaseAction.SUCCESS, result);
question = this.getSurveyManager().loadQuestion(survey.getQuestions().get(0).getId());
assertNull(question);
// delete unknown ID
this.initAction("/do/jpsurvey/Survey", "deleteQuestion");
this.addParameter("questionId", -1);
result = this.executeAction();
assertNotNull(result);
assertEquals(BaseAction.SUCCESS, result);
// invoke with no params
this.initAction("/do/jpsurvey/Survey", "deleteQuestion");
result = this.executeAction();
assertNotNull(result);
assertEquals(BaseAction.INPUT, result);
} catch (Throwable t) {
throw t;
} finally {
this.getSurveyManager().deleteSurvey(survey.getId());
}
}
//TODO FARE CONTROLLO NUMERI ERRORI E CAMPI
public void testMoveQuestionUp() throws Throwable {
Survey survey = this.createFakeSurveyForTest(false, true, false);
Survey expected = null;
String result = null;
try {
this.setUserOnSession("admin");
// save the survey
this.getSurveyManager().saveSurvey(survey);
// update internal id's by reloading the object
survey = this.getSurveyManager().loadSurvey(survey.getId());
assertEquals(2, survey.getQuestions().size());
// load a copy
expected = this.getSurveyManager().loadSurvey(survey.getId());
// invoke without arguments
this.initAction("/do/jpsurvey/Survey", "moveQuestionUp");
result = this.executeAction();
assertNotNull(result);
assertEquals(BaseAction.INPUT, result);
// swap unknown id
this.initAction("/do/jpsurvey/Survey", "moveQuestionUp");
this.addParameter("questionId", -1);
result = this.executeAction();
assertNotNull(result);
assertEquals(BaseAction.SUCCESS, result);
survey = this.getSurveyManager().loadSurvey(survey.getId());
assertEquals(expected.getQuestions().get(0).getId(), survey.getQuestions().get(0).getId());
assertEquals(expected.getQuestions().get(1).getId(), survey.getQuestions().get(1).getId());
// swap known id
this.initAction("/do/jpsurvey/Survey", "moveQuestionUp");
this.addParameter("questionId", survey.getQuestions().get(1).getId());
result = this.executeAction();
assertNotNull(result);
assertEquals(BaseAction.SUCCESS, result);
survey = this.getSurveyManager().loadSurvey(survey.getId());
assertEquals(expected.getQuestions().get(0).getId(), survey.getQuestions().get(1).getId());
assertEquals(expected.getQuestions().get(1).getId(), survey.getQuestions().get(0).getId());
this.initAction("/do/jpsurvey/Survey", "moveQuestionUp");
this.addParameter("questionId", survey.getQuestions().get(1).getId());
result = this.executeAction();
assertNotNull(result);
assertEquals(BaseAction.SUCCESS, result);
survey=getSurveyManager().loadSurvey(survey.getId());
assertEquals(expected.getQuestions().get(0).getId(), survey.getQuestions().get(0).getId());
} catch (Throwable t) {
throw t;
} finally {
getSurveyManager().deleteSurvey(survey.getId());
}
}
//TODO FARE CONTROLLO NUMERI ERRORI E CAMPI
public void testMoveQuestionDown() throws Throwable {
Survey survey = this.createFakeSurveyForTest(false, true, false);
Survey expected = null;
String result = null;
try {
this.setUserOnSession("admin");
// save the survey
this.getSurveyManager().saveSurvey(survey);
survey = this.getSurveyManager().loadSurvey(survey.getId());
assertEquals(2, survey.getQuestions().size());
expected = this.getSurveyManager().loadSurvey(survey.getId());
// invoke without arguments
this.initAction("/do/jpsurvey/Survey", "moveQuestionDown");
result = this.executeAction();
assertNotNull(result);
assertEquals(BaseAction.INPUT, result);
// swap unknown id
this.initAction("/do/jpsurvey/Survey", "moveQuestionDown");
this.addParameter("questionId", -1);
result = this.executeAction();
assertNotNull(result);
assertEquals(BaseAction.SUCCESS, result);
survey = this.getSurveyManager().loadSurvey(survey.getId());
assertEquals(expected.getQuestions().get(0).getId(), survey.getQuestions().get(0).getId());
assertEquals(expected.getQuestions().get(1).getId(), survey.getQuestions().get(1).getId());
expected = survey;
this.initAction("/do/jpsurvey/Survey", "moveQuestionDown");
this.addParameter("questionId", survey.getQuestions().get(0).getId());
result = this.executeAction();
assertNotNull(result);
assertEquals(BaseAction.SUCCESS, result);
survey = this.getSurveyManager().loadSurvey(survey.getId());
assertEquals(expected.getQuestions().get(0).getId(), survey.getQuestions().get(1).getId());
assertEquals(expected.getQuestions().get(1).getId(), survey.getQuestions().get(0).getId());
this.initAction("/do/jpsurvey/Survey", "moveQuestionDown");
this.addParameter("questionId", survey.getQuestions().get(0).getId());
result = this.executeAction();
assertNotNull(result);
assertEquals(BaseAction.SUCCESS, result);
survey = this.getSurveyManager().loadSurvey(survey.getId());
assertEquals(expected.getQuestions().get(1).getId(), survey.getQuestions().get(1).getId());
} catch (Throwable t) {
throw t;
} finally {
this.getSurveyManager().deleteSurvey(survey.getId());
}
}
//TODO FARE CONTROLLO NUMERI ERRORI E CAMPI
// NOTE: this will return SUCCESS only when you are allowed to add a new text
public void testAddFreeText() throws Throwable {
Survey survey = this.createFakeSurveyForTest(false, true, false);
Survey free = this.createFakeSurveyForTest(false, true, true);
String result = null;
try {
this.setUserOnSession("admin");
// save the survey
this.getSurveyManager().saveSurvey(survey);
// update internal id's by reloading the object
survey = this.getSurveyManager().loadSurvey(survey.getId());
this.getSurveyManager().saveSurvey(free);
free = this.getSurveyManager().loadSurvey(free.getId());
// invoke without arguments
this.initAction("/do/jpsurvey/Survey", "addFreeText");
result = this.executeAction();
assertNotNull(result);
assertEquals(BaseAction.INPUT, result);
// add choice to unknown question
this.initAction("/do/jpsurvey/Survey", "addFreeText");
this.addParameter("questionId", -1);
result = this.executeAction();
assertNotNull(result);
assertEquals(BaseAction.INPUT, result);
// request to add new question with valid data
this.initAction("/do/jpsurvey/Survey", "addFreeText");
this.addParameter("questionId", survey.getQuestions().get(0).getId());
this.addParameter("questionnaire", true);
this.addParameter("strutsAction", ApsAdminSystemConstants.EDIT);
this.addParameter("singleChoice", true);
this.addParameter("question-it", "TEST");
result = this.executeAction();
assertNotNull(result);
assertEquals(BaseAction.SUCCESS, result);
// request to add new question with valid data
this.initAction("/do/jpsurvey/Survey", "addFreeText");
this.addParameter("questionId", free.getQuestions().get(0).getId());
this.addParameter("questionnaire", true);
this.addParameter("strutsAction", ApsAdminSystemConstants.EDIT);
this.addParameter("singleChoice", true);
this.addParameter("question-it", "TEST");
result = this.executeAction();
assertNotNull(result);
assertEquals("noMoreFreeText", result);
} catch (Throwable t) {
throw t;
} finally {
getSurveyManager().deleteSurvey(survey.getId());
getSurveyManager().deleteSurvey(free.getId());
}
}
//TODO FARE CONTROLLO NUMERI ERRORI E CAMPI
public void testAddChoice() throws Throwable {
Survey survey = this.createFakeSurveyForTest(false, true, true);
String result = null;
try {
this.setUserOnSession("admin");
// save the survey
this.getSurveyManager().saveSurvey(survey);
// update internal id's by reloading the object
survey = this.getSurveyManager().loadSurvey(survey.getId());
// invoke without arguments
this.initAction("/do/jpsurvey/Survey", "addChoice");
result = this.executeAction();
assertNotNull(result);
assertEquals(BaseAction.INPUT, result);
// invoke without arguments
this.initAction("/do/jpsurvey/Survey", "addChoice");
this.addParameter("questionId", survey.getQuestions().get(0).getId());
this.addParameter("questionnaire", true);
this.addParameter("strutsAction", ApsAdminSystemConstants.EDIT);
this.addParameter("singleChoice", true);
this.addParameter("question-it", "TEST");
result = this.executeAction();
assertNotNull(result);
assertEquals(BaseAction.SUCCESS, result);
} catch (Throwable t) {
throw t;
} finally {
this.getSurveyManager().deleteSurvey(survey.getId());
}
}
public void testTrashQuestion() throws Throwable {
String result = null;
QuestionAction action = null;
try {
this.setUserOnSession("admin");
// test with no question ID
this.initAction("/do/jpsurvey/Survey", "trashQuestion");
result = this.executeAction();
assertNotNull(result);
assertEquals(Action.INPUT, result);
// test with no question ID
this.initAction("/do/jpsurvey/Survey", "trashQuestion");
this.addParameter("QuestionId", -1);
result = this.executeAction();
assertNotNull(result);
assertEquals(Action.SUCCESS, result);
action = (QuestionAction) this.getAction();
assertNotNull(action.getQuestions());
assertTrue(action.getQuestions().isEmpty());
// test with valid question ID
this.initAction("/do/jpsurvey/Survey", "trashQuestion");
this.addParameter("QuestionId", 1);
result = this.executeAction();
assertNotNull(result);
assertEquals(Action.SUCCESS, result);
action = (QuestionAction) this.getAction();
assertNotNull(action.getQuestion());
assertEquals(3, action.getQuestion().getChoices().size());
} catch (Throwable t) {
throw t;
}
}
public IResponseManager getResponseManager() {
return _responseManager;
}
public void setResponseManager(IResponseManager responseManager) {
this._responseManager = responseManager;
}
public void setSurveyManager(ISurveyManager surveyManager) {
this._surveyManager = surveyManager;
}
public ISurveyManager getSurveyManager() {
return _surveyManager;
}
private IResponseManager _responseManager;
private ISurveyManager _surveyManager;
}