/*
* Copyright (C) 2003-2012 eXo Platform SAS.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License
* as published by the Free Software Foundation; either version 3
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see<http://www.gnu.org/licenses/>.
*/
package org.exoplatform.forum.extras.injection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import org.exoplatform.forum.extras.injection.forum.ProfileInjector;
import org.exoplatform.forum.extras.injection.poll.GroupInjector;
import org.exoplatform.forum.extras.injection.poll.PollInjector;
import org.exoplatform.forum.extras.injection.poll.VoteInjector;
import org.exoplatform.poll.service.Poll;
import org.exoplatform.poll.service.PollService;
import org.exoplatform.services.organization.Group;
import org.exoplatform.services.organization.GroupHandler;
import org.exoplatform.services.organization.OrganizationService;
public class InjectorPollTestCase extends BaseInjectorTestCase {
GroupInjector groupInjector;
PollInjector pollInjector;
VoteInjector voteInjector;
PollService pollService;
ProfileInjector profileInjector;
OrganizationService organizationService;
GroupHandler groupHandler;
private HashMap<String, String> params;
private Set<String> pollPublicTearDown;
private Set<String> groupTearDown = new HashSet<String>();
private Set<String> users = new HashSet<String>();
private Map<String, String> pollPrivateTearDown;
@Override
public void setUp() throws Exception {
super.setUp();
if(pollService == null){
//
groupInjector = (GroupInjector) getContainer().getComponentInstanceOfType(GroupInjector.class);
pollInjector = (PollInjector) getContainer().getComponentInstance(PollInjector.class);
voteInjector = (VoteInjector) getContainer().getComponentInstance(VoteInjector.class);
profileInjector = (ProfileInjector) getContainer().getComponentInstanceOfType(ProfileInjector.class);
//
organizationService = (OrganizationService) getContainer().getComponentInstance(OrganizationService.class);
pollService = (PollService) getContainer().getComponentInstance(PollService.class);
}
assertNotNull(groupInjector);
assertNotNull(pollInjector);
assertNotNull(organizationService);
assertNotNull(pollService);
//
groupHandler = organizationService.getGroupHandler();
params = new HashMap<String, String>();
pollPublicTearDown = new HashSet<String>();
pollPrivateTearDown = new HashMap<String, String>();
}
@Override
public void tearDown() throws Exception {
for (String pollName : pollPublicTearDown) {
pollService.removePoll(pollInjector.getPublicPollByName(pollName).getId());
}
//
for (String pollName : pollPrivateTearDown.keySet()) {
pollService.removePoll(pollInjector.getPrivatePollByName(pollPrivateTearDown.get(pollName), pollName).getId());
}
//
for (Object gr : groupHandler.findGroups(null)) {
Group group = (Group) gr;
for (String str : groupTearDown) {
if (group.getGroupName().indexOf(str) >= 0) {
groupHandler.removeGroup((Group) gr, false);
break;
}
}
}
groupTearDown.clear();
//
for (String user : users) {
organizationService.getUserHandler().removeUser(user, true);
}
users.clear();
super.tearDown();
}
private void clearPollPrivate(String groupBaseName, String pollBaseName, int number) {
for (int i = 0; i < number; i++) {
pollPrivateTearDown.put(pollBaseName + i, groupBaseName);
}
}
private void clearPollPublic(String pollBaseName, int number) {
for (int i = 0; i < number; i++) {
pollPublicTearDown.add(pollBaseName + i);
}
}
private void cleanProfile(String prefix, int number) {
for (int i = 0; i < number; ++i) {
users.add(prefix + i);
}
}
public void testDefaultGroup() throws Exception {
performGroupTest(null);
}
public void testPrefixGroup() throws Exception {
performGroupTest("foo");
}
public void testDefaultPollPublic() throws Exception {
performPollPublicTest(null);
}
public void testPrefixPollPublic() throws Exception {
performPollPublicTest("foo");
}
public void testDefaultPollPrivate() throws Exception {
performPollPrivateTest(null, null);
}
public void testPrefixPollPrivate() throws Exception {
performPollPrivateTest("foo", "bar");
}
public void testDefaultPollPrivateFail() throws Exception {
performPollPrivateFailTest(null, null);
}
public void testPrefixPollPrivateFail() throws Exception {
performPollPrivateFailTest("foo", "bar");
}
private void performGroupTest(String prefix) throws Exception {
params.put(GroupInjector.NUMBER, "5");
String groupBaseName = (prefix == null ? "bench.group" : prefix);
groupTearDown.add(groupBaseName);
if (prefix != null) {
params.put("prefix", prefix);
}
//
groupInjector.inject(params);
//
assertEquals(5, groupInjector.groupNumber(groupBaseName));
assertNotNull(groupInjector.getGroupByName(groupBaseName + "0"));
assertNotNull(groupInjector.getGroupByName(groupBaseName + "1"));
assertNotNull(groupInjector.getGroupByName(groupBaseName + "3"));
assertNotNull(groupInjector.getGroupByName(groupBaseName + "4"));
//
params.clear();
params.put(GroupInjector.NUMBER, "5");
if (prefix != null) {
params.put("prefix", prefix);
}
//
groupInjector.inject(params);
assertEquals(10, groupInjector.groupNumber(groupBaseName));
assertNotNull(groupInjector.getGroupByName(groupBaseName + "5"));
assertNotNull(groupInjector.getGroupByName(groupBaseName + "6"));
assertNotNull(groupInjector.getGroupByName(groupBaseName + "7"));
assertNotNull(groupInjector.getGroupByName(groupBaseName + "8"));
assertNotNull(groupInjector.getGroupByName(groupBaseName + "9"));
}
private void performPollPublicTest(String pollPrefix) throws Exception {
params.put(GroupInjector.NUMBER, "5");
String pollBaseName = (pollPrefix == null ? "public.poll" : pollPrefix);
if (pollPrefix != null) {
params.put("pollPrefix", pollPrefix);
}
params.put("toGroup", "0");
params.put("pollType", "public");
pollInjector.inject(params);
assertEquals(5, pollInjector.pollNumberForPublic(pollBaseName));
assertNotNull(pollInjector.getPublicPollByName(pollBaseName + "0"));
assertNotNull(pollInjector.getPublicPollByName(pollBaseName + "1"));
assertNotNull(pollInjector.getPublicPollByName(pollBaseName + "2"));
assertNotNull(pollInjector.getPublicPollByName(pollBaseName + "3"));
assertNotNull(pollInjector.getPublicPollByName(pollBaseName + "4"));
//
pollInjector.inject(params);
assertEquals(10, pollInjector.pollNumberForPublic(pollBaseName));
assertNotNull(pollInjector.getPublicPollByName(pollBaseName + "5"));
assertNotNull(pollInjector.getPublicPollByName(pollBaseName + "6"));
assertNotNull(pollInjector.getPublicPollByName(pollBaseName + "7"));
assertNotNull(pollInjector.getPublicPollByName(pollBaseName + "8"));
assertNotNull(pollInjector.getPublicPollByName(pollBaseName + "9"));
//
performPollVoteTest(pollBaseName);
clearPollPublic(pollBaseName, 10);
}
private void performPollVoteTest(String pollBaseName) throws Exception {
params.clear();
params.put("pollPrefix", pollBaseName);
String userPrefix = "bench.user";
int number = 10;
//
params.put("userPrefix", userPrefix);
params.put("number", String.valueOf(number));
profileInjector.inject(params);
assertEquals(number, profileInjector.userNumber(userPrefix));
//
params.put("fromUser", "0");
params.put("toUser", "10");
params.put("fromPoll", "1");
params.put("toPoll", "5");
voteInjector.inject(params);
//
for (int i = 1; i < 5; i++) {
Poll poll = voteInjector.getFullPublicPollByName(pollBaseName + String.valueOf(i));
assertEquals(true, Integer.valueOf(poll.getVotes()) >= 10);
assertEquals(10, poll.getUserVote().length);
}
for (int i = 5; i < 10; i++) {
Poll poll = voteInjector.getFullPublicPollByName(pollBaseName + String.valueOf(i));
assertEquals(0, Integer.valueOf(poll.getVotes())*1);
assertEquals(0, poll.getUserVote().length);
}
cleanProfile(userPrefix, number);
}
private void performPollPrivateTest(String groupPrefix, String pollPrefix) throws Exception {
params.put(GroupInjector.NUMBER, "5");
String groupBaseName = (groupPrefix == null ? "bench.group" : groupPrefix);
if (groupPrefix != null) {
params.put("prefix", groupPrefix);
}
//
groupInjector.inject(params);
//
assertEquals(5, groupInjector.groupNumber(groupBaseName));
assertNotNull(groupInjector.getGroupByName(groupBaseName + "0"));
assertNotNull(groupInjector.getGroupByName(groupBaseName + "1"));
assertNotNull(groupInjector.getGroupByName(groupBaseName + "3"));
assertNotNull(groupInjector.getGroupByName(groupBaseName + "4"));
//
params.clear();
params.put(GroupInjector.NUMBER, "5");
String pollBaseName = (pollPrefix == null ? "private.poll" : pollPrefix);
if (groupPrefix != null) {
params.put("groupPrefix", groupPrefix);
}
if (pollPrefix != null) {
params.put("pollPrefix", pollPrefix);
}
params.put("toGroup", "0");
params.put("pollType", "private");
pollInjector.inject(params);
assertEquals(5, pollInjector.pollNumberForPrivate(groupBaseName + "0", pollBaseName));
assertNotNull(pollInjector.getPrivatePollByName(groupBaseName + "0", pollBaseName + "0"));
assertNotNull(pollInjector.getPrivatePollByName(groupBaseName + "0", pollBaseName + "1"));
assertNotNull(pollInjector.getPrivatePollByName(groupBaseName + "0", pollBaseName + "2"));
assertNotNull(pollInjector.getPrivatePollByName(groupBaseName + "0", pollBaseName + "3"));
assertNotNull(pollInjector.getPrivatePollByName(groupBaseName + "0", pollBaseName + "4"));
//
pollInjector.inject(params);
assertEquals(10, pollInjector.pollNumberForPrivate(groupBaseName + "0", pollBaseName));
assertNotNull(pollInjector.getPrivatePollByName(groupBaseName + "0", pollBaseName + "5"));
assertNotNull(pollInjector.getPrivatePollByName(groupBaseName + "0", pollBaseName + "6"));
assertNotNull(pollInjector.getPrivatePollByName(groupBaseName + "0", pollBaseName + "7"));
assertNotNull(pollInjector.getPrivatePollByName(groupBaseName + "0", pollBaseName + "8"));
assertNotNull(pollInjector.getPrivatePollByName(groupBaseName + "0", pollBaseName + "9"));
clearPollPrivate(groupBaseName + "0", pollBaseName, 10);
groupTearDown.add(groupBaseName);
}
private void performPollPrivateFailTest(String groupPrefix, String pollPrefix) throws Exception {
params.put(GroupInjector.NUMBER, "5");
String groupBaseName = (groupPrefix == null ? "bench.group" : groupPrefix);
if (groupPrefix != null) {
params.put("prefix", groupPrefix);
}
//
groupInjector.inject(params);
//
assertEquals(5, groupInjector.groupNumber(groupBaseName));
assertNotNull(groupInjector.getGroupByName(groupBaseName + "0"));
assertNotNull(groupInjector.getGroupByName(groupBaseName + "1"));
assertNotNull(groupInjector.getGroupByName(groupBaseName + "3"));
assertNotNull(groupInjector.getGroupByName(groupBaseName + "4"));
//
params.clear();
params.put(GroupInjector.NUMBER, "5");
String pollBaseName = (pollPrefix == null ? "private.poll" : pollPrefix);
if (groupPrefix != null) {
params.put("groupPrefix", groupPrefix);
}
if (pollPrefix != null) {
params.put("pollPrefix", pollPrefix);
}
params.put("toGroup", "");
params.put("pollType", "private");
pollInjector.inject(params);
assertEquals(0, pollInjector.pollNumberForPrivate(groupBaseName + "0", pollBaseName));
//
params.put("toGroup", null);
pollInjector.inject(params);
assertEquals(0, pollInjector.pollNumberForPrivate(groupBaseName + "0", pollBaseName));
groupTearDown.add(groupBaseName);
}
}