From 0b255bbb414753291a1e3e775cd2cb0ac19bfaaf Mon Sep 17 00:00:00 2001 From: Ryan Laddusaw Date: Mon, 2 Apr 2018 08:36:14 -0500 Subject: [PATCH 1/3] Added validation to Ideas and Feature Proposals --- src/main/java/edu/tamu/app/model/AbstractIdea.java | 1 - .../java/edu/tamu/app/model/FeatureProposal.java | 3 +++ src/main/java/edu/tamu/app/model/Idea.java | 2 ++ .../model/validation/FeatureProposalValidator.java | 13 +++++++++++++ .../tamu/app/model/validation/IdeaValidator.java | 5 ++++- 5 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 src/main/java/edu/tamu/app/model/validation/FeatureProposalValidator.java diff --git a/src/main/java/edu/tamu/app/model/AbstractIdea.java b/src/main/java/edu/tamu/app/model/AbstractIdea.java index 2e3a97b..1f38eaf 100644 --- a/src/main/java/edu/tamu/app/model/AbstractIdea.java +++ b/src/main/java/edu/tamu/app/model/AbstractIdea.java @@ -38,7 +38,6 @@ public abstract class AbstractIdea extends ValidatingBaseEntity { public AbstractIdea() { super(); - this.modelValidator = new IdeaValidator(); } public AbstractIdea(String title, String description) { diff --git a/src/main/java/edu/tamu/app/model/FeatureProposal.java b/src/main/java/edu/tamu/app/model/FeatureProposal.java index 6fd9169..4287ef3 100644 --- a/src/main/java/edu/tamu/app/model/FeatureProposal.java +++ b/src/main/java/edu/tamu/app/model/FeatureProposal.java @@ -20,6 +20,8 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.ObjectIdGenerators; +import edu.tamu.app.model.validation.FeatureProposalValidator; + @Entity @JsonIgnoreProperties(value = { "voters" }, allowGetters = true) public class FeatureProposal extends AbstractIdea { @@ -41,6 +43,7 @@ public class FeatureProposal extends AbstractIdea { public FeatureProposal() { super(); + this.modelValidator = new FeatureProposalValidator(); setup(); } diff --git a/src/main/java/edu/tamu/app/model/Idea.java b/src/main/java/edu/tamu/app/model/Idea.java index 066c896..fa8e98c 100644 --- a/src/main/java/edu/tamu/app/model/Idea.java +++ b/src/main/java/edu/tamu/app/model/Idea.java @@ -4,6 +4,7 @@ import javax.persistence.Entity; import edu.tamu.app.model.request.ServiceRequest; +import edu.tamu.app.model.validation.IdeaValidator; @Entity public class Idea extends AbstractIdea { @@ -13,6 +14,7 @@ public class Idea extends AbstractIdea { public Idea() { super(); + this.modelValidator = new IdeaValidator(); this.elevated = false; } diff --git a/src/main/java/edu/tamu/app/model/validation/FeatureProposalValidator.java b/src/main/java/edu/tamu/app/model/validation/FeatureProposalValidator.java new file mode 100644 index 0000000..2a1fc0d --- /dev/null +++ b/src/main/java/edu/tamu/app/model/validation/FeatureProposalValidator.java @@ -0,0 +1,13 @@ +package edu.tamu.app.model.validation; + +import edu.tamu.weaver.validation.model.InputValidationType; +import edu.tamu.weaver.validation.validators.BaseModelValidator; +import edu.tamu.weaver.validation.validators.InputValidator; + +public class FeatureProposalValidator extends BaseModelValidator { + + public FeatureProposalValidator() { + String titleProperty = "title"; + this.addInputValidator(new InputValidator(InputValidationType.required, "Feature Proposals require a title", titleProperty, true)); + } +} diff --git a/src/main/java/edu/tamu/app/model/validation/IdeaValidator.java b/src/main/java/edu/tamu/app/model/validation/IdeaValidator.java index d0e786a..0f4a13e 100644 --- a/src/main/java/edu/tamu/app/model/validation/IdeaValidator.java +++ b/src/main/java/edu/tamu/app/model/validation/IdeaValidator.java @@ -1,11 +1,14 @@ package edu.tamu.app.model.validation; +import edu.tamu.weaver.validation.model.InputValidationType; import edu.tamu.weaver.validation.validators.BaseModelValidator; +import edu.tamu.weaver.validation.validators.InputValidator; public class IdeaValidator extends BaseModelValidator { public IdeaValidator() { - + String titleProperty = "title"; + this.addInputValidator(new InputValidator(InputValidationType.required, "Ideas require a title", titleProperty, true)); } } From 3216b255bab5e2e746b017165c92839d47f6e357 Mon Sep 17 00:00:00 2001 From: Ryan Laddusaw Date: Mon, 2 Apr 2018 09:54:13 -0500 Subject: [PATCH 2/3] Added validations and preventing the same Idea from being added to a FP --- .../java/edu/tamu/app/model/FeatureProposal.java | 12 +++++++++--- .../model/validation/FeatureProposalValidator.java | 3 +++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/main/java/edu/tamu/app/model/FeatureProposal.java b/src/main/java/edu/tamu/app/model/FeatureProposal.java index 4287ef3..cb1bece 100644 --- a/src/main/java/edu/tamu/app/model/FeatureProposal.java +++ b/src/main/java/edu/tamu/app/model/FeatureProposal.java @@ -4,6 +4,7 @@ import static org.hibernate.annotations.FetchMode.SELECT; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; import javax.persistence.CascadeType; @@ -82,15 +83,20 @@ public void setIdeas(List ideas) { this.ideas.forEach(idea -> { removeVoter(idea.getAuthor()); }); - this.ideas = ideas; + HashSet ideaSet = new HashSet(); + ideaSet.addAll(ideas); + this.ideas.clear(); + this.ideas.addAll(ideaSet); this.ideas.forEach(idea -> { addVoter(idea.getAuthor()); }); } public void addIdea(Idea idea) { - this.ideas.add(idea); - addVoter(idea.getAuthor()); + if (!this.ideas.contains(idea)) { + this.ideas.add(idea); + addVoter(idea.getAuthor()); + } } public void removeIdea(Idea idea) { diff --git a/src/main/java/edu/tamu/app/model/validation/FeatureProposalValidator.java b/src/main/java/edu/tamu/app/model/validation/FeatureProposalValidator.java index 2a1fc0d..c612f4b 100644 --- a/src/main/java/edu/tamu/app/model/validation/FeatureProposalValidator.java +++ b/src/main/java/edu/tamu/app/model/validation/FeatureProposalValidator.java @@ -9,5 +9,8 @@ public class FeatureProposalValidator extends BaseModelValidator { public FeatureProposalValidator() { String titleProperty = "title"; this.addInputValidator(new InputValidator(InputValidationType.required, "Feature Proposals require a title", titleProperty, true)); + + String serviceProperty = "service"; + this.addInputValidator(new InputValidator(InputValidationType.required, "Feature Proposals require a Service", serviceProperty, true)); } } From e1b9c558b402bf241933b59b4cdf263d0e89e1de Mon Sep 17 00:00:00 2001 From: Ryan Laddusaw Date: Mon, 2 Apr 2018 11:15:16 -0500 Subject: [PATCH 3/3] Added required service validation and fixed test --- .../java/edu/tamu/app/model/validation/IdeaValidator.java | 3 +++ src/test/java/edu/tamu/app/model/FeatureProposalTest.java | 4 +++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/edu/tamu/app/model/validation/IdeaValidator.java b/src/main/java/edu/tamu/app/model/validation/IdeaValidator.java index 0f4a13e..2e741ba 100644 --- a/src/main/java/edu/tamu/app/model/validation/IdeaValidator.java +++ b/src/main/java/edu/tamu/app/model/validation/IdeaValidator.java @@ -9,6 +9,9 @@ public class IdeaValidator extends BaseModelValidator { public IdeaValidator() { String titleProperty = "title"; this.addInputValidator(new InputValidator(InputValidationType.required, "Ideas require a title", titleProperty, true)); + + String serviceProperty = "service"; + this.addInputValidator(new InputValidator(InputValidationType.required, "Ideas require a Service", serviceProperty, true)); } } diff --git a/src/test/java/edu/tamu/app/model/FeatureProposalTest.java b/src/test/java/edu/tamu/app/model/FeatureProposalTest.java index b86b3df..d9315b3 100644 --- a/src/test/java/edu/tamu/app/model/FeatureProposalTest.java +++ b/src/test/java/edu/tamu/app/model/FeatureProposalTest.java @@ -146,14 +146,16 @@ public void testElevateIdea() throws UserNotFoundException { assertEquals("The number of FeatureProposals did not increase by one", initialCount + 1, featureProposalRepo.count()); } - @Test(expected = InvalidDataAccessApiUsageException.class) + @Test public void testDuplicateIdea() throws UserNotFoundException { long initialCount = featureProposalRepo.count(); Idea testIdea = ideaRepo.create(new Idea(TEST_ALTERNATIVE_FEATURE_PROPOSAL_TITLE, TEST_ALTERNATIVE_FEATURE_PROPOSAL_DESCRIPTION, testUser, service1), TEST_CREDENTIALS); FeatureProposal featureProposal = featureProposalRepo.create(testIdea); assertEquals("The number of FeatureProposals did not increase by one", initialCount + 1, featureProposalRepo.count()); + long ideaCount = featureProposal.getIdeas().size(); featureProposal.addIdea(testIdea); featureProposalRepo.save(featureProposal); + assertEquals("The number of Ideas on the FeatureProposal did not increase", ideaCount, featureProposal.getIdeas().size()); } @Test(expected = DataIntegrityViolationException.class)