package org.exoplatform.poll.webservice;
import java.util.ArrayList;
import java.util.List;
import javax.ws.rs.core.SecurityContext;
import javax.ws.rs.core.UriInfo;
import org.exoplatform.poll.service.Poll;
import org.exoplatform.poll.service.ws.PollWebservice;
import org.exoplatform.services.rest.impl.ContainerResponse;
public class PollWebserviceTest extends AbstractResourceTest {
protected PollWebservice pollWebservice;
private final String RESOURCE_URL = "/ks/poll";
private List<Poll> tearDownPollList;
public void setUp() throws Exception {
super.setUp();
tearDownPollList = new ArrayList<Poll>();
pollWebservice = new PollWebservice();
addResource(pollWebservice, null);
}
public void tearDown() throws Exception {
for (Poll poll : tearDownPollList) {
pollService.removePoll(poll.getId());
}
removeResource(pollWebservice);
super.tearDown();
}
public void testPollService() throws Exception {
assertNotNull(pollService);
}
/**
* Test {@link PollWebservice#viewPoll(String,SecurityContext,UriInfo)}
*/
public void testViewPoll() throws Exception {
Poll poll = new Poll();
poll.setParentPath(topicPath);
pollService.savePoll(poll, true, false);
String resourceUrl = RESOURCE_URL + "/viewpoll/" + poll.getId();
startSessionAs("root");
ContainerResponse response = service("GET", resourceUrl, "", null, null);
assertEquals("containerResponse1.getStatus() must return: " + 200, 200, response.getStatus());
/* clear all poll */
tearDownPollList.add(poll);
}
/**
* Test {@link PollWebservice#votePoll(String,String,SecurityContext,UriInfo)}
*/
public void testVotePoll() throws Exception {
/********************** Single vote **********************/
Poll poll = new Poll();
poll.setParentPath(topicPath);
String[] options = { "abc", "def", "ghi" };
poll.setOption(options);
pollService.savePoll(poll, true, false);
// Single vote for option at index 1 ==> "def"
String resourceUrl = RESOURCE_URL + "/votepoll/" + poll.getId() + "/1";
startSessionAs("root");
ContainerResponse response = service("GET", resourceUrl, "", null, null);
// Test the status of response (must be 200)
assertEquals("containerResponse1.getStatus() must return: " + 200, 200, response.getStatus());
Poll p = (Poll) response.getEntity();
// Test percent of each vote
assertEquals("0.0", p.getVote()[0]);
assertEquals("100.0", p.getVote()[1]);
assertEquals("0.0", p.getVote()[2]);
// Test the number of vote, here is 1
assertEquals(1, Integer.parseInt(p.getInfoVote()[p.getInfoVote().length-1]));
/***************************************************/
// Update vote for option at index 0 ==> "abc"
resourceUrl = RESOURCE_URL + "/votepoll/" + poll.getId() + "/0";
startSessionAs("root");
response = service("GET", resourceUrl, "", null, null);
// Test the status of response (must be 200)
assertEquals("containerResponse1.getStatus() must return: " + 200, 200, response.getStatus());
Poll pUpdate = (Poll) response.getEntity();
// Test percent of each vote
assertEquals("100.0", pUpdate.getVote()[0]);
assertEquals("0.0", pUpdate.getVote()[1]);
assertEquals("0.0", pUpdate.getVote()[2]);
/***************************************************/
// Add new vote with new user "demo" for option at index 2 ==> "ghi"
resourceUrl = RESOURCE_URL + "/votepoll/" + poll.getId() + "/2";
startSessionAs("demo");
response = service("GET", resourceUrl, "", null, null);
// Test the status of response (must be 200)
assertEquals("containerResponse1.getStatus() must return: " + 200, 200, response.getStatus());
Poll pNew = (Poll) response.getEntity();
// Test percent of each vote
assertEquals("50.0", pNew.getVote()[0]);
assertEquals("0.0", pNew.getVote()[1]);
assertEquals("50.0", pNew.getVote()[2]);
// Test the number of vote, here is 2
assertEquals(2, Integer.parseInt(pNew.getInfoVote()[pNew.getInfoVote().length-1]));
/********************** Multi vote *****************************/
Poll pollMulti = new Poll();
pollMulti.setParentPath(topicPath);
String[] optionsMulti = { "abc", "def", "ghi", "jqk" };
pollMulti.setOption(optionsMulti);
pollMulti.setIsMultiCheck(true);
pollService.savePoll(pollMulti, true, false);
// Add new multi vote with new user "mary" for option at index 1 and 2 ==>
// "def" and "ghi"
String resourceUrlMulti = RESOURCE_URL + "/votepoll/" + pollMulti.getId() + "/1:2";
startSessionAs("mary");
ContainerResponse responseMulti = service("GET", resourceUrlMulti, "", null, null);
// Test the status of response (must be 200)
assertEquals("containerResponse1.getStatus() must return: " + 200,
200,
responseMulti.getStatus());
Poll pMulti = (Poll) responseMulti.getEntity();
// Test percent of each vote
assertEquals("0.0", pMulti.getVote()[0]);
assertEquals("100.0", pMulti.getVote()[1]);
assertEquals("100.0", pMulti.getVote()[2]);
assertEquals("0.0", pMulti.getVote()[3]);
// Test the number of vote, here is 1 (one vote but multi options)
assertEquals(1, Integer.parseInt(pMulti.getInfoVote()[pMulti.getInfoVote().length-1]));
/***************************************************/
// Add update multi vote by "mary" for option at index 0 and 2 ==> "abc" and
// "ghi"
resourceUrlMulti = RESOURCE_URL + "/votepoll/" + pollMulti.getId() + "/0:2";
startSessionAs("mary");
responseMulti = service("GET", resourceUrlMulti, "", null, null);
// Test the status of response (must be 200)
assertEquals("containerResponse1.getStatus() must return: " + 200,
200,
responseMulti.getStatus());
Poll pMultiUpdate = (Poll) responseMulti.getEntity();
// Test percent of each vote
assertEquals("100.0", pMultiUpdate.getVote()[0]);
assertEquals("0.0", pMultiUpdate.getVote()[1]);
assertEquals("100.0", pMultiUpdate.getVote()[2]);
assertEquals("0.0", pMultiUpdate.getVote()[3]);
// Test the number of vote, here is 1 (one vote but multi options)
assertEquals(1, Integer.parseInt(pMulti.getInfoVote()[pMulti.getInfoVote().length-1]));
/***************************************************/
// Add new multi vote by "demo" for option at index 1 and 3 ==> "def" and
// "jqk"
resourceUrlMulti = RESOURCE_URL + "/votepoll/" + pollMulti.getId() + "/1:3";
startSessionAs("demo");
responseMulti = service("GET", resourceUrlMulti, "", null, null);
// Test the status of response (must be 200)
assertEquals("containerResponse1.getStatus() must return: " + 200,
200,
responseMulti.getStatus());
Poll pMultiNew = (Poll) responseMulti.getEntity();
// Test percent of each vote
assertEquals("50.0", pMultiNew.getVote()[0]);
assertEquals("50.0", pMultiNew.getVote()[1]);
assertEquals("50.0", pMultiNew.getVote()[2]);
assertEquals("50.0", pMultiNew.getVote()[3]);
// Test the number of vote, here is 2
assertEquals(2, Integer.parseInt(pMultiNew.getInfoVote()[pMultiNew.getInfoVote().length-1]));
/***************************************************/
// Add new multi vote by "john" for option at index 0, 1 and 3 ==> "abc", "def" and
// "jqk"
//Notice the vote index where there is two "3" indexes to test this option is
//voted once
resourceUrlMulti = RESOURCE_URL + "/votepoll/" + pollMulti.getId() + "/0:1:3:3";
startSessionAs("john");
responseMulti = service("GET", resourceUrlMulti, "", null, null);
// Test the status of response (must be 200)
assertEquals("containerResponse1.getStatus() must return: " + 200,
200,
responseMulti.getStatus());
pMultiNew = (Poll) responseMulti.getEntity();
// Test percent of each vote
assertEquals("66.66667", pMultiNew.getVote()[0]);
assertEquals("66.66667", pMultiNew.getVote()[1]);
assertEquals("33.333336", pMultiNew.getVote()[2]);
assertEquals("66.66667", pMultiNew.getVote()[3]);
// Test the number of vote, here is 3 ("mary", "demo" and "john")
assertEquals(3, Integer.parseInt(pMultiNew.getInfoVote()[pMultiNew.getInfoVote().length-1]));
/* Clear all poll */
tearDownPollList.add(poll);
tearDownPollList.add(pollMulti);
}
}