package fi.arcusys.koku.common.service;
import static junit.framework.Assert.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import fi.arcusys.koku.common.service.RequestDAO;
import fi.arcusys.koku.common.service.datamodel.Question;
import fi.arcusys.koku.common.service.datamodel.QuestionType;
import fi.arcusys.koku.common.service.datamodel.Request;
import fi.arcusys.koku.common.service.datamodel.RequestTemplate;
/**
* @author Dmitry Kudinov (dmitry.kudinov@arcusys.fi)
* Jun 23, 2011
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"/test-common-context.xml"})
public class RequestDAOTest {
@Autowired
private RequestDAO service;
@Autowired
private RequestTemplateDAO templateService;
@Autowired
private CommonTestUtil testUtil;
@Test
public void createRetrieveDeleteRequest() {
Request request = new Request();
final String subject = "test subject for request";
request.setSubject(subject);
request.setFromUser(testUtil.getUserByUid("testRequestSender"));
request.setReceipients(Collections.singleton(testUtil.getUserByUid("testRequestReplier")));
request = service.create(request);
assertNotNull(request.getId());
final Request requestFromService = service.getById(request.getId());
assertNotNull(requestFromService);
assertEquals("subject: ", subject, requestFromService.getSubject());
service.delete(requestFromService);
assertNull("request deleted from DB: ", service.getById(request.getId()));
}
@Test
public void createRequestWithQuestions() {
final RequestTemplate template = new RequestTemplate();
final Set<Question> questions = new HashSet<Question>();
final Question questionYesNo = new Question();
questionYesNo.setIndex(1);
questionYesNo.setDescription("provide 'yes or no' answer");
questionYesNo.setType(QuestionType.YES_NO_QUESTION);
final Question questionText = new Question();
questionText.setIndex(2);
questionText.setDescription("provide text answer");
questionText.setType(QuestionType.FREE_TEXT_QUESTION);
questions.add(questionYesNo);
questions.add(questionText);
template.setQuestions(questions);
final Request newRequest = new Request();
newRequest.setTemplate(templateService.create(template));
final Request request = service.create(newRequest);
final Request fromService = service.getById(request.getId());
assertEquals("Questions persisted: ", 2, fromService.getTemplate().getQuestions().size());
for (final Question question : fromService.getTemplate().getQuestions()) {
if (question.getIndex() == 1) {
assertSame("QuestionType for #1", QuestionType.YES_NO_QUESTION, question.getType());
} else if (question.getIndex() == 2) {
assertSame("QuestionType for #2", QuestionType.FREE_TEXT_QUESTION, question.getType());
} else {
throw new IllegalStateException("Incorrect index for question: " + question.getIndex());
}
}
}
}