Package com.agiletec.plugins.jpsurvey.aps.system.services.survey

Source Code of com.agiletec.plugins.jpsurvey.aps.system.services.survey.TestSurveyManager

/*
*
* Copyright 2013 Entando S.r.l. (http://www.entando.com) All rights reserved.
*
* This file is part of Entando software.
* Entando is a free software;
* You can redistribute it and/or modify it
* under the terms of the GNU General Public License (GPL) as published by the Free Software Foundation; version 2.
*
* 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.jpsurvey.aps.system.services.survey;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import com.agiletec.plugins.jpsurvey.aps.ApsPluginBaseTestCase;

import com.agiletec.aps.util.ApsProperties;
import com.agiletec.plugins.jpsurvey.aps.system.services.survey.model.Choice;
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.aps.system.services.survey.model.SurveyRecord;

public class TestSurveyManager extends ApsPluginBaseTestCase {
 
  public void testLoadSurvey() throws Throwable {
    Survey survey = null;
    ApsProperties prop = null;
    try {
      survey = this.getSurveyManager().loadSurvey(0);
      assertNull(survey);
      survey = this.getSurveyManager().loadSurvey(1);
      assertNotNull(survey);
      assertEquals("ignored", survey.getGroupName());
      assertNotNull(survey.getDescriptions());
      assertTrue(survey.isActive());
      assertTrue(survey.isGatherUserInfo());
      assertTrue(survey.isPublicResult());
      assertFalse(survey.isPublicPartialResult());
      assertTrue(survey.isQuestionnaire());
      assertNotNull(survey.getTitles());
      assertFalse(survey.isRestricted());
      assertNotNull(survey.getQuestions());
      assertFalse(survey.getQuestions().isEmpty());
      assertEquals(2, survey.getQuestions().size());
      assertEquals("IMG001", survey.getImageId());
      prop = survey.getImageDescriptions();
      assertEquals("Barrali di notte", prop.getProperty("it"));
      // questions must belong to the same survey
      assertTrue(survey.getQuestions().get(0).getSurveyId() == survey.getId());
      assertTrue(survey.getQuestions().get(0).getSurveyId() == survey.getQuestions().get(1).getSurveyId());
      assertNotNull(survey.getQuestions().get(0).getChoices());
      // check choices size
      List<Choice> list = survey.getQuestions().get(0).getChoices();
      assertNotNull(list);
      assertEquals(4, list.size());
      assertTrue(list.get(3).isFreeText());
      assertEquals(4, list.get(3).getPos());
    } catch (Throwable t) {
      throw t;
    }
  }
 
  public void testLoadQuestion() throws Throwable {
    Question question = null;
    int[] choiceOrder = {5, 4, 7, 6};
    try {
      question = this.getSurveyManager().loadQuestion(2);
      assertNotNull(question);
      assertEquals(2, question.getId());
      assertNotNull(question.getQuestions());
      assertEquals(1, question.getPos());
      assertFalse(question.isSingleChoice());
      assertEquals(1, question.getMinResponseNumber());
      assertEquals(2, question.getMaxResponseNumber());
      List<Choice> choices = question.getChoices();
      assertNotNull(choices);
      assertEquals(4, choices.size());
      assertEquals(true, question.isQuestionnaire());
      assertEquals(true, choices.get(0).isQuestionnaire());
      assertEquals("Titolo-1", question.getSurveyTitles().get("it"));
      for (int i = 0; i < choices.size(); i++) {
        Choice choice = choices.get(i);
        assertEquals(choiceOrder[i], choice.getId());
        assertEquals(i + 1, choice.getPos());
      }
      // load unknown question
      question = this.getSurveyManager().loadQuestion(22);
      assertNull(question);
    } catch (Throwable t) {
      throw t;
    }
  }
 
  public void testSaveQuestion() throws Throwable {
    Question question = this.getFakeQuestion();
    Question question2 = this.getFakeQuestion();
    Question actual = null;
    try {
      assertEquals(1, question.getSurveyId());
      // save a complete question
      this.getSurveyManager().saveQuestion(question);
      // save question with no choices
      question2.setChoices(null);
      this.getSurveyManager().saveQuestion(question2);
      // save a standard question
      actual = this.getSurveyManager().loadQuestion(question.getId());
      assertNotNull(actual);
      assertEquals(question.getSurveyId(), actual.getSurveyId());
      assertEquals(question.getPos(), actual.getPos());
      assertEquals(question.getMinResponseNumber(), actual.getMinResponseNumber());
      assertEquals(question.getMaxResponseNumber(), actual.getMaxResponseNumber());
      assertTrue(!actual.getChoices().isEmpty());
      assertEquals(question.getChoices().size(), actual.getChoices().size());
      // save a question with no choices
      actual = this.getSurveyManager().loadQuestion(question2.getId());
      assertNotNull(actual);
      assertEquals(question2.getId(), actual.getId());
      assertEquals(question2.getSurveyId(), actual.getSurveyId());
      assertEquals(question2.getPos(), actual.getPos());
      assertEquals(question2.getMinResponseNumber(), actual.getMinResponseNumber());
      assertEquals(question2.getMaxResponseNumber(), actual.getMaxResponseNumber());
      assertTrue(actual.getChoices().isEmpty());
    } catch (Throwable t) {
      throw t;
    } finally {
      this.getSurveyManager().deleteQuestion(question.getId());
      this.getSurveyManager().deleteQuestion(question2.getId());
    }
  }
 
  public void testLoadChoice() throws Throwable {
    Choice choice=null;
    try {
      choice = this.getSurveyManager().loadChoice(669);
      assertNull(choice);
      choice = this.getSurveyManager().loadChoice(6);
      assertNotNull(choice.getChoices());
      assertTrue(choice.isFreeText());
      assertEquals("Opzione TESTO LIBERO", choice.getChoices().get("it"));
      assertEquals(2, choice.getQuestionId());
      assertEquals(4, choice.getPos());
      assertEquals(1, choice.getSurveyId());
      assertEquals(true, choice.isQuestionnaire());
      assertEquals("Question 1-2", choice.getQuestions().get("en"));
      assertEquals("Titolo-1", choice.getSurveyTitles().get("it"));
    } catch (Throwable t) {
      throw t;
    }
  }
 
  public void testGetChoiceByQuestionId() throws Throwable {
    List<Choice> list = null;
    try {
      list = this.getSurveyManager().getQuestionChoices(0);
      assertNotNull(list);
      assertTrue(list.isEmpty());
      list = this.getSurveyManager().getQuestionChoices(1);
      assertNotNull(list);
      assertEquals(3, list.size());
    } catch (Throwable t) {
      throw t;
    }
  }
 
  public void testSaveChoice() throws Throwable {
    Choice choice = null;
    List<Choice> list = null;
    int scan;
    try {
      choice = this.getFakeChoice();
      this.getSurveyManager().saveChoice(choice);
      list = this.getSurveyManager().getQuestionChoices(2);
      assertNotNull(list);
      for (scan=0; scan < list.size() && list.get(scan).getId() != choice.getId(); scan++);
      choice = list.get(scan);
      assertNotNull(choice.getChoices());
      assertEquals(96, choice.getPos());
      assertTrue(choice.isFreeText());
      assertEquals(2, choice.getQuestionId());
    } catch (Throwable t) {
      throw t;
    } finally {
      this.getSurveyManager().deleteChoice(choice.getId());
    }
  }
 
  public void testDeleteQuestion() throws Throwable {
    Survey survey = this.getFakeActiveSurvey();
    Survey actual = null;
    Question question = null;
    try {
      // delete an unknown question, no exceptions!
      question = this.getSurveyManager().loadQuestion(222);
      assertNull(question);
      this.getSurveyManager().deleteQuestion(222);
      // save a survey with a single question
      survey.getQuestions().remove(0);
      assertEquals(1, survey.getQuestions().size());
      this.getSurveyManager().saveSurvey(survey);
      this.getSurveyManager().deleteQuestion(survey.getQuestions().get(0).getId());
      actual = this.getSurveyManager().loadSurvey(survey.getId());
      assertNotNull(actual);
      assertNotNull(actual.getQuestions());
      assertTrue(actual.getQuestions().isEmpty());
    } catch (Throwable t) {
      throw t;
    } finally {
      this.getSurveyManager().deleteSurvey(survey.getId());
    }
  }
 
  public void testDeleteSurvey() throws Throwable {
    Survey survey = null;
    try {
      // delete an unknown survey
      survey = this.getSurveyManager().loadSurvey(555);
      assertNull(survey);
      this.getSurveyManager().deleteSurvey(555);
      // the deletion of existing survey is performed in other tests!
    } catch (Throwable t) {
      throw t;
    }
  }
 
  public void testSaveSurvey() throws Throwable {
    Survey survey = this.getFakeActiveSurvey();
    Survey actual = null;
    try {
      DateFormat formatter=null;
      formatter = new SimpleDateFormat("yyyy-MM-dd");
      String startDateString = formatter.format(survey.getStartDate());
      Date startDate = (Date)formatter.parse(startDateString);
      // test a complete survey
      this.getSurveyManager().saveSurvey(survey);
      actual = this.getSurveyManager().loadSurvey(survey.getId());
      assertNotNull(actual);
      assertEquals(survey.getId(), actual.getId());
      assertEquals(survey.getGroupName(), actual.getGroupName());
      assertEquals(survey.getImageId(), actual.getImageId());
      assertEquals(survey.getDescriptions(), actual.getDescriptions());
      assertEquals(survey.getEndDate(), actual.getEndDate());
      assertEquals(survey.getImageDescriptions(), actual.getImageDescriptions());
      assertEquals(startDate, actual.getStartDate());
      assertEquals(survey.getTitles(), actual.getTitles());
      assertEquals(survey.isActive(), actual.isActive());
      assertEquals(survey.isCheckCookie(), actual.isCheckCookie());
      assertEquals(survey.isCheckIpAddress(), actual.isCheckIpAddress());
      assertEquals(survey.getQuestions().size(), actual.getQuestions().size());
      for (Question currentQuestion: survey.getQuestions()) {
        Question actualQuestion = actual.getQuestion(currentQuestion.getId());
        assertNotNull(actualQuestion);
        assertEquals(currentQuestion.getPos(), actualQuestion.getPos());
        assertEquals(currentQuestion.isSingleChoice(), actualQuestion.isSingleChoice());
        assertEquals(currentQuestion.getMaxResponseNumber(), actualQuestion.getMaxResponseNumber());
        assertEquals(currentQuestion.getMinResponseNumber(), actualQuestion.getMinResponseNumber());
        assertEquals(currentQuestion.getQuestions(), actualQuestion.getQuestions());
        for (Choice currentChoice: currentQuestion.getChoices()) {
          Choice actualChoice = actual.getQuestion(currentQuestion.getId()).getChoice(currentChoice.getId());
          assertNotNull(actualChoice);
          assertEquals(currentChoice.isFreeText(), actualChoice.isFreeText());
          assertEquals(currentChoice.getPos(), actualChoice.getPos());
          assertEquals(currentChoice.getChoices(), actualChoice.getChoices());
//          System.out.println(" QUID "+currentQuestion.getId()+" CID "+currentChoice.getId());
        }
      }
      // test a survey with no choices
      this.getSurveyManager().deleteSurvey(survey.getId());
      for (Question i: survey.getQuestions()) {
        i.setChoices(new ArrayList<Choice>());
      }
      this.getSurveyManager().saveSurvey(survey);
      actual = this.getSurveyManager().loadSurvey(survey.getId());
      assertNotNull(actual);
      assertEquals(survey.getId(), actual.getId());
      assertEquals(survey.getGroupName(), actual.getGroupName());
      assertEquals(survey.getImageId(), actual.getImageId());
      assertEquals(survey.getDescriptions(), actual.getDescriptions());
      assertEquals(survey.getEndDate(), actual.getEndDate());
      assertEquals(survey.getImageDescriptions(), actual.getImageDescriptions());
      assertEquals(startDate, actual.getStartDate());
      assertEquals(survey.getTitles(), actual.getTitles());
      assertEquals(survey.isActive(), actual.isActive());
      assertEquals(survey.isCheckCookie(), actual.isCheckCookie());
      assertEquals(survey.isCheckIpAddress(), actual.isCheckIpAddress());
      assertEquals(survey.getQuestions().size(), actual.getQuestions().size());
      for (Question currentQuestion: survey.getQuestions()) {
        Question actualQuestion = actual.getQuestion(currentQuestion.getId());
        assertNotNull(actualQuestion);
        assertEquals(currentQuestion.getPos(), actualQuestion.getPos());
        assertEquals(currentQuestion.isSingleChoice(), actualQuestion.isSingleChoice());
        assertEquals(currentQuestion.getMaxResponseNumber(), actualQuestion.getMaxResponseNumber());
        assertEquals(currentQuestion.getMinResponseNumber(), actualQuestion.getMinResponseNumber());
        assertEquals(currentQuestion.getQuestions(), actualQuestion.getQuestions());
        assertNotNull(currentQuestion.getChoices());
        assertEquals(currentQuestion.getChoices().isEmpty(), actualQuestion.getChoices().isEmpty());
        // System.out.println(" QUID "+currentQuestion.getId());
      }
      // test a survey with no questions
      this.getSurveyManager().deleteSurvey(survey.getId());
      survey.getQuestions().clear();
      this.getSurveyManager().saveSurvey(survey);
      actual = this.getSurveyManager().loadSurvey(survey.getId());
      assertNotNull(actual);
      assertEquals(survey.getId(), actual.getId());
      assertEquals(survey.getGroupName(), actual.getGroupName());
      assertEquals(survey.getImageId(), actual.getImageId());
      assertEquals(survey.getDescriptions(), actual.getDescriptions());
      assertEquals(survey.getEndDate(), actual.getEndDate());
      assertEquals(survey.getImageDescriptions(), actual.getImageDescriptions());
      assertEquals(startDate, actual.getStartDate());
      assertEquals(survey.getTitles(), actual.getTitles());
      assertEquals(survey.isActive(), actual.isActive());
      assertEquals(survey.isCheckCookie(), actual.isCheckCookie());
      assertEquals(survey.isCheckIpAddress(), actual.isCheckIpAddress());
      assertNotNull(actual.getQuestions());
      assertEquals(0, actual.getQuestions().size());
      assertEquals(survey.getQuestions().size(), actual.getQuestions().size());
    } catch (Throwable t) {
      throw t;
    } finally {
      this.getSurveyManager().deleteSurvey(survey.getId());
    }
  }
 
  public void testSaveChoiceInSortedPosition() throws Throwable {
    Survey survey = null;
    Choice choice = null;
    try {
      survey = this.getFakeActiveSurvey();
      survey.getQuestions().remove(1);
      assertEquals(1, survey.getQuestions().size());
      this.getSurveyManager().saveSurvey(survey);
      survey = this.getSurveyManager().loadSurvey(survey.getId());
      assertNotNull(survey.getQuestions());
      choice = this.getFakeChoice();
      choice.setId(999);
      assertNotNull(survey.getQuestions());
      choice.setQuestionId(survey.getQuestions().get(0).getId());
      this.getSurveyManager().saveChoiceInSortedPosition(choice);
      survey = this.getSurveyManager().loadSurvey(survey.getId());
      assertNotNull(survey);
      assertNotNull(survey.getQuestions());
      assertNotNull(survey.getQuestions().get(0).getChoices());
      assertEquals(3, survey.getQuestions().get(0).getChoices().size());
      choice = survey.getQuestions().get(0).getChoices().get(2);
      assertEquals(11, choice.getPos());
    } catch (Throwable t) {
      throw t;
    } finally {
      this.getSurveyManager().deleteSurvey(survey.getId());
    }
  }
 
  public void testUpdateChoice() throws Throwable {
    Choice choice = getFakeChoice();
    try {
      this.getSurveyManager().saveChoice(choice);
      choice = this.getSurveyManager().loadChoice(choice.getId());
      assertNotNull(choice);
      choice.setPos(2677);
      choice.setFreeText(false);
      this.getSurveyManager().updateChoice(choice);
      choice = this.getSurveyManager().loadChoice(choice.getId());
      assertNotNull(choice);
      assertEquals(2677, choice.getPos());
      assertFalse(choice.isFreeText());
    } catch (Throwable t) {
      throw t;
    } finally {
      this.getSurveyManager().deleteChoice(choice.getId());
    }
  }
 
  public void testDeleteChoiceByQuestionid() throws Throwable {
    Survey survey = null;
    Question actualQuestion = null;
    Survey actual = null;
    try {
      survey = this.getFakeActiveSurvey();
      survey.getQuestions().remove(0);
      assertEquals(1, survey.getQuestions().size());
      this.getSurveyManager().saveSurvey(survey);
      actual = this.getSurveyManager().loadSurvey(survey.getId());
      assertNotNull(actual);
      assertNotNull(actual.getQuestions());
      assertEquals(1, actual.getQuestions().size());
      assertEquals(2, actual.getQuestions().get(0).getChoices().size());
      int questionId = survey.getQuestions().get(0).getId();
      this.getSurveyManager().deleteChoiceByQuestionId(questionId);
      actualQuestion = this.getSurveyManager().loadQuestion(questionId);
      assertNotNull(actualQuestion);
      assertNotNull(actualQuestion.getChoices());
      assertEquals(0, actualQuestion.getChoices().size());
    } catch (Throwable t) {
      throw t;
    } finally {
      this.getSurveyManager().deleteSurvey(survey.getId());
    }
  }
 
  public void testUpdateQuestion() throws Throwable {
    Question question = this.getFakeQuestion();
    try {
      // standard question with choices
      this.getSurveyManager().saveQuestion(question);
      question = this.getSurveyManager().loadQuestion(question.getId());
      assertNotNull(question);
      assertFalse(question.isSingleChoice());
      question.setMinResponseNumber(2677);
      question.setMaxResponseNumber(1977);
      question.setPos(38);
      question.setSingleChoice(true);
      question.setSurveyId(2);
      assertNotNull(question.getChoices());
      assertTrue(!question.getChoices().isEmpty());
      question.getChoices().get(0).setPos(1976); // this choice will be placed in last position!!!
      this.getSurveyManager().updateQuestion(question);
      question = this.getSurveyManager().loadQuestion(question.getId());
      assertNotNull(question);
      assertTrue(question.isSingleChoice());
      assertNotNull(question.getQuestions());
      assertEquals(38, question.getPos());
      assertEquals(1977, question.getMaxResponseNumber());
      assertEquals(2677, question.getMinResponseNumber());
      assertEquals(2, question.getSurveyId());
      assertNotNull(question.getChoices());
      assertTrue(!question.getChoices().isEmpty());
      assertEquals(2, question.getChoices().size());
      assertEquals(1976, question.getChoices().get(1).getPos());
      // delete one choice
      question.getChoices().remove(0);
      question.getChoices().get(0).setPos(123);
      question.setMinResponseNumber(1);
      this.getSurveyManager().updateQuestion(question);
      question = this.getSurveyManager().loadQuestion(question.getId());
      assertNotNull(question);
      assertEquals(1, question.getMinResponseNumber());
      assertEquals(1, question.getChoices().size());
      assertEquals(123, question.getChoices().get(0).getPos());
      // delete the remaining choice
      question.getChoices().clear();
      question.setMinResponseNumber(123);
      question.setMaxResponseNumber(321);
      this.getSurveyManager().updateQuestion(question);
      question = this.getSurveyManager().loadQuestion(question.getId());
      assertNotNull(question);
      assertEquals(123, question.getMinResponseNumber());
      assertEquals(321, question.getMaxResponseNumber());
      assertNotNull(question.getChoices());
      assertTrue(question.getChoices().isEmpty());
    } catch (Throwable t) {
      throw t;
    } finally {
      this.getSurveyManager().deleteQuestion(question.getId());
    }
  }
 
  public void testDeleteQuestionBySurveyId() throws Throwable {
    Survey survey = getFakeActiveSurvey();
    Survey actual = null;
    try {
      this.getSurveyManager().saveSurvey(survey);
      this.getSurveyManager().deleteQuestionBySurveyId(survey.getId());
      actual = this.getSurveyManager().loadSurvey(survey.getId());
      assertNotNull(actual);
      assertNotNull(actual.getQuestions());
      assertEquals(survey.getId(), actual.getId()); // not really needed :)
      assertEquals(survey.getImageId(), actual.getImageId());
      assertEquals(survey.isActive(), actual.isActive());
      assertEquals(survey.getDescriptions(), actual.getDescriptions());
      assertTrue(actual.getQuestions().isEmpty());
      for (Question question: survey.getQuestions()) {
        Question actualQuestion = this.getSurveyManager().loadQuestion(question.getId());
        assertNull(actualQuestion);
        for (Choice choice: question.getChoices()) {
          Choice actualChoice = this.getSurveyManager().loadChoice(choice.getId());
          assertNull(actualChoice);
        }
      }
    } catch (Throwable t) {
      throw t;
    } finally {
      this.getSurveyManager().deleteSurvey(survey.getId());
    }
  }
 
  public void testUpdateSurvey() throws Throwable {
    Survey survey = this.getFakeActiveSurvey();
    Survey actual = null;
    try {
      this.getSurveyManager().saveSurvey(survey);
      assertEquals(false, survey.getQuestions().get(0).isQuestionnaire());
      assertEquals(false, survey.getQuestions().get(0).getChoices().get(0).isQuestionnaire());
      assertEquals(survey.getId(), survey.getQuestions().get(0).getChoices().get(0).getSurveyId());
      // modify a complete survey with its question and choices
      survey.setActive(false);
      survey.setPublicPartialResult(true);
      survey.setPublicResult(false);
      survey.setQuestionnaire(true);
      assertEquals(survey.getId(), survey.getQuestions().get(0).getChoices().get(0).getSurveyId());
      survey.setGatherUserInfo(false);
      survey.setRestricted(true);
      survey.getQuestions().get(0).setPos(2); // this will swap position when loading from database
      survey.getQuestions().get(0).setSingleChoice(true);
      survey.getQuestions().get(0).setMinResponseNumber(789);
      survey.getQuestions().get(0).setMaxResponseNumber(1011);
      survey.getQuestions().get(0).setSingleChoice(true);
      survey.getQuestions().get(1).getChoices().get(0).setPos(11); // this will swap position when loading from database
      survey.getQuestions().get(1).getChoices().get(1).setFreeText(false);
      this.getSurveyManager().updateSurvey(survey);
      actual = this.getSurveyManager().loadSurvey(survey.getId());
      assertNotNull(actual);
      assertEquals(false, actual.isActive());
      assertEquals(true, actual.isPublicPartialResult());
      assertEquals(false, actual.isPublicResult());
      assertEquals(true, actual.isQuestionnaire());
      assertEquals(false, actual.isGatherUserInfo());
      assertEquals(true, actual.isRestricted());
      assertNotNull(actual.getQuestions());
      assertEquals(2, actual.getQuestions().size());
      assertNotNull(actual.getQuestions().get(0).getChoices());
      assertNotNull(actual.getQuestions().get(1).getChoices());
      assertEquals(2, actual.getQuestions().get(0).getChoices().size());
      assertEquals(2, actual.getQuestions().get(1).getChoices().size());
      assertEquals(2, actual.getQuestions().get(1).getPos());
      assertEquals(true, actual.getQuestions().get(1).isSingleChoice());
      assertEquals(789, actual.getQuestions().get(1).getMinResponseNumber());
      assertEquals(1011, actual.getQuestions().get(1).getMaxResponseNumber());
      assertEquals(true, actual.getQuestions().get(1).isSingleChoice());
      assertEquals(1, actual.getQuestions().get(0).getPos());
      assertEquals(false, actual.getQuestions().get(0).isSingleChoice());
      assertEquals(false, actual.getQuestions().get(0).getChoices().get(0).isFreeText());
      assertEquals(11, actual.getQuestions().get(0).getChoices().get(1).getPos());
      assertEquals(10, actual.getQuestions().get(0).getChoices().get(0).getPos());
      assertTrue(survey.getQuestions().get(0).isQuestionnaire());
      assertTrue(survey.getQuestions().get(0).getChoices().get(0).isQuestionnaire());
      // check extra info
      assertTrue(survey.getQuestions().get(0).isQuestionnaire());
      assertTrue(survey.getQuestions().get(0).getChoices().get(0).isQuestionnaire());
      assertEquals(survey.getId(), survey.getQuestions().get(0).getChoices().get(0).getSurveyId());
      survey = this.getSurveyManager().loadSurvey(actual.getId());
      // update survey with no choices and one question
      assertNotNull(survey);
      survey.getQuestions().remove(1);
      survey.getQuestions().get(0).getChoices().clear();
//      survey.getQuestions().get(0).setChoices(null); // is the same of the line above
      survey.setActive(true);
      survey.setPublicPartialResult(false);
      survey.getQuestions().get(0).setSingleChoice(true);
      survey.getQuestions().get(0).setPos(11);
      this.getSurveyManager().updateSurvey(survey);
      actual = this.getSurveyManager().loadSurvey(survey.getId());
      assertNotNull(actual);
      assertNotNull(actual.getQuestions());
      assertEquals(1, actual.getQuestions().size());
      assertEquals(true, actual.isActive());
      assertEquals(false, actual.isPublicPartialResult());
      assertEquals(true, actual.getQuestions().get(0).isSingleChoice());
      assertEquals(11, actual.getQuestions().get(0).getPos());
      // alternate question checks, load directly from the DB
      Question question = this.getSurveyManager().loadQuestion(actual.getQuestions().get(0).getId());
      assertNotNull(question);
      assertNotNull(question.getChoices());
      assertTrue(question.getChoices().isEmpty());
      // update a survey with no question
      survey = this.getSurveyManager().loadSurvey(actual.getId());
      survey.getQuestions().clear();
      survey.setActive(false);
      survey.setPublicPartialResult(false);
      survey.setPublicResult(true);
      survey.setQuestionnaire(true);
      survey.setGatherUserInfo(false);
      survey.setRestricted(true);
      this.getSurveyManager().updateSurvey(survey);
      actual = this.getSurveyManager().loadSurvey(survey.getId());
      assertNotNull(actual);
      assertNotNull(actual.getQuestions());
      assertTrue(actual.getQuestions().isEmpty());
      assertEquals(false, actual.isActive());
      assertEquals(false, actual.isPublicPartialResult());
      assertEquals(true, actual.isPublicResult());
      assertEquals(true, actual.isQuestionnaire());
      assertEquals(false, actual.isGatherUserInfo());
      assertEquals(true, actual.isRestricted());
    } catch (Throwable t) {
      throw t;
    } finally {
      this.getSurveyManager().deleteSurvey(survey.getId());
    }
  }
 
  public void testChangeQuestionPosition() throws Throwable {
    Survey survey = this.getFakeActiveSurvey();
    Survey actual = null;
    Survey expected = null;
    try {
      // prepare a known survey for swapping questions
      survey.getQuestions().get(0).setSingleChoice(true);
      survey.getQuestions().get(0).setMinResponseNumber(1);
      survey.getQuestions().get(0).setMaxResponseNumber(5);
      assertEquals(0, survey.getQuestions().get(0).getPos());
      survey.getQuestions().get(1).setMinResponseNumber(6);
      survey.getQuestions().get(1).setMaxResponseNumber(10);
      survey.getQuestions().get(1).setSingleChoice(false);
      assertEquals(1, survey.getQuestions().get(1).getPos());
      this.getSurveyManager().saveSurvey(survey);
      actual = this.getSurveyManager().loadSurvey(survey.getId());
      // Move the first question down
      this.getSurveyManager().swapQuestionPosition(actual.getQuestions().get(0).getId(), false);
      actual = this.getSurveyManager().loadSurvey(survey.getId());
      assertNotNull(actual);
      assertEquals(survey.getQuestions().get(0).getId(), actual.getQuestions().get(1).getId());
      assertEquals(true, actual.getQuestions().get(1).isSingleChoice());
      assertEquals(1, actual.getQuestions().get(1).getMinResponseNumber());
      assertEquals(5, actual.getQuestions().get(1).getMaxResponseNumber());
      assertEquals(survey.getQuestions().get(1).getId(), actual.getQuestions().get(0).getId());
      assertEquals(false, actual.getQuestions().get(0).isSingleChoice());
      assertEquals(6, actual.getQuestions().get(0).getMinResponseNumber());
      assertEquals(10, actual.getQuestions().get(0).getMaxResponseNumber());
     
      // move the last question down does nothing
      expected = this.getSurveyManager().loadSurvey(survey.getId());
      this.getSurveyManager().swapQuestionPosition(actual.getQuestions().get(1).getId(), false);
      actual = this.getSurveyManager().loadSurvey(survey.getId());
      assertNotNull(actual);
      assertEquals(expected.getQuestions().get(0).getId(), actual.getQuestions().get(0).getId());
      assertEquals(true, actual.getQuestions().get(1).isSingleChoice());
      assertEquals(1, actual.getQuestions().get(1).getMinResponseNumber());
      assertEquals(5, actual.getQuestions().get(1).getMaxResponseNumber());
      assertEquals(expected.getQuestions().get(1).getId(), actual.getQuestions().get(1).getId());
      assertEquals(false, actual.getQuestions().get(0).isSingleChoice());
      assertEquals(6, actual.getQuestions().get(0).getMinResponseNumber());
      assertEquals(10, actual.getQuestions().get(0).getMaxResponseNumber());
     
      // move the first question up does nothing
      expected = this.getSurveyManager().loadSurvey(survey.getId());
      this.getSurveyManager().swapQuestionPosition(actual.getQuestions().get(0).getId(), true);
      actual = this.getSurveyManager().loadSurvey(survey.getId());
      assertNotNull(actual);
      assertEquals(expected.getQuestions().get(0).getId(), actual.getQuestions().get(0).getId());
      assertEquals(true, actual.getQuestions().get(1).isSingleChoice());
      assertEquals(1, actual.getQuestions().get(1).getMinResponseNumber());
      assertEquals(5, actual.getQuestions().get(1).getMaxResponseNumber());
      assertEquals(expected.getQuestions().get(1).getId(), actual.getQuestions().get(1).getId());
      assertEquals(false, actual.getQuestions().get(0).isSingleChoice());
      assertEquals(6, actual.getQuestions().get(0).getMinResponseNumber());
      assertEquals(10, actual.getQuestions().get(0).getMaxResponseNumber());
     
    } catch (Throwable t) {
      throw t;
    } finally {
      this.getSurveyManager().deleteSurvey(survey.getId());
    }
  }
 
  public void testSwapChoicePosition() throws Throwable {
    Survey survey = this.getFakeActiveSurvey();
    Survey actual = null;
    Survey expected = null;
    try {
      // prepare a known survey for swapping questions
      survey.getQuestions().remove(1);
      survey.getQuestions().get(0).getChoices().get(0).setPos(1);
      survey.getQuestions().get(0).getChoices().get(0).setFreeText(false);
      survey.getQuestions().get(0).getChoices().get(1).setPos(2);
      survey.getQuestions().get(0).getChoices().get(1).setFreeText(true);
      this.getSurveyManager().saveSurvey(survey);
      expected = this.getSurveyManager().loadSurvey(survey.getId());
      // swap the first choice downwards
      this.getSurveyManager().swapChoicePosition(expected.getQuestions().get(0).getChoices().get(0).getId(), false);
      actual = this.getSurveyManager().loadSurvey(survey.getId());
      assertNotNull(actual);
      assertNotNull(actual.getQuestions());
      assertNotNull(actual.getQuestions().get(0).getChoices());
      assertEquals(expected.getQuestions().get(0).getChoices().get(1).getId(), actual.getQuestions().get(0).getChoices().get(0).getId());
      assertEquals(true, actual.getQuestions().get(0).getChoices().get(0).isFreeText());
      assertEquals(expected.getQuestions().get(0).getChoices().get(0).getId(), actual.getQuestions().get(0).getChoices().get(1).getId());
      assertEquals(false, actual.getQuestions().get(0).getChoices().get(1).isFreeText());
      // swap the first choice upwards does nothing
      expected = this.getSurveyManager().loadSurvey(actual.getId());
      this.getSurveyManager().swapChoicePosition(actual.getQuestions().get(0).getChoices().get(0).getId(), true);
      assertEquals(expected.getQuestions().get(0).getChoices().get(0).getId(), actual.getQuestions().get(0).getChoices().get(0).getId());
      assertEquals(true, actual.getQuestions().get(0).getChoices().get(0).isFreeText());
      assertEquals(expected.getQuestions().get(0).getChoices().get(1).getId(), actual.getQuestions().get(0).getChoices().get(1).getId());
      assertEquals(false, actual.getQuestions().get(0).getChoices().get(1).isFreeText());
      // swap the first choice downwards does nothing
      expected = this.getSurveyManager().loadSurvey(actual.getId());
      this.getSurveyManager().swapChoicePosition(actual.getQuestions().get(0).getChoices().get(1).getId(), false);
      assertEquals(expected.getQuestions().get(0).getChoices().get(0).getId(), actual.getQuestions().get(0).getChoices().get(0).getId());
      assertEquals(true, actual.getQuestions().get(0).getChoices().get(0).isFreeText());
      assertEquals(expected.getQuestions().get(0).getChoices().get(1).getId(), actual.getQuestions().get(0).getChoices().get(1).getId());
      assertEquals(false, actual.getQuestions().get(0).getChoices().get(1).isFreeText());
    } catch (Throwable t) {
      throw t;
    } finally {
      this.getSurveyManager().deleteSurvey(survey.getId());
    }
  }
 
  public void testSaveQuestionInSortedPosition() throws Throwable {
    Survey survey = this.getFakeActiveSurvey();
    Survey actual = null;
    Question question = getFakeQuestion();
    try {
      // prepare a known survey for swapping questions
      survey.getQuestions().get(0).setPos(3);
      survey.getQuestions().get(0).setSingleChoice(true);
      survey.getQuestions().get(0).setMinResponseNumber(1);
      survey.getQuestions().get(0).setMaxResponseNumber(5);
      survey.getQuestions().get(1).setPos(9);
      survey.getQuestions().get(1).setSingleChoice(false);
      survey.getQuestions().get(1).setMinResponseNumber(6);
      survey.getQuestions().get(1).setMaxResponseNumber(10);
      this.getSurveyManager().saveSurvey(survey);
      // add the new question
      question.setSurveyId(survey.getId());
      question.setPos(1); // this will be ignored when saving
      question.setMaxResponseNumber(888);
      question.setMinResponseNumber(777);
      this.getSurveyManager().saveQuestionInSortedPosition(question);
      actual = this.getSurveyManager().loadSurvey(survey.getId());
      assertNotNull(actual);
      assertNotNull(actual.getQuestions());
      assertEquals(3, actual.getQuestions().size());
      assertEquals(888, actual.getQuestions().get(2).getMaxResponseNumber());
      assertEquals(777, actual.getQuestions().get(2).getMinResponseNumber());
      assertEquals(10, actual.getQuestions().get(2).getPos());
    } catch (Throwable t) {
      throw t;
    } finally {
      this.getSurveyManager().deleteSurvey(survey.getId());
    }
  }
 
  public void testSearchSurvey() throws Throwable {
    List<Integer> result = null;
    SurveyRecord survey = null;
    Set<String> col1 = new HashSet<String>();
    col1.add("ignoredToo");
    Set<String> col2 = new HashSet<String>();
    col2.add("ignoREd");
    try {
      // test by ID
//      searchSurveyByIds(id, description, group, isActive, isQuestionnaire, title, isPublic)
      result = this.getSurveyManager().searchSurvey(1, null, null, null, null, null, null);
      assertNotNull(result);
      assertEquals(1, result.size());
      survey = this.getSurveyManager().loadSurvey(result.get(0));
      assertEquals("ignored", survey.getGroupName().trim());
      // test by descr
      result = this.getSurveyManager().searchSurvey(null, "n-1", null, null, null, null, null);
      assertNotNull(result);
      assertEquals(1, result.size());
      survey = this.getSurveyManager().loadSurvey(result.get(0));
      assertEquals("ignored", survey.getGroupName().trim());
//      l=this.getSurveyManager().searchSurveyByIds(null, "<survey>", null, null, null, null, null);
//      assertNull(l);
      // test by group
      result = this.getSurveyManager().searchSurvey(null, null, col1, null, null, null, null);
      assertNotNull(result);
      assertEquals(1, result.size());
      survey = this.getSurveyManager().loadSurvey(result.get(0));
      assertEquals("ignoredToo", survey.getGroupName().trim());
      // test by isActive
      result = this.getSurveyManager().searchSurvey(null, null, null, false, null, null, null);
      assertNotNull(result);
      assertEquals(1, result.size());
      survey = this.getSurveyManager().loadSurvey(result.get(0));
      assertEquals(2, survey.getId());
      // test by isActive (2)
      result = this.getSurveyManager().searchSurvey(null, null, null, true, null, null, null);
      assertNotNull(result);
      assertEquals(1, result.size());
      survey = this.getSurveyManager().loadSurvey(result.get(0));
      assertEquals(1, survey.getId());
      // test by isQuestionnaire     
      result = this.getSurveyManager().searchSurvey(null, null, null, null, false, null, null);
      assertNotNull(result);
      assertEquals(1, result.size());
      survey = this.getSurveyManager().loadSurvey(result.get(0));
      assertEquals(2, survey.getId());
      // test by isQuestionnaire (2)
      result = this.getSurveyManager().searchSurvey(null, null, null, null, true, null, null);
      assertNotNull(result);
      assertEquals(1, result.size());
      survey = this.getSurveyManager().loadSurvey(result.get(0));
      assertEquals(1, survey.getId());
      // test by profileUser
      result = this.getSurveyManager().searchSurvey(null, null, null, null, null, "lo-1", null);
      assertNotNull(result);
      assertEquals(1, result.size());
      survey = this.getSurveyManager().loadSurvey(result.get(0));
      assertEquals(1, survey.getId());     
      result = this.getSurveyManager().searchSurvey(null, null, null, null, null, "mucci", null);
      assertNotNull(result);
      assertTrue(result.isEmpty());
      // test by isRestricted
      result = this.getSurveyManager().searchSurvey(null, null, null, null, null, null, true);     
      assertNotNull(result);
      assertEquals(1, result.size());
      survey = this.getSurveyManager().loadSurvey(result.get(0));
      // test by isRestricted (2)
      result = this.getSurveyManager().searchSurvey(null, null, null, null, null, null, false);
      assertNotNull(result);
      assertEquals(1, result.size());
      survey = this.getSurveyManager().loadSurvey(result.get(0));
      assertEquals(1, survey.getId());
      // test all fields
      result = this.getSurveyManager().searchSurvey(1, "ne-1", col2, true, true, "le-1", false);
      assertNotNull(result);
      assertEquals(1, result.size());
      survey = this.getSurveyManager().loadSurvey(result.get(0));
      assertEquals(1, survey.getId());
      // This should match all the surveys!
      result = this.getSurveyManager().searchSurvey(null, null, null, null, null, null, null);
      assertNotNull(result);
      assertEquals(2, result.size());
    } catch (Throwable t) {
      throw t;
    }
  }
 
  public void testSearchSurveyXMLsafe() throws Throwable {
    Survey survey = this.getFakeActiveSurvey("key=\"it\"","propertie");
    List<Integer> result = null;
    try {
      // search for XML statements in the existing surveys
      result = this.getSurveyManager().searchSurvey(null, "key=\"en\"", null, null, null, null, null);
      assertNotNull(result);
      assertEquals(0, result.size());
      result = this.getSurveyManager().searchSurvey(null, null, null, null, null, "key=\"en\"", null);
      assertNotNull(result);
      assertEquals(0, result.size());
      // save a survey with XML statement-like strings
      survey.getQuestions().clear();
      this.getSurveyManager().saveSurvey(survey);
      result = this.getSurveyManager().searchSurvey(null, "key=", null, null, null, null, null);
      assertEquals(1, result.size());
      result = this.getSurveyManager().searchSurvey(null, null, null, null, null, "prop", null);
      assertEquals(1, result.size());
    } catch (Throwable t) {
      throw t;
    } finally {
      this.getSurveyManager().deleteSurvey(survey.getId());
    }
  }
 
  public void testGetSurveyList() throws Throwable {
    Survey survey1 = getFakeActiveSurvey();
    Survey survey2 = getFakeActiveSurvey();
    List<Integer> list = null;
    try {
      this.getSurveyManager().saveSurvey(survey1);
      this.getSurveyManager().saveSurvey(survey2);
      // get all surveys
      list = this.getSurveyManager().getSurveyList();
      assertNotNull(list);
      assertEquals(4, list.size());
      // get active surveys list
      list = this.getSurveyManager().getActiveSurveyList();
      assertNotNull(list);
      assertEquals(3, list.size());
      // minus one!
      survey1.setActive(false);
      this.getSurveyManager().updateSurvey(survey1);
      list = this.getSurveyManager().getActiveSurveyList();
      assertNotNull(list);
      assertEquals(2, list.size());
      // get all surveys again :)
      list = this.getSurveyManager().getSurveyList();
      assertNotNull(list);
      assertEquals(4, list.size());
    } catch (Throwable t) {
      throw t;
    } finally {
      this.getSurveyManager().deleteSurvey(survey1.getId());
      this.getSurveyManager().deleteSurvey(survey2.getId());
    }
  }
 
//  public void testGetSurveysByUser() throws Throwable {
//    Survey s1 = this.getFakeActiveSurvey();
//    try {
//      DateFormat formatter=null;
//      Date date = null;
//      formatter = new SimpleDateFormat("dd-MM-yyyy");
//      date = (Date)formatter.parse("02-06-2077");
//      Calendar cal = Calendar.getInstance();
//      cal.setTime(date);
//      s1.setStartDate(cal.getTime());
//      date = (Date)formatter.parse("02-06-2077");
//      cal.setTime(date);
//      s1.setEndDate(date);
//    } catch (Throwable t) {
//      throw t;
//    } finally {
//      getSurveyManager().deleteSurvey(s1.getId());
//    }
//  }
 
}
TOP

Related Classes of com.agiletec.plugins.jpsurvey.aps.system.services.survey.TestSurveyManager

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.