From 671b0791ecc8c46f1c573635b758d16779b14074 Mon Sep 17 00:00:00 2001 From: chasegawa Date: Tue, 27 Sep 2022 10:10:16 -0700 Subject: [PATCH] SHIBUI-2394 incremental progress --- .../admin/ui/security/model/Approvers.java | 24 +++++++++++++ .../admin/ui/security/model/Group.java | 6 ++++ .../security/service/GroupServiceTests.groovy | 34 +++++++++++++++++++ 3 files changed, 64 insertions(+) create mode 100644 backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/model/Approvers.java diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/model/Approvers.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/model/Approvers.java new file mode 100644 index 000000000..9d51e403d --- /dev/null +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/model/Approvers.java @@ -0,0 +1,24 @@ +package edu.internet2.tier.shibboleth.admin.ui.security.model; + +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.ManyToMany; +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; + +@Data +@NoArgsConstructor +@Entity(name = "approvers") +public class Approvers { + @Id + @Column(name = "resource_id") + private String resourceId = UUID.randomUUID().toString(); + + @ManyToMany + private Set approverGroups = new HashSet<>(); +} \ No newline at end of file diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/model/Group.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/model/Group.java index c0d579c30..ffba5ac0f 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/model/Group.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/model/Group.java @@ -1,6 +1,8 @@ package edu.internet2.tier.shibboleth.admin.ui.security.model; +import java.util.ArrayList; import java.util.HashSet; +import java.util.List; import java.util.Set; import java.util.UUID; @@ -8,6 +10,7 @@ import javax.persistence.Entity; import javax.persistence.EntityListeners; import javax.persistence.Id; +import javax.persistence.OneToMany; import javax.persistence.Transient; import com.fasterxml.jackson.annotation.JsonIgnore; @@ -51,6 +54,9 @@ public class Group implements Owner { @Column(name = "validation_regex") private String validationRegex; + @OneToMany + private List approvalGroups = new ArrayList<>(); + /** * Define a Group object based on the user */ diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/security/service/GroupServiceTests.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/security/service/GroupServiceTests.groovy index c88838875..43aed5f75 100644 --- a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/security/service/GroupServiceTests.groovy +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/security/service/GroupServiceTests.groovy @@ -2,6 +2,7 @@ package edu.internet2.tier.shibboleth.admin.ui.security.service import edu.internet2.tier.shibboleth.admin.ui.AbstractBaseDataJpaTest import edu.internet2.tier.shibboleth.admin.ui.security.exception.InvalidGroupRegexException +import edu.internet2.tier.shibboleth.admin.ui.security.model.Approvers import edu.internet2.tier.shibboleth.admin.ui.security.model.Group import org.springframework.test.annotation.Rollback @@ -80,4 +81,37 @@ class GroupServiceTests extends AbstractBaseDataJpaTest { !groupService.doesStringMatchGroupPattern("AAA", "something") groupService.doesStringMatchGroupPattern("AAA", "/foobar/") } + + def "CRUD operations - approver groups" () { + given: + groupService.clearAllForTesting(); + HashSet apprGroups = new HashSet<>() + String[] groupNames = ['AAA', 'BBB', 'CCC', 'DDD'] + groupNames.each {name -> { + Group group = new Group().with({ + it.name = name + it.description = name + it.resourceId = name + it + }) + group = groupRepository.saveAndFlush(group) + if (!name.equals('AAA')) { + apprGroups.add(group) + } + }} + + when: "Adding approval list to a group" + Approvers approvers = new Approvers() + approvers.setApproverGroups(apprGroups) + List apprList = new ArrayList<>() + apprList.add(approvers) + Group aaaGroup = groupService.find('AAA') + aaaGroup.setApprovalGroups(apprList) + groupService.updateGroup(aaaGroup) + Group lookupGroup = groupService.find('AAA') + + then: + lookupGroup.getApprovalGroups().size() == 1 + } + } \ No newline at end of file