From 8185adba9a198c45fdec0d2fc16d521c4c02715f Mon Sep 17 00:00:00 2001 From: Tamas Szirbucz Date: Mon, 29 Apr 2019 11:21:27 +0200 Subject: [PATCH] Spring refactor of #242 --- .../assurance/ADAAssuranceManager.java | 15 ++++++ .../pdengine/assurance/AssuranceManager.java | 11 ++++ .../pdengine/votecast/CastVote.java | 27 +++++----- .../pdengine/votecast/CastVoteEntity.java | 14 ++--- .../votecast/CastVoteServiceImpl.java | 16 +++++- .../pdengine/UnimplementedTests.java | 23 -------- .../assurance/AssuranceManagerTest.java | 29 ++++++++++ .../testhelpers/CastVoteTestHelper.java | 12 ++--- .../votecast/CastVoteAssuranceTest.java | 53 +++++++++++++++++++ .../pdengine/votecast/CastVoteTestBase.java | 44 +++++++++------ 10 files changed, 179 insertions(+), 65 deletions(-) create mode 100644 src/main/java/org/rulez/demokracia/pdengine/assurance/ADAAssuranceManager.java create mode 100644 src/main/java/org/rulez/demokracia/pdengine/assurance/AssuranceManager.java delete mode 100644 src/test/java/org/rulez/demokracia/pdengine/UnimplementedTests.java create mode 100644 src/test/java/org/rulez/demokracia/pdengine/assurance/AssuranceManagerTest.java create mode 100644 src/test/java/org/rulez/demokracia/pdengine/votecast/CastVoteAssuranceTest.java diff --git a/src/main/java/org/rulez/demokracia/pdengine/assurance/ADAAssuranceManager.java b/src/main/java/org/rulez/demokracia/pdengine/assurance/ADAAssuranceManager.java new file mode 100644 index 00000000..65bc402a --- /dev/null +++ b/src/main/java/org/rulez/demokracia/pdengine/assurance/ADAAssuranceManager.java @@ -0,0 +1,15 @@ +package org.rulez.demokracia.pdengine.assurance; + +import java.util.List; + +import org.springframework.stereotype.Service; + +@Service +public class ADAAssuranceManager implements AssuranceManager { + + @Override + public List getAssurances(final String proxyId) { + throw new UnsupportedOperationException(); + } + +} diff --git a/src/main/java/org/rulez/demokracia/pdengine/assurance/AssuranceManager.java b/src/main/java/org/rulez/demokracia/pdengine/assurance/AssuranceManager.java new file mode 100644 index 00000000..5d3ef23f --- /dev/null +++ b/src/main/java/org/rulez/demokracia/pdengine/assurance/AssuranceManager.java @@ -0,0 +1,11 @@ +package org.rulez.demokracia.pdengine.assurance; + +import java.util.List; + +import org.springframework.stereotype.Service; + +@Service +public interface AssuranceManager { + + List getAssurances(String proxyId); +} diff --git a/src/main/java/org/rulez/demokracia/pdengine/votecast/CastVote.java b/src/main/java/org/rulez/demokracia/pdengine/votecast/CastVote.java index 6dc2c937..26c863fd 100644 --- a/src/main/java/org/rulez/demokracia/pdengine/votecast/CastVote.java +++ b/src/main/java/org/rulez/demokracia/pdengine/votecast/CastVote.java @@ -6,19 +6,22 @@ import org.rulez.demokracia.pdengine.RandomUtils; import org.rulez.demokracia.pdengine.choice.RankedChoice; - public class CastVote extends CastVoteEntity implements CastVoteInterface { - private static final long serialVersionUID = 1L; - public CastVote(final String proxyId, final List preferences) { - super(); - this.setProxyId(proxyId); - this.setPreferences(new ArrayList<>(preferences)); - setSecretId(RandomUtils.createRandomKey()); - } + private static final long serialVersionUID = 1L; + + public CastVote(final String proxyId, final List preferences) { + super(); + setProxyId(proxyId); + setPreferences(new ArrayList<>(preferences)); + setSecretId(RandomUtils.createRandomKey()); + } - @Override - public List getAssurances() { - throw new UnsupportedOperationException(); - } + public CastVote( + final String proxyId, final List preferences, + final List assurances + ) { + this(proxyId, preferences); + setAssurances(assurances); + } } diff --git a/src/main/java/org/rulez/demokracia/pdengine/votecast/CastVoteEntity.java b/src/main/java/org/rulez/demokracia/pdengine/votecast/CastVoteEntity.java index bbae8def..547c5679 100644 --- a/src/main/java/org/rulez/demokracia/pdengine/votecast/CastVoteEntity.java +++ b/src/main/java/org/rulez/demokracia/pdengine/votecast/CastVoteEntity.java @@ -15,11 +15,13 @@ @Setter @Entity public class CastVoteEntity extends BaseEntity { - private static final long serialVersionUID = 1L; - @ElementCollection - private List preferences; - private String proxyId; - private String secretId; - private String signature; + + private static final long serialVersionUID = 1L; + @ElementCollection + private List preferences; + private String proxyId; + private String secretId; + private String signature; + private List assurances; } diff --git a/src/main/java/org/rulez/demokracia/pdengine/votecast/CastVoteServiceImpl.java b/src/main/java/org/rulez/demokracia/pdengine/votecast/CastVoteServiceImpl.java index d5636344..4434a2dc 100644 --- a/src/main/java/org/rulez/demokracia/pdengine/votecast/CastVoteServiceImpl.java +++ b/src/main/java/org/rulez/demokracia/pdengine/votecast/CastVoteServiceImpl.java @@ -6,6 +6,7 @@ import java.util.List; import java.util.Objects; +import org.rulez.demokracia.pdengine.assurance.AssuranceManager; import org.rulez.demokracia.pdengine.authentication.AuthenticatedUserService; import org.rulez.demokracia.pdengine.choice.RankedChoice; import org.rulez.demokracia.pdengine.vote.Vote; @@ -22,6 +23,9 @@ public class CastVoteServiceImpl implements CastVoteService { @Autowired private VoteService voteService; + @Autowired + private AssuranceManager assuranceManager; + @Override public CastVote castVote( final String voteId, final String ballot, @@ -45,11 +49,21 @@ public CastVote castVote( vote.getVotesCast() .removeIf(castVote -> proxyId.equals(castVote.getProxyId())); - final CastVote castVote = new CastVote(proxyId, rankedChoices); + final CastVote castVote = createCastVote(rankedChoices, proxyId); vote.getVotesCast().add(castVote); return castVote; } + private CastVote + createCastVote( + final List rankedChoices, final String proxyId + ) { + return Objects.isNull(proxyId) ? new CastVote(proxyId, rankedChoices) : + new CastVote( + proxyId, rankedChoices, assuranceManager.getAssurances(proxyId) + ); + } + private void validateInput( final String ballot, final List rankedChoices, final Vote vote diff --git a/src/test/java/org/rulez/demokracia/pdengine/UnimplementedTests.java b/src/test/java/org/rulez/demokracia/pdengine/UnimplementedTests.java deleted file mode 100644 index f10689e4..00000000 --- a/src/test/java/org/rulez/demokracia/pdengine/UnimplementedTests.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.rulez.demokracia.pdengine; - -import java.util.ArrayList; - -import org.junit.Test; -import org.rulez.demokracia.pdengine.annotations.TestedBehaviour; -import org.rulez.demokracia.pdengine.annotations.TestedFeature; -import org.rulez.demokracia.pdengine.annotations.TestedOperation; -import org.rulez.demokracia.pdengine.testhelpers.ThrowableTester; -import org.rulez.demokracia.pdengine.votecast.CastVote; - -@TestedFeature("Unimplemented") -@TestedOperation("Unimplemented") -@TestedBehaviour("Unimplemented") -public class UnimplementedTests extends ThrowableTester { - - @Test - public void the_getAssurances_method_is_not_implemented_yet() { - assertUnimplemented( - () -> new CastVote("proxyId", new ArrayList<>()).getAssurances() - ); - } -} diff --git a/src/test/java/org/rulez/demokracia/pdengine/assurance/AssuranceManagerTest.java b/src/test/java/org/rulez/demokracia/pdengine/assurance/AssuranceManagerTest.java new file mode 100644 index 00000000..d0642a60 --- /dev/null +++ b/src/test/java/org/rulez/demokracia/pdengine/assurance/AssuranceManagerTest.java @@ -0,0 +1,29 @@ +package org.rulez.demokracia.pdengine.assurance; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.junit.MockitoJUnitRunner; +import org.rulez.demokracia.pdengine.annotations.TestedBehaviour; +import org.rulez.demokracia.pdengine.annotations.TestedFeature; +import org.rulez.demokracia.pdengine.annotations.TestedOperation; +import org.rulez.demokracia.pdengine.testhelpers.ThrowableTester; + +@TestedFeature("Supporting functionality") +@TestedOperation("Assurance management") +@TestedBehaviour("Unimplemented") +@RunWith(MockitoJUnitRunner.class) +public class AssuranceManagerTest extends ThrowableTester { + + private static final String PROXY_ID = "proxyId"; + + @InjectMocks + private ADAAssuranceManager assuranceManager; + + @Test + public void getAssurances_is_unimplemented_yet() throws Exception { + assertUnimplemented( + () -> assuranceManager.getAssurances(PROXY_ID) + ); + } +} diff --git a/src/test/java/org/rulez/demokracia/pdengine/testhelpers/CastVoteTestHelper.java b/src/test/java/org/rulez/demokracia/pdengine/testhelpers/CastVoteTestHelper.java index a30fa876..b6aafa1c 100644 --- a/src/test/java/org/rulez/demokracia/pdengine/testhelpers/CastVoteTestHelper.java +++ b/src/test/java/org/rulez/demokracia/pdengine/testhelpers/CastVoteTestHelper.java @@ -11,16 +11,16 @@ public class CastVoteTestHelper { public static final Choice CHOICE_A = new Choice("A", "user"); public static final Choice CHOICE_B = new Choice("B", "user"); + public static final List RANKED_CHOICES = + List.of(new RankedChoice(CHOICE_A.getId(), 1)); public static void fillVoteWithDummyCastVotes(final Vote vote) { vote.addChoice(CHOICE_A); vote.addChoice(CHOICE_B); - final List rankedChoices = - List.of(new RankedChoice(CHOICE_A.getId(), 1)); - vote.getVotesCast().add(new CastVote("user1", rankedChoices)); - vote.getVotesCast().add(new CastVote("user2", rankedChoices)); - vote.getVotesCast().add(new CastVote(null, rankedChoices)); - vote.getVotesCast().add(new CastVote("user3", rankedChoices)); + vote.getVotesCast().add(new CastVote("user1", RANKED_CHOICES)); + vote.getVotesCast().add(new CastVote("user2", RANKED_CHOICES)); + vote.getVotesCast().add(new CastVote(null, RANKED_CHOICES)); + vote.getVotesCast().add(new CastVote("user3", RANKED_CHOICES)); } } diff --git a/src/test/java/org/rulez/demokracia/pdengine/votecast/CastVoteAssuranceTest.java b/src/test/java/org/rulez/demokracia/pdengine/votecast/CastVoteAssuranceTest.java new file mode 100644 index 00000000..fd53f4c5 --- /dev/null +++ b/src/test/java/org/rulez/demokracia/pdengine/votecast/CastVoteAssuranceTest.java @@ -0,0 +1,53 @@ +package org.rulez.demokracia.pdengine.votecast; + +import static org.junit.Assert.*; +import static org.mockito.Mockito.when; +import static org.rulez.demokracia.pdengine.testhelpers.CastVoteTestHelper.RANKED_CHOICES; + +import java.util.Objects; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.junit.MockitoJUnitRunner; +import org.rulez.demokracia.pdengine.annotations.TestedBehaviour; +import org.rulez.demokracia.pdengine.annotations.TestedFeature; +import org.rulez.demokracia.pdengine.annotations.TestedOperation; + +@TestedFeature("Supporting functionality") +@TestedOperation("CastVote") +@RunWith(MockitoJUnitRunner.class) +public class CastVoteAssuranceTest extends CastVoteTestBase { + + @Override + @Before + public void setUp() { + super.setUp(); + when(authService.getAuthenticatedUserName()).thenReturn(USER_NAME); + when(assuranceManager.getAssurances(USER_NAME)) + .thenReturn(ASSURANCES); + } + + @TestedBehaviour( + "The assurances of the voter can be obtained from a cast vote if canupdateis true" + ) + @Test + public void + the_assurances_of_the_voter_can_be_obtained_from_a_cast_vote_if_canupdate_is_true() { + vote.getParameters().setUpdatable(true); + final CastVote castVote = castVoteService + .castVote(vote.getId(), ballot, RANKED_CHOICES); + assertEquals(ASSURANCES, castVote.getAssurances()); + } + + @TestedBehaviour( + "The assurances of the voter can be obtained from a cast vote if canupdateis true" + ) + @Test + public void the_assurances_of_the_voter_is_null_if_canupdate_is_false() { + vote.getParameters().setUpdatable(false); + final CastVote castVote = castVoteService + .castVote(vote.getId(), ballot, RANKED_CHOICES); + assertTrue(Objects.isNull(castVote.getAssurances())); + } +} diff --git a/src/test/java/org/rulez/demokracia/pdengine/votecast/CastVoteTestBase.java b/src/test/java/org/rulez/demokracia/pdengine/votecast/CastVoteTestBase.java index 10e81211..07bac973 100644 --- a/src/test/java/org/rulez/demokracia/pdengine/votecast/CastVoteTestBase.java +++ b/src/test/java/org/rulez/demokracia/pdengine/votecast/CastVoteTestBase.java @@ -2,10 +2,13 @@ import static org.mockito.Mockito.when; +import java.util.List; + import org.apache.catalina.connector.CoyotePrincipal; import org.junit.Before; import org.mockito.InjectMocks; import org.mockito.Mock; +import org.rulez.demokracia.pdengine.assurance.AssuranceManager; import org.rulez.demokracia.pdengine.authentication.AuthenticatedUserService; import org.rulez.demokracia.pdengine.testhelpers.CastVoteTestHelper; import org.rulez.demokracia.pdengine.testhelpers.ThrowableTester; @@ -15,25 +18,32 @@ public class CastVoteTestBase extends ThrowableTester { - @InjectMocks - protected CastVoteServiceImpl castVoteService; + protected static final String USER_NAME = "name"; + + protected static final List ASSURANCES = List.of("madjare", "inglis"); + + @InjectMocks + protected CastVoteServiceImpl castVoteService; - @Mock - protected VoteService voteService; - @Mock - protected AuthenticatedUserService authService; + @Mock + protected VoteService voteService; + @Mock + protected AuthenticatedUserService authService; + @Mock + protected AssuranceManager assuranceManager; - protected Vote vote = new VariantVote(); + protected Vote vote = new VariantVote(); - protected String ballot = "ballotgyorgy"; + protected String ballot = "ballotgyorgy"; - @Before - public void setUp() { - when(voteService.getVote(vote.getId())).thenReturn(vote); - when(authService.getUserPrincipal()).thenReturn(new CoyotePrincipal("name")); - vote.getParameters().setVotable(true); - vote.getParameters().setUpdatable(true); - CastVoteTestHelper.fillVoteWithDummyCastVotes(vote); - vote.addBallot(ballot); - } + @Before + public void setUp() { + when(voteService.getVote(vote.getId())).thenReturn(vote); + when(authService.getUserPrincipal()) + .thenReturn(new CoyotePrincipal(USER_NAME)); + vote.getParameters().setVotable(true); + vote.getParameters().setUpdatable(true); + CastVoteTestHelper.fillVoteWithDummyCastVotes(vote); + vote.addBallot(ballot); + } }