/*
* Copyright 2002-2007 the original author or authors.
*
* Licensed under the Apache license, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.internna.iwebmvc.parsers;
import org.junit.Test;
import org.junit.Before;
import org.junit.runner.RunWith;
import java.util.List;
import java.util.Locale;
import java.util.ArrayList;
import org.internna.iwebmvc.dao.DAO;
import org.internna.iwebmvc.dao.SecurityDAO;
import org.internna.iwebmvc.model.I18nText;
import org.internna.iwebmvc.model.LocalizedValue;
import org.internna.iwebmvc.model.Poll;
import org.internna.iwebmvc.model.PollOption;
import org.internna.iwebmvc.model.PollVote;
import org.internna.iwebmvc.model.security.RoleImpl;
import org.internna.iwebmvc.model.security.UserImpl;
import org.springframework.util.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.transaction.TransactionConfiguration;
import org.springframework.transaction.annotation.Transactional;
import static org.junit.Assert.*;
@Transactional
@RunWith(SpringJUnit4ClassRunner.class)
@TransactionConfiguration(defaultRollback = true)
@ContextConfiguration(locations = {"/spring.xml", "/documents.xml"})
public class PollParserTest {
@Autowired private DAO baseDao;
@Autowired private SecurityDAO securityDAO;
@Autowired private PollParser pollParser;
@Before
public void init() throws Exception {
securityDAO.createAuthority("polladmin");
UserImpl user = new UserImpl();
user.setUsername("poller");
user.setName("Poller");
user.setPassword("poller");
user.addRole((RoleImpl) securityDAO.findAuthority("polladmin"));
securityDAO.createUser(user);
Poll clubPoll = new Poll();
clubPoll.setQuestion(new I18nText());
clubPoll.getQuestion().add(new Locale("en"), "What's your favorite european football club?");
clubPoll.getQuestion().add(new Locale("es"), "�Cual es tu equipo de futbol favorito de Europa?");
clubPoll.setStoreVotes(true);
clubPoll.setRandomizeOptions(true);
clubPoll.setAllowAnonymousVotes(true);
List<PollOption> options = new ArrayList<PollOption>(5);
options.add(new PollOption());
options.get(0).setPoll(clubPoll);
options.get(0).setOrder(0);
options.get(0).setTotalVotes(2);
options.get(0).setAnswer(new I18nText());
options.get(0).getAnswer().add(new Locale("en"), "Real Madrid");
options.get(0).getAnswer().add(new Locale("es"), "Real Madrid C.F.");
List<PollVote> votes = new ArrayList<PollVote>(2);
votes.add(new PollVote());
votes.get(0).setIP("127.0.0.4");
votes.get(0).setOption(options.get(0));
votes.add(new PollVote());
votes.get(1).setIP("127.0.0.2");
votes.get(1).setOption(options.get(0));
options.get(0).setVotes(votes);
options.add(new PollOption());
options.get(1).setPoll(clubPoll);
options.get(1).setOrder(1);
options.get(1).setTotalVotes(1);
options.get(1).setAnswer(new I18nText());
options.get(1).getAnswer().add(new Locale("en"), "AC Milan");
options.get(1).getAnswer().add(new Locale("es"), "AC Milan");
List<PollVote> votes2 = new ArrayList<PollVote>(1);
votes2.add(new PollVote());
votes2.get(0).setIP("192.168.1.8");
votes2.get(0).setOption(options.get(1));
options.get(1).setVotes(votes2);
options.add(new PollOption());
options.get(2).setPoll(clubPoll);
options.get(2).setOrder(2);
options.get(2).setTotalVotes(2);
options.get(2).setAnswer(new I18nText());
options.get(2).getAnswer().add(new Locale("en"), "Manchester United");
options.get(2).getAnswer().add(new Locale("es"), "Manchester United");
List<PollVote> votes3 = new ArrayList<PollVote>(2);
votes3.add(new PollVote());
votes3.get(0).setIP("192.168.1.2");
votes3.get(0).setOption(options.get(2));
votes3.add(new PollVote());
votes3.get(1).setAuthor((UserImpl) securityDAO.findUser("poller"));
votes3.get(1).setOption(options.get(2));
options.get(2).setVotes(votes3);
options.add(new PollOption());
options.get(3).setPoll(clubPoll);
options.get(3).setOrder(3);
options.get(3).setTotalVotes(0);
options.get(3).setAnswer(new I18nText());
options.get(3).getAnswer().add(new Locale("en"), "Bayern Munich");
options.get(3).getAnswer().add(new Locale("es"), "Bayern Munich");
options.add(new PollOption());
options.get(4).setPoll(clubPoll);
options.get(4).setOrder(4);
options.get(4).setTotalVotes(1);
options.get(4).setAnswer(new I18nText());
options.get(4).getAnswer().add(new Locale("en"), "PSV Eindhoven");
options.get(4).getAnswer().add(new Locale("es"), "PSV Eindhoven");
List<PollVote> votes4 = new ArrayList<PollVote>(1);
votes4.add(new PollVote());
votes4.get(0).setIP("192.168.1.1");
votes4.get(0).setOption(options.get(4));
options.get(4).setVotes(votes4);
clubPoll.setOptions(options);
baseDao.create(clubPoll);
baseDao.flush();
assertTrue(baseDao.find(PollOption.class, 0, 100).size() == 5);
assertFalse(CollectionUtils.isEmpty(baseDao.find(Poll.class, 0, 100)));
}
@Test
public void testParse() {
assertNull(pollParser.parse(null));
Poll p = new Poll();
assertEquals(p, pollParser.parse(p));
p.setOptions(new ArrayList<PollOption>(1));
p.addOption(new PollOption());
p = pollParser.parse(p);
assertEquals(p, p.getOptions().iterator().next().getPoll());
}
@Test
public void testParseCont() {
Poll p = new Poll();
p.setId(baseDao.first(Poll.class).getId());
p = pollParser.parse(p);
assertNull(p.getOptions());
assertNull(p.getQuestion());
}
@Test
public void testParseContMore() {
Poll p = new Poll();
p.setId(baseDao.first(Poll.class).getId());
p.setQuestion(new I18nText());
p.getQuestion().add(new Locale("en"), "club");
p.getQuestion().add(new Locale("es"), "equipo");
p = pollParser.parse(p);
assertNotNull(p.getQuestion().getId());
assertEquals("club", p.getQuestion().getData().get(0).getTranslation());
}
@Test
public void testParseContOther() {
Poll p = new Poll();
p.setId(baseDao.first(Poll.class).getId());
PollOption aPollOption = baseDao.first(PollOption.class);
PollOption copy = new PollOption();
copy.setId(aPollOption.getId());
copy.setAnswer(new I18nText());
for (LocalizedValue value : aPollOption.getAnswer().getData())
copy.getAnswer().add(value);
copy.getAnswer().add(new Locale("it"), "x");
p.addOption(copy);
PollOption newOption = new PollOption();
newOption.setAnswer(new I18nText());
newOption.getAnswer().add(new Locale("en"), "a");
newOption.getAnswer().add(new Locale("en"), "b");
p.addOption(newOption);
p = pollParser.parse(p);
assertTrue(p.getOptions().size() == 2);
assertTrue(p.getOptions().iterator().next().getAnswer().getData().size() == 2);
p.setQuestion(new I18nText());
p.getQuestion().add(new Locale("en"), "What's your favorite european football club?");
baseDao.update(p);
assertTrue(baseDao.find(Poll.class, 0, 100).size() == 1);
assertTrue(baseDao.find(PollOption.class, 0, 100).size() == 2);
}
}