This is an automated email from the git hooks/post-receive script. New commit to branch feature/refonte-ui in repository pollen. See https://gitlab.nuiton.org/chorem/pollen.git commit 31025a5d5d5ced40b274b16b30c4f5710e956177 Author: jcouteau <couteau@codelutin.com> Date: Wed May 27 07:36:21 2020 +0200 fixes #339 : Vote restreint - impossible de voter authentifié --- .../pollen/services/service/FixturesService.java | 87 +++++++----- .../pollen/services/service/PollService.java | 10 +- .../pollen/services/service/QuestionService.java | 10 +- .../pollen/services/service/VoteService.java | 24 ++-- .../pollen/services/service/VoterListService.java | 2 +- .../test/FakePollenApplicationContext.java | 21 +-- pollen-services/src/main/resources/fixtures.yaml | 99 ++++++-------- .../src/main/resources/user-fixtures.yaml | 58 ++++++++ .../pollen/services/service/VoteServiceTest.java | 151 +++++++++++++++++++-- 9 files changed, 336 insertions(+), 126 deletions(-) diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/FixturesService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/FixturesService.java index 3ad5c124..79c3077b 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/service/FixturesService.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/FixturesService.java @@ -77,7 +77,7 @@ public class FixturesService extends PollenServiceSupport { fixtureSets.put(fixturesSetName, fixtures); if (log.isInfoEnabled()) { - log.info("will restore database with fixture set"); + log.info("will restore database with fixture set " + fixturesSetName); } PollenPersistenceContext persistenceContext = serviceContext.getPersistenceContext(); @@ -100,52 +100,73 @@ public class FixturesService extends PollenServiceSupport { Collection<PollenUser> users = fixtures.fixture("users"); - for (PollenUser user : users) { - for (PollenUserEmailAddress emailAddress : user.getEmailAddresses()) { - PollenUserEmailAddress createdEmailAddress = emailAddressDao.create(emailAddress); - emailAddress.setTopiaId(createdEmailAddress.getTopiaId()); - emailAddress.setValidated(true); + if (users != null) { + for (PollenUser user : users) { + for (PollenUserEmailAddress emailAddress : user.getEmailAddresses()) { + PollenUserEmailAddress createdEmailAddress = emailAddressDao.create(emailAddress); + emailAddress.setTopiaId(createdEmailAddress.getTopiaId()); + emailAddress.setValidated(true); + } + + securityService.setUserPassword(user, user.getPassword()); + PollenUser createdUser = userDao.create(user); + user.setTopiaId(createdUser.getTopiaId()); } - - securityService.setUserPassword(user, user.getPassword()); - PollenUser createdUser = userDao.create(user); - user.setTopiaId(createdUser.getTopiaId()); } PollService pollService = newService(PollService.class); - //FIXME JC181003 - APRIL - Add questions in fixtures Collection<Poll> polls = fixtures.fixture("polls"); List<Question> questions = fixtures.fixture("questions"); - List<QuestionBean> questionsBean = questions.stream() - .map(getQuestionService()::toQuestionBean) - .collect(Collectors.toList()); List<Choice> choices = fixtures.fixture("choices"); - List<ChoiceBean> choicesBean = choices.stream() - .map(getChoiceService()::toChoiceBean) - .collect(Collectors.toList()); - questionsBean.get(0).setChoices(choicesBean); - - - for (Poll poll : polls) { - try { - PollBean pollBean = getPollService().toPollBean(poll); - pollBean.setQuestions(questionsBean); - PollenEntityRef<Poll> createdPoll = pollService.createPoll(pollBean, Collections.emptyList(), Collections.emptyList()); - poll.setTopiaId(createdPoll.getEntityId()); - - PollenPrincipal principal = securityService.getPollenPrincipalByPermissionToken(createdPoll.getPermission()); - poll.setCreator(principal); -// poll.setChoice(createdPoll.getChoice()); - } catch (InvalidFormException e) { - throw new PollenTechnicalException(e); + if (polls != null) { + for (Poll poll : polls) { + try { + PollBean pollBean = getPollService().toPollBean(poll); + + pollBean.setQuestions( + questions.stream() + .filter(question -> question.getPoll().equals(poll)) + .map(getQuestionService()::toQuestionBean) + .collect(Collectors.toList()) + ); + + for (QuestionBean question : pollBean.getQuestions()) { + question.setChoices( + choices.stream() + .filter(choice -> choice.getQuestion().getTitle().equals(question.getTitle())) + .map(getChoiceService()::toChoiceBean) + .collect(Collectors.toList()) + ); + } + + PollenEntityRef<Poll> createdPoll = pollService.createPoll(pollBean, Collections.emptyList(), Collections.emptyList()); + poll.setTopiaId(createdPoll.getEntityId()); + + //Set Questions and choices topiaId + PollBean createdPollBean = pollService.toPollBean(pollService.getPoll0(createdPoll.getEntityId())); + for (QuestionBean questionBean : createdPollBean.getQuestions()) { + questions.stream() + .filter(question -> question.getTitle().equals(questionBean.getTitle())) + .peek(question -> question.setTopiaId(questionBean.getEntityId())); + for (ChoiceBean choiceBean:questionBean.getChoices()) { + choices.stream() + .filter(choice -> choice.getChoiceValue().equals(choiceBean.getChoiceValue())) + .peek(choice -> choice.setTopiaId(choiceBean.getEntityId())); + } + } + + PollenPrincipal principal = securityService.getPollenPrincipalByPermissionToken(createdPoll.getPermission()); + poll.setCreator(principal); + } catch (InvalidFormException e) { + throw new PollenTechnicalException(e); + } } } persistenceContext.commit(); - } return fixtures; diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/PollService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/PollService.java index fc4114e8..28a70a5c 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/service/PollService.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/PollService.java @@ -175,19 +175,19 @@ public class PollService extends PollenServiceSupport { bean.setReport(report); } - boolean commentIsVisible = isPermitted(PollenPermissions.readComments(entity)); + boolean commentIsVisible = entity.getTopiaId() != null && isPermitted(PollenPermissions.readComments(entity)); bean.setCommentIsVisible(commentIsVisible); - bean.setVoteIsVisible(isPermitted(PollenPermissions.readVotes(entity))); + bean.setVoteIsVisible(entity.getTopiaId() != null && isPermitted(PollenPermissions.readVotes(entity))); - boolean resultIsVisible = isPermitted(PollenPermissions.readResult(entity)); + boolean resultIsVisible = entity.getTopiaId() != null && isPermitted(PollenPermissions.readResult(entity)); bean.setResultIsVisible(resultIsVisible); - boolean canReadParticipants = isPermitted(PollenPermissions.readParticipants(entity)); + boolean canReadParticipants = entity.getTopiaId() != null && isPermitted(PollenPermissions.readParticipants(entity)); bean.setParticipantsIsVisible(canReadParticipants); - boolean canVote = isPermitted(PollenPermissions.addVote(entity)); + boolean canVote = entity.getTopiaId() != null && isPermitted(PollenPermissions.addVote(entity)); bean.setCanVote(canVote); if (entity.isPersisted()) { diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/QuestionService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/QuestionService.java index f72dbdd0..7ef97217 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/service/QuestionService.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/QuestionService.java @@ -86,19 +86,19 @@ public class QuestionService extends PollenServiceSupport { bean.setReport(report); } - boolean commentIsVisible = isPermitted(PollenPermissions.readComments(entity)); + boolean commentIsVisible = entity.isPersisted() && isPermitted(PollenPermissions.readComments(entity)); bean.setCommentIsVisible(commentIsVisible); - bean.setVoteIsVisible(isPermitted(PollenPermissions.readVotes(entity))); + bean.setVoteIsVisible(entity.isPersisted() && isPermitted(PollenPermissions.readVotes(entity))); - boolean resultIsVisible = isPermitted(PollenPermissions.readResult(entity)); + boolean resultIsVisible = entity.isPersisted() && isPermitted(PollenPermissions.readResult(entity)); bean.setResultIsVisible(resultIsVisible); - boolean canReadParticipants = isPermitted(PollenPermissions.readParticipants(entity)); + boolean canReadParticipants = entity.isPersisted() && isPermitted(PollenPermissions.readParticipants(entity)); bean.setParticipantsIsVisible(canReadParticipants); - boolean canVote = isPermitted(PollenPermissions.addVote(entity)); + boolean canVote = entity.isPersisted() && isPermitted(PollenPermissions.addVote(entity)); bean.setCanVote(canVote); if (entity.isPersisted()) { diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/VoteService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/VoteService.java index a9ab5730..85aed539 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/service/VoteService.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/VoteService.java @@ -163,11 +163,15 @@ public class VoteService extends PollenServiceSupport { PollenUser connectedUser = getConnectedUser(); if (question.getPoll().getPollType() == PollType.RESTRICTED) { + + List<VoterListMember> voterListMembers = new ArrayList<>(); // si si le mainPrincipal a voté - List<VoterListMember> voterListMembers = getVoterListMemberDao() - .forEquals(VoterListMember.PROPERTY_MEMBER + "." + PollenPrincipal.PROPERTY_EMAIL, mainPrincipal.getEmail()) - .addEquals(VoterListMember.PROPERTY_VOTER_LIST + "." + VoterList.PROPERTY_POLL + "." + Poll.PROPERTY_TOPIA_ID, question.getPoll().getTopiaId()) - .findAll(); + if (mainPrincipal != null) { + voterListMembers = getVoterListMemberDao() + .forEquals(VoterListMember.PROPERTY_MEMBER + "." + PollenPrincipal.PROPERTY_EMAIL, mainPrincipal.getEmail()) + .addEquals(VoterListMember.PROPERTY_VOTER_LIST + "." + VoterList.PROPERTY_POLL + "." + Poll.PROPERTY_TOPIA_ID, question.getPoll().getTopiaId()) + .findAll(); + } if (CollectionUtils.isNotEmpty(voterListMembers) && !getVoteDao().forQuestionEquals(question).addEquals(Vote.PROPERTY_VOTER, mainPrincipal).exists()) { @@ -425,11 +429,15 @@ public class VoteService extends PollenServiceSupport { if (Polls.isPollRestricted(question.getPoll())) { + List<VoterListMember> voterListMembers = new ArrayList<>(); + // si si le mainPrincipal a voté - List<VoterListMember> voterListMembers = getVoterListMemberDao() - .forEquals(VoterListMember.PROPERTY_MEMBER + "." + PollenPrincipal.PROPERTY_EMAIL, mainPrincipal.getEmail()) - .addEquals(VoterListMember.PROPERTY_VOTER_LIST + "." + VoterList.PROPERTY_POLL + "." + TopiaEntity.PROPERTY_TOPIA_ID, question.getPoll().getTopiaId()) - .findAll(); + if (mainPrincipal != null) { + voterListMembers = getVoterListMemberDao() + .forEquals(VoterListMember.PROPERTY_MEMBER + "." + PollenPrincipal.PROPERTY_EMAIL, mainPrincipal.getEmail()) + .addEquals(VoterListMember.PROPERTY_VOTER_LIST + "." + VoterList.PROPERTY_POLL + "." + TopiaEntity.PROPERTY_TOPIA_ID, question.getPoll().getTopiaId()) + .findAll(); + } if (CollectionUtils.isNotEmpty(voterListMembers) && !getVoteDao().forQuestionEquals(question).addEquals(Vote.PROPERTY_VOTER, mainPrincipal).exists()) { diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/VoterListService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/VoterListService.java index ae877276..78ac776e 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/service/VoterListService.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/VoterListService.java @@ -521,7 +521,7 @@ public class VoterListService extends PollenServiceSupport { protected PollenPrincipal searchOrCreatePrincipal(Poll poll, String email, String name) { PollenPrincipal principal; - if (poll.getCreator().getEmail().equals(email)) { + if (poll.getCreator().getEmail() != null && poll.getCreator().getEmail().equals(email)) { principal = poll.getCreator(); } else { principal = getVoterListMemberDao().forProperties(VoterListMember.PROPERTY_VOTER_LIST + "." + VoterList.PROPERTY_POLL, poll) diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/test/FakePollenApplicationContext.java b/pollen-services/src/main/java/org/chorem/pollen/services/test/FakePollenApplicationContext.java index bf39e898..c0d11afd 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/test/FakePollenApplicationContext.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/test/FakePollenApplicationContext.java @@ -48,12 +48,9 @@ import org.nuiton.util.FileUtil; import java.io.File; import java.io.IOException; +import java.lang.reflect.Array; import java.net.ServerSocket; -import java.util.LinkedList; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.Properties; +import java.util.*; import java.util.concurrent.atomic.AtomicInteger; /** @@ -75,7 +72,7 @@ public class FakePollenApplicationContext extends TestWatcher implements PollenA protected PollenServicesConfig configuration; - protected PollenFixtures fixtures; + protected List<PollenFixtures> fixtures; protected VoteCountingFactory voteCountingFactory; @@ -254,14 +251,22 @@ public class FakePollenApplicationContext extends TestWatcher implements PollenA public void loadFixtures(PollenServiceContext serviceContext, String fixturesSetName) { FixturesService fixturesService = serviceContext.newService(FixturesService.class); + if (fixtures == null) { + fixtures = new ArrayList<>(); + } - fixtures = fixturesService.loadFixtures(fixturesSetName); + fixtures.add(fixturesService.loadFixtures(fixturesSetName)); } public <E> E fixture(String id) { + for (PollenFixtures fixture: fixtures) { + if (fixture.fixture(id) != null) { + return fixture.fixture(id); + } + } - return fixtures.fixture(id); + return null; } diff --git a/pollen-services/src/main/resources/fixtures.yaml b/pollen-services/src/main/resources/fixtures.yaml index 68c3523a..a911b157 100644 --- a/pollen-services/src/main/resources/fixtures.yaml +++ b/pollen-services/src/main/resources/fixtures.yaml @@ -1,56 +1,4 @@ -email_address_tony_default: - &email_address_tony1 !email-address - emailAddress: tony@pollen.org -email_address_tony_2: - &email_address_tony2 !email-address - emailAddress: tony2@pollen.org - -user_tony: - &tony !user - password: fake - name: T - emailAddresses: !array-list - - *email_address_tony1 - - *email_address_tony2 - defaultEmailAddress: *email_address_tony1 - administrator: false - -email_address_jean_default: - &email_address_jean1 !email-address - emailAddress: jean@pollen.org - -email_address_jean_2: - &email_address_jean2 !email-address - emailAddress: jean2@pollen.org - -email_address_jean_3: - &email_address_jean3 !email-address - emailAddress: jean3@pollen.org - -user_jean: - &jean !user - password: fake - name: J - emailAddresses: !array-list - - *email_address_jean1 - - *email_address_jean2 - - *email_address_jean3 - defaultEmailAddress: *email_address_jean1 - administrator: true - -email_address_julien_default: - &email_address_julien !email-address - emailAddress: julien@pollen.org - -user_julien: - &julien !user - password: fake - name: J - emailAddresses: !array-list - - *email_address_julien - defaultEmailAddress: *email_address_julien - administrator: true poll_normal: &normal !poll @@ -69,6 +17,22 @@ poll_normal: name: poll creator email: poll_creator@pollen.chorem.org +poll_restricted: + &restricted !poll + title: Sondage restricted + description: Sondage restricted de type normal + beginDate: 1/1/2014 + endDate: 1/2/2014 + anonymousVoteAllowed: false + continuousResults: false + pollType: RESTRICTED + voteVisibility: EVERYBODY + commentVisibility: EVERYBODY + resultVisibility: EVERYBODY + creator: !pollen-principal + name: poll creator + email: jean@pollen.org + questionA: &normal_questionA !question poll: *normal @@ -77,6 +41,14 @@ questionA: #choiceType: TEXT choiceAddAllowed: false +questionB: + &restricted_questionB !question + poll: *restricted + title: Question B + voteCountingType: 1 + #choiceType: TEXT + choiceAddAllowed: false + choiceA: &normal_questionA_choixA !choice question: *normal_questionA @@ -91,24 +63,37 @@ choiceB: description: choixB description choiceType: TEXT +choiceC: + &restricted_questionB_choixC !choice + question: *restricted_questionB + choiceValue: choixC + description: choixC description + choiceType: TEXT + +choiceD: + &restricted_questionB_choixD !choice + question: *restricted_questionB + choiceValue: choixD + description: choixD description + choiceType: TEXT + choices: - *normal_questionA_choixA - *normal_questionA_choixB + - *restricted_questionB_choixC + - *restricted_questionB_choixD questions: - *normal_questionA + - *restricted_questionB votes: - normal_vote1 - normal_vote2 -users: - - *tony - - *jean - - *julien - polls: - *normal + - *restricted pollenUIContext_chorem: &chorem !pollenUIContext diff --git a/pollen-services/src/main/resources/user-fixtures.yaml b/pollen-services/src/main/resources/user-fixtures.yaml new file mode 100644 index 00000000..a0e052d5 --- /dev/null +++ b/pollen-services/src/main/resources/user-fixtures.yaml @@ -0,0 +1,58 @@ +email_address_tony_default: + &email_address_tony1 !email-address + emailAddress: tony@pollen.org + +email_address_tony_2: + &email_address_tony2 !email-address + emailAddress: tony2@pollen.org + +user_tony: + &tony !user + password: fake + name: T + emailAddresses: !array-list + - *email_address_tony1 + - *email_address_tony2 + defaultEmailAddress: *email_address_tony1 + administrator: false + +email_address_jean_default: + &email_address_jean1 !email-address + emailAddress: jean@pollen.org + +email_address_jean_2: + &email_address_jean2 !email-address + emailAddress: jean2@pollen.org + +email_address_jean_3: + &email_address_jean3 !email-address + emailAddress: jean3@pollen.org + +user_jean: + &jean !user + password: fake + name: J + emailAddresses: !array-list + - *email_address_jean1 + - *email_address_jean2 + - *email_address_jean3 + defaultEmailAddress: *email_address_jean1 + administrator: true + +email_address_julien_default: + &email_address_julien !email-address + emailAddress: julien@pollen.org + +user_julien: + &julien !user + password: fake + name: J + emailAddresses: !array-list + - *email_address_julien + defaultEmailAddress: *email_address_julien + administrator: true + +users: + - *tony + - *jean + - *julien diff --git a/pollen-services/src/test/java/org/chorem/pollen/services/service/VoteServiceTest.java b/pollen-services/src/test/java/org/chorem/pollen/services/service/VoteServiceTest.java index 4631ad55..9a1c2bcd 100644 --- a/pollen-services/src/test/java/org/chorem/pollen/services/service/VoteServiceTest.java +++ b/pollen-services/src/test/java/org/chorem/pollen/services/service/VoteServiceTest.java @@ -21,32 +21,50 @@ package org.chorem.pollen.services.service; * #L% */ -import org.chorem.pollen.persistence.entity.Choice; +import org.chorem.pollen.persistence.entity.*; import org.chorem.pollen.services.AbstractPollenServiceTest; -import org.chorem.pollen.services.bean.PaginationParameterBean; -import org.chorem.pollen.services.bean.PollBean; -import org.chorem.pollen.services.bean.VoteBean; -import org.chorem.pollen.services.bean.VoteToChoiceBean; -import org.chorem.pollen.services.bean.PollenEntityId; +import org.chorem.pollen.services.bean.*; +import org.chorem.pollen.services.service.security.PollenInvalidPermissionException; +import org.chorem.pollen.services.service.security.SecurityService; import org.chorem.pollen.services.test.FakePollenSecurityContext; import org.junit.Assert; import org.junit.Before; import org.junit.Test; +import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.util.stream.Collectors; public class VoteServiceTest extends AbstractPollenServiceTest { protected VoteService service; + protected VoterListService voterListService; + + protected PollService pollService; + + protected SecurityService securityService; + + protected PaginationParameterBean pagination = PaginationParameterBean.of(0,-1); + @Before - public void setUp() { + public void setUp() throws Exception { + + loadFixtures("user-fixtures"); + + login("jean@pollen.org", "fake"); loadFixtures("fixtures"); service = newService(VoteService.class); + voterListService = newService(VoterListService.class); + + pollService = newService(PollService.class); + + securityService = newService(SecurityService.class); + getServiceContext().setSecurityContext(new FakePollenSecurityContext()); } @@ -68,8 +86,11 @@ public class VoteServiceTest extends AbstractPollenServiceTest { login("jean@pollen.org", "fake"); //Get poll - PollService pollService = newService(PollService.class); - PollBean poll = pollService.getPolls(pagination,"").getElements().get(0); + PollBean poll = pollService.getPolls(pagination,"").getElements() + .stream() + .filter(pollFilter -> pollFilter.getTitle().equals("Sondage normal")) + .collect(Collectors.toList()) + .get(0); String pollId = poll.getEntityId(); String questionId = poll.getQuestions().get(0).getEntityId(); PollenEntityId<Choice> choice1Id = poll.getQuestions().get(0).getChoices().get(0).getId(); @@ -122,4 +143,116 @@ public class VoteServiceTest extends AbstractPollenServiceTest { Assert.assertEquals("test3", votes3.get(0).getVoterName()); Assert.assertEquals(1, votes3.get(0).getChoice().size()); } + + @Test + public void testInvitedVote() throws Exception { + getServiceContext().setDate(new Date(1389744000000L)); + + login("jean@pollen.org", "fake"); + + //Get poll + PollBean poll = pollService.getPolls(pagination,"").getElements() + .stream() + .filter(pollFilter -> pollFilter.getTitle().equals("Sondage restricted")) + .collect(Collectors.toList()) + .get(0); + String pollId = poll.getEntityId(); + String questionId = poll.getQuestions().get(0).getEntityId(); + PollenEntityId<Choice> choice1Id = poll.getQuestions().get(0).getChoices().get(0).getId(); + + PollenPrincipal userPrincipal = securityService.generatePollenPrincipal(); + userPrincipal.setPollenUser(securityService.getSecurityContext().getPollenUser()); + + securityService.getSecurityContext().setMainPrincipal(userPrincipal); + + //Voters + VoterListBean voterList = new VoterListBean(); + voterList.setWeight(1); + voterList.setName("voterList1"); + List<VoterListMemberBean> listMember = new ArrayList<>(); + VoterListMemberBean member1 = new VoterListMemberBean(); + member1.setName("member1"); + member1.setEmail("member1@pollen.org"); + member1.setWeight(1); + listMember.add(member1); + VoterListMemberBean member2 = new VoterListMemberBean(); + member2.setName("member2"); + member2.setEmail("jean@pollen.org"); + member2.setWeight(1); + listMember.add(member2); + VoterListMemberBean member3 = new VoterListMemberBean(); + member3.setName("member3"); + member3.setEmail("member3@pollen.org"); + member3.setWeight(1); + listMember.add(member3); + voterList.setCountMembers(3); + PollenEntityRef<VoterList> voterListId = voterListService.addVoterList(pollId, voterList, listMember); + + VoterList list = voterListService.getVoterList0(poll.getEntityId(), voterListId.getEntityId()); + List<VoterListMember> members = voterListService.getVoterListMembers0(list.getTopiaId()); + PollenPrincipal member1Token = null; + for (VoterListMember member:members) { + if (member.getMember().getName().equals(member1.getName())) { + member1Token = member.getMember(); + } + } + + //The vote used for all tests + VoteBean vote = new VoteBean(); + VoteToChoiceBean bean1 = new VoteToChoiceBean(); + bean1.setChoiceId(choice1Id); + bean1.setVoteValue(1.0); + vote.addChoice(bean1); + vote.setVoterName("test1"); + + //Cannot vote as wrongly logged in user + login("tony@pollen.org", "fake"); + try { + vote.setVoterName("tony@pollen.org"); + service.addVote(pollId, questionId, vote); + Assert.fail("Exception should have been thrown"); + } catch (PollenInvalidPermissionException eee) { + //Normal exception thrown + } + + //should be able to vote with token + securityService.getSecurityContext().setMainPrincipal(member1Token); + vote.setVoterName("member1@pollen.org"); + vote.setPermission(member1Token.getPermission().getToken()); + service.addVote(pollId, questionId, vote); + + //cannot vote twice with token + try { + service.addVote(pollId, questionId, vote); + Assert.fail("Exception should have been thrown"); + } catch (PollenInvalidPermissionException eee) { + //Normal exception thrown + } + + //should be able to vote as logged in user + login("jean@pollen.org", "fake"); + securityService.getSecurityContext().setMainPrincipal(userPrincipal); + vote.setPermission(null); + vote.setVoterName("jean@pollen.org"); + service.addVote(pollId, questionId, vote); + + //cannot vote twice as logged in user + try { + service.addVote(pollId, questionId, vote); + Assert.fail("Exception should have been thrown"); + } catch (PollenInvalidPermissionException eee) { + //Normal exception thrown + } + + //properly listed as voted in voterslist + PaginationResultBean<VoterListMemberBean> voters = voterListService.getAllVoterListMembers(poll.getEntityId(), pagination); + for (VoterListMemberBean voter:voters.getElements()) { + if (voter.getName().equals("jean@pollen.org") || voter.getName().equals("member1@pollen.org")) { + Assert.assertTrue(voter.isVoting()); + } else { + Assert.assertFalse(voter.isVoting()); + } + } + + } } -- To stop receiving notification emails like this one, please contact chorem.org SCM administrator <admin+scm@chorem.org>.