diff --git a/ccm-core/src/main/java/org/libreccm/security/GroupManager.java b/ccm-core/src/main/java/org/libreccm/security/GroupManager.java index 326643beb..80bcc3da6 100644 --- a/ccm-core/src/main/java/org/libreccm/security/GroupManager.java +++ b/ccm-core/src/main/java/org/libreccm/security/GroupManager.java @@ -62,6 +62,7 @@ public class GroupManager implements Serializable { @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) @Transactional(Transactional.TxType.REQUIRED) public void addMemberToGroup(final User user, final Group group) { + if (user == null) { throw new IllegalArgumentException( "Can't add null as user to a group."); diff --git a/ccm-core/src/main/java/org/libreccm/security/GroupRepository.java b/ccm-core/src/main/java/org/libreccm/security/GroupRepository.java index 1e49d9032..46b641649 100644 --- a/ccm-core/src/main/java/org/libreccm/security/GroupRepository.java +++ b/ccm-core/src/main/java/org/libreccm/security/GroupRepository.java @@ -24,8 +24,10 @@ import org.libreccm.core.CoreConstants; import javax.enterprise.context.RequestScoped; import javax.persistence.TypedQuery; import javax.transaction.Transactional; + import java.util.List; import java.util.Optional; +import java.util.UUID; /** * Repository for groups. @@ -132,6 +134,12 @@ public class GroupRepository extends AbstractEntityRepository { public void save(final Group group) { super.save(group); } + + @Override + public void initNewEntity(final Group group) { + + group.setUuid(UUID.randomUUID().toString()); + } @AuthorizationRequired @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) diff --git a/ccm-core/src/test/java/org/libreccm/security/GroupManagerTest.java b/ccm-core/src/test/java/org/libreccm/security/GroupManagerTest.java index 601a47d8e..632ead654 100644 --- a/ccm-core/src/test/java/org/libreccm/security/GroupManagerTest.java +++ b/ccm-core/src/test/java/org/libreccm/security/GroupManagerTest.java @@ -153,8 +153,10 @@ public class GroupManagerTest { @Test @UsingDataSet("datasets/org/libreccm/security/GroupManagerTest/data.yml") @ShouldMatchDataSet( - value = "datasets/org/libreccm/security/GroupManagerTest/after-add.yml", - excludeColumns = {"membership_id"}) + excludeColumns = {"membership_id", "uuid"}, + orderBy = {"group_memberships.membership_id"}, + value = "datasets/org/libreccm/security/GroupManagerTest/after-add.yml" + ) @InSequence(200) public void addUserToGroup() { final Group admins = groupRepository.findByName("admins").get(); diff --git a/ccm-core/src/test/java/org/libreccm/security/GroupRepositoryTest.java b/ccm-core/src/test/java/org/libreccm/security/GroupRepositoryTest.java index 9fc154564..212fc7b26 100644 --- a/ccm-core/src/test/java/org/libreccm/security/GroupRepositoryTest.java +++ b/ccm-core/src/test/java/org/libreccm/security/GroupRepositoryTest.java @@ -149,15 +149,15 @@ public class GroupRepositoryTest { final Optional editors, final Optional none) { assertThat(admins.isPresent(), is(true)); - assertThat(admins.get().getPartyId(), is(-10L)); + assertThat(admins.get().getPartyId(), is(10L)); assertThat(admins.get().getName(), is(equalTo(ADMINS))); assertThat(users.isPresent(), is(true)); - assertThat(users.get().getPartyId(), is(-20L)); + assertThat(users.get().getPartyId(), is(20L)); assertThat(users.get().getName(), is(equalTo(USERS))); assertThat(editors.isPresent(), is(true)); - assertThat(editors.get().getPartyId(), is(-30L)); + assertThat(editors.get().getPartyId(), is(30L)); assertThat(editors.get().getName(), is(equalTo(EDITORS))); assertThat(none.isPresent(), is(false)); @@ -167,10 +167,10 @@ public class GroupRepositoryTest { @UsingDataSet("datasets/org/libreccm/security/GroupRepositoryTest/data.yml") @InSequence(100) public void findGroupById() { - final Optional admins = groupRepository.findById(-10L); - final Optional users = groupRepository.findById(-20L); - final Optional editors = groupRepository.findById(-30L); - final Optional none = groupRepository.findById(-999L); + final Optional admins = groupRepository.findById(10L); + final Optional users = groupRepository.findById(20L); + final Optional editors = groupRepository.findById(30L); + final Optional none = groupRepository.findById(999L); checkGroups(admins, users, editors, none); } @@ -198,9 +198,11 @@ public class GroupRepositoryTest { @Test @UsingDataSet("datasets/org/libreccm/security/GroupRepositoryTest/data.yml") - @ShouldMatchDataSet(value = "datasets/org/libreccm/security/" - + "GroupRepositoryTest/after-save-new.yml", - excludeColumns = {"party_id"}) + @ShouldMatchDataSet( + excludeColumns = {"party_id", "uuid"}, + value = "datasets/org/libreccm/security/" + + "GroupRepositoryTest/after-save-new.yml" + ) @InSequence(400) public void saveNewGroup() { final Group authors = new Group(); @@ -216,7 +218,7 @@ public class GroupRepositoryTest { excludeColumns = {"party_id"}) @InSequence(500) public void saveChangedGroup() { - final Group group = groupRepository.findById(-30L).get(); + final Group group = groupRepository.findById(30L).get(); group.setName("authors"); groupRepository.save(group); diff --git a/ccm-core/src/test/java/org/libreccm/security/PartyRepositoryTest.java b/ccm-core/src/test/java/org/libreccm/security/PartyRepositoryTest.java index 047c06c0e..722609114 100644 --- a/ccm-core/src/test/java/org/libreccm/security/PartyRepositoryTest.java +++ b/ccm-core/src/test/java/org/libreccm/security/PartyRepositoryTest.java @@ -151,11 +151,11 @@ public class PartyRepositoryTest { @UsingDataSet("datasets/org/libreccm/security/PartyRepositoryTest/data.yml") @InSequence(100) public void findPartyById() { - final User jdoe = (User) partyRepository.findById(-10L).get(); - final Group admins = (Group) partyRepository.findById(-20L).get(); + final User jdoe = (User) partyRepository.findById(10L).get(); + final Group admins = (Group) partyRepository.findById(20L).get(); assertThat(jdoe, is(not(nullValue()))); - assertThat(jdoe.getPartyId(), is(-10L)); + assertThat(jdoe.getPartyId(), is(10L)); assertThat(jdoe.getName(), is(equalTo(JDOE))); assertThat(jdoe.getFamilyName(), is(equalTo("Doe"))); assertThat(jdoe.getGivenName(), is(equalTo("John"))); @@ -164,7 +164,7 @@ public class PartyRepositoryTest { "$shiro1$SHA-512$500000$7xkDcZUN0/whJInHIvGsDw==$WhelBVmJU/cLV7lAkMOrE5B/mqCW0bUuid1WX+xBwzzAaekC5bYn9eeOFGJWhiDgmaC50ZCUmM96/iGsRoc4uA=="))); assertThat(admins, is(not(nullValue()))); - assertThat(admins.getPartyId(), is(-20L)); + assertThat(admins.getPartyId(), is(20L)); assertThat(admins.getName(), is(equalTo(ADMINS))); } @@ -176,7 +176,7 @@ public class PartyRepositoryTest { final Group admins = (Group) partyRepository.findByName(ADMINS).get(); assertThat(jdoe, is(not(nullValue()))); - assertThat(jdoe.getPartyId(), is(-10L)); + assertThat(jdoe.getPartyId(), is(10L)); assertThat(jdoe.getName(), is(equalTo(JDOE))); assertThat(jdoe.getFamilyName(), is(equalTo("Doe"))); assertThat(jdoe.getGivenName(), is(equalTo("John"))); @@ -185,7 +185,7 @@ public class PartyRepositoryTest { "$shiro1$SHA-512$500000$7xkDcZUN0/whJInHIvGsDw==$WhelBVmJU/cLV7lAkMOrE5B/mqCW0bUuid1WX+xBwzzAaekC5bYn9eeOFGJWhiDgmaC50ZCUmM96/iGsRoc4uA=="))); assertThat(admins, is(not(nullValue()))); - assertThat(admins.getPartyId(), is(-20L)); + assertThat(admins.getPartyId(), is(20L)); assertThat(admins.getName(), is(equalTo(ADMINS))); } @@ -200,9 +200,10 @@ public class PartyRepositoryTest { @Test @UsingDataSet("datasets/org/libreccm/security/PartyRepositoryTest/data.yml") - @ShouldMatchDataSet(value = "datasets/org/libreccm/security/" - + "PartyRepositoryTest/after-save-new.yml", - excludeColumns = {"party_id", "password"} + @ShouldMatchDataSet( + excludeColumns = {"party_id", "uuid", "password"}, + value = "datasets/org/libreccm/security/" + + "PartyRepositoryTest/after-save-new.yml" ) @InSequence(300) public void saveNewParty() { @@ -238,8 +239,8 @@ public class PartyRepositoryTest { ) @InSequence(400) public void saveChangedParty() { - final Party user = partyRepository.findById(-10L).get(); - final Party group = partyRepository.findById(-20L).get(); + final Party user = partyRepository.findById(10L).get(); + final Party group = partyRepository.findById(20L).get(); user.setName("johndoe"); group.setName("managers"); @@ -264,7 +265,7 @@ public class PartyRepositoryTest { excludeColumns = {"party_id"}) @InSequence(600) public void deleteParty() { - final Party user = partyRepository.findById(-10L).get(); + final Party user = partyRepository.findById(10L).get(); shiro.getSystemUser().execute(() -> partyRepository.delete(user)); } diff --git a/ccm-core/src/test/resources/datasets/org/libreccm/security/GroupManagerTest/after-add.yml b/ccm-core/src/test/resources/datasets/org/libreccm/security/GroupManagerTest/after-add.yml index 913b52c26..fc3872825 100644 --- a/ccm-core/src/test/resources/datasets/org/libreccm/security/GroupManagerTest/after-add.yml +++ b/ccm-core/src/test/resources/datasets/org/libreccm/security/GroupManagerTest/after-add.yml @@ -1,26 +1,26 @@ ccm_core.parties: # John Doe - - party_id": 10 + - party_id: 10 uuid: 631be113-7e86-453d-9f8b-8cb6cb6df268 name: jdoe # Max Muster - - party_id": 20 + - party_id: 20 uuid: 3a61d302-97a5-4e46-bbc9-8d716f7c54c4 name: mmuster # Joe Public - - party_id": 30 + - party_id: 30 uuid: 7d5ad4a7-c2bd-4e49-8716-0bfb40413c75 name: joe # admins - - party_id": 40 + - party_id: 40 uuid: 0fc446b7-a242-4407-9d04-b8ccaaa9dee5 name: admins # users - - party_id": 50 + - party_id: 50 uuid: 2082d7fc-8268-4195-8cbe-eb826b1afaeb name: users # editors - - party_id": 60 + - party_id: 60 uuid: 176bfecc-c0fa-4e76-8935-5d6d0ec60e8c name: editors ccm_core.users: @@ -30,7 +30,7 @@ ccm_core.users: email_address: john.doe@example.com family_name: Doe given_name: John - party_id": 10 + party_id: 10 # foo123 password: $shiro1$SHA-512$500000$7xkDcZUN0/whJInHIvGsDw==$WhelBVmJU/cLV7lAkMOrE5B/mqCW0bUuid1WX+xBwzzAaekC5bYn9eeOFGJWhiDgmaC50ZCUmM96/iGsRoc4uA== password_reset_required: false @@ -41,7 +41,7 @@ ccm_core.users: email_address: max.mustermann@example.org family_name: Mustermann given_name: Max - party_id": 20 + party_id: 20 # foo123 password: $shiro1$SHA-512$500000$Y7CnccN1h25sR7KCElMOXg==$CVLWBhetodaEzzhDfGjRcCFZtSW02xOnjH7xhBx0lbxO66grKIt6LWmXoUhLEydce1JZ7cbzNLYOxIwwTeqi5Q== password_reset_required: false @@ -52,45 +52,45 @@ ccm_core.users: email_address: joe.public@example.com family_name: Public given_name: Joe - party_id": 30 + party_id: 30 password: $shiro1$SHA-512$500000$RUCYXAQt+XzUmj3x8oG5gw==$qU+lX160Jc6sNUOI9X85wlf2lzn4/hLJNURtjmw9LOYJ7vAqUFFmhyNCMxpzuHIpzeMELr+A0XReoSmtcZnOOw== password_reset_required: false verified: true ccm_core.groups: # admins - - party_id": 40 + - party_id: 40 # users - - party_id": 50 + - party_id: 50 # editors - - party_id": 60 + - party_id: 60 ccm_core.group_memberships: # admins <-> jdoe - - membership_id": 100 + - membership_id: 100 uuid: 1f9dad0a-c51a-49e7-8720-c3c669cde67e - group_id": 40 - member_id": 10 + group_id: 40 + member_id: 10 # users <-> mmuster - - membership_id": 200 + - membership_id: 200 uuid: 3837b1c2-b4e4-44b9-a92f-2330d76b51df - group_id": 50 - member_id": 20 + group_id: 50 + member_id: 20 # users <-> joe - - membership_id": 300 + - membership_id: 300 uuid: cf8ffbc6-96d3-4e23-9503-4b396ea112aa - group_id": 50 - member_id": 30 + group_id: 50 + member_id: 30 # editors <-> joe - - membership_id": 400 + - membership_id: 400 uuid: 610ad227-cc55-4a8f-b532-3a5204f9d2dd - group_id": 60 - member_id": 30 + group_id: 60 + member_id: 30 # admins <-> mmuster - - membership_id": 500 + - membership_id: 500 uuid: 555657c8-e8ce-41e1-a327-f853901c8813 - group_id": 40 - member_id": 20 + group_id: 40 + member_id: 20 # editors <-> jdoe - - membership_id": 600 + - membership_id: 600 uuid: ed78b175-3ff3-4f34-8a5f-829e2113c593 - group_id": 60 - member_id": 10 \ No newline at end of file + group_id: 60 + member_id: 10 \ No newline at end of file diff --git a/ccm-core/src/test/resources/datasets/org/libreccm/security/GroupManagerTest/after-remove.yml b/ccm-core/src/test/resources/datasets/org/libreccm/security/GroupManagerTest/after-remove.yml index 0fef856a8..77c0e8f70 100644 --- a/ccm-core/src/test/resources/datasets/org/libreccm/security/GroupManagerTest/after-remove.yml +++ b/ccm-core/src/test/resources/datasets/org/libreccm/security/GroupManagerTest/after-remove.yml @@ -1,26 +1,26 @@ ccm_core.parties: # John Doe - - party_id": 10 + - party_id: 10 uuid: 631be113-7e86-453d-9f8b-8cb6cb6df268 name: jdoe # Max Muster - - party_id": 20 + - party_id: 20 uuid: 3a61d302-97a5-4e46-bbc9-8d716f7c54c4 name: mmuster # Joe Public - - party_id": 30 + - party_id: 30 uuid: 7d5ad4a7-c2bd-4e49-8716-0bfb40413c75 name: joe # admins - - party_id": 40 + - party_id: 40 uuid: 0fc446b7-a242-4407-9d04-b8ccaaa9dee5 name: admins # users - - party_id": 50 + - party_id: 50 uuid: 2082d7fc-8268-4195-8cbe-eb826b1afaeb name: users # editors - - party_id": 60 + - party_id: 60 uuid: 176bfecc-c0fa-4e76-8935-5d6d0ec60e8c name: editors ccm_core.users: @@ -30,7 +30,7 @@ ccm_core.users: email_address: john.doe@example.com family_name: Doe given_name: John - party_id": 10 + party_id: 10 # foo123 password: $shiro1$SHA-512$500000$7xkDcZUN0/whJInHIvGsDw==$WhelBVmJU/cLV7lAkMOrE5B/mqCW0bUuid1WX+xBwzzAaekC5bYn9eeOFGJWhiDgmaC50ZCUmM96/iGsRoc4uA== password_reset_required: false @@ -41,7 +41,7 @@ ccm_core.users: email_address: max.mustermann@example.org family_name: Mustermann given_name: Max - party_id": 20 + party_id: 20 # foo123 password: $shiro1$SHA-512$500000$Y7CnccN1h25sR7KCElMOXg==$CVLWBhetodaEzzhDfGjRcCFZtSW02xOnjH7xhBx0lbxO66grKIt6LWmXoUhLEydce1JZ7cbzNLYOxIwwTeqi5Q== password_reset_required: false @@ -52,25 +52,25 @@ ccm_core.users: email_address: joe.public@example.com family_name: Public given_name: Joe - party_id": 30 + party_id: 30 password: $shiro1$SHA-512$500000$RUCYXAQt+XzUmj3x8oG5gw==$qU+lX160Jc6sNUOI9X85wlf2lzn4/hLJNURtjmw9LOYJ7vAqUFFmhyNCMxpzuHIpzeMELr+A0XReoSmtcZnOOw== password_reset_required: false verified: true ccm_core.groups: # admins - - party_id": 40 + - party_id: 40 # users - - party_id": 50 + - party_id: 50 # editors - - party_id": 60 + - party_id: 60 ccm_core.group_memberships: # users <-> joe - - membership_id": 300 + - membership_id: 300 uuid: cf8ffbc6-96d3-4e23-9503-4b396ea112aa - group_id": 50 - member_id": 30 + group_id: 50 + member_id: 30 # editors <-> joe - - membership_id": 400 + - membership_id: 400 uuid: 610ad227-cc55-4a8f-b532-3a5204f9d2dd - group_id": 60 - member_id": 30 \ No newline at end of file + group_id: 60 + member_id: 30 \ No newline at end of file diff --git a/ccm-core/src/test/resources/datasets/org/libreccm/security/GroupManagerTest/data.yml b/ccm-core/src/test/resources/datasets/org/libreccm/security/GroupManagerTest/data.yml index d4d58fc68..a5bc9b55c 100644 --- a/ccm-core/src/test/resources/datasets/org/libreccm/security/GroupManagerTest/data.yml +++ b/ccm-core/src/test/resources/datasets/org/libreccm/security/GroupManagerTest/data.yml @@ -1,26 +1,26 @@ ccm_core.parties: # John Doe - - party_id": 10 + - party_id: 10 uuid: 631be113-7e86-453d-9f8b-8cb6cb6df268 name: jdoe # Max Muster - - party_id": 20 + - party_id: 20 uuid: 3a61d302-97a5-4e46-bbc9-8d716f7c54c4 name: mmuster # Joe Public - - party_id": 30 + - party_id: 30 uuid: 7d5ad4a7-c2bd-4e49-8716-0bfb40413c75 name: joe # admins - - party_id": 40 + - party_id: 40 uuid: 0fc446b7-a242-4407-9d04-b8ccaaa9dee5 name: admins # users - - party_id": 50 + - party_id: 50 uuid: 2082d7fc-8268-4195-8cbe-eb826b1afaeb name: users # editors - - party_id": 60 + - party_id: 60 uuid: 176bfecc-c0fa-4e76-8935-5d6d0ec60e8c name: editors ccm_core.users: @@ -30,7 +30,7 @@ ccm_core.users: email_address: john.doe@example.com family_name: Doe given_name: John - party_id": 10 + party_id: 10 # foo123 password: $shiro1$SHA-512$500000$7xkDcZUN0/whJInHIvGsDw==$WhelBVmJU/cLV7lAkMOrE5B/mqCW0bUuid1WX+xBwzzAaekC5bYn9eeOFGJWhiDgmaC50ZCUmM96/iGsRoc4uA== password_reset_required: false @@ -41,7 +41,7 @@ ccm_core.users: email_address: max.mustermann@example.org family_name: Mustermann given_name: Max - party_id": 20 + party_id: 20 # foo123 password: $shiro1$SHA-512$500000$Y7CnccN1h25sR7KCElMOXg==$CVLWBhetodaEzzhDfGjRcCFZtSW02xOnjH7xhBx0lbxO66grKIt6LWmXoUhLEydce1JZ7cbzNLYOxIwwTeqi5Q== password_reset_required: false @@ -52,35 +52,35 @@ ccm_core.users: email_address: joe.public@example.com family_name: Public given_name: Joe - party_id": 30 + party_id: 30 password: $shiro1$SHA-512$500000$RUCYXAQt+XzUmj3x8oG5gw==$qU+lX160Jc6sNUOI9X85wlf2lzn4/hLJNURtjmw9LOYJ7vAqUFFmhyNCMxpzuHIpzeMELr+A0XReoSmtcZnOOw== password_reset_required: false verified: true ccm_core.groups: # admins - - party_id": 40 + - party_id: 40 # users - - party_id": 50 + - party_id: 50 # editors - - party_id": 60 + - party_id: 60 ccm_core.group_memberships: # admins <-> jdoe - - membership_id": 100 + - membership_id: 100 uuid: 1f9dad0a-c51a-49e7-8720-c3c669cde67e - group_id": 40 - member_id": 10 + group_id: 40 + member_id: 10 # users <-> mmuster - - membership_id": 200 + - membership_id: 200 uuid: 3837b1c2-b4e4-44b9-a92f-2330d76b51df - group_id": 50 - member_id": 20 + group_id: 50 + member_id: 20 # users <-> joe - - membership_id": 300 + - membership_id: 300 uuid: cf8ffbc6-96d3-4e23-9503-4b396ea112aa - group_id": 50 - member_id": 30 + group_id: 50 + member_id: 30 # editors <-> joe - - membership_id": 400 + - membership_id: 400 uuid: 610ad227-cc55-4a8f-b532-3a5204f9d2dd - group_id": 60 - member_id": 30 \ No newline at end of file + group_id: 60 + member_id: 30 \ No newline at end of file diff --git a/ccm-core/src/test/resources/datasets/org/libreccm/security/PartyRepositoryTest/after-save-changed.yml b/ccm-core/src/test/resources/datasets/org/libreccm/security/PartyRepositoryTest/after-save-changed.yml index e75332768..e41c6067d 100644 --- a/ccm-core/src/test/resources/datasets/org/libreccm/security/PartyRepositoryTest/after-save-changed.yml +++ b/ccm-core/src/test/resources/datasets/org/libreccm/security/PartyRepositoryTest/after-save-changed.yml @@ -2,7 +2,7 @@ ccm_core.parties: # John Doe - party_id: 10 uuid: 631be113-7e86-453d-9f8b-8cb6cb6df268 - name: jdoe + name: johndoe - party_id: 20 uuid: 3a61d302-97a5-4e46-bbc9-8d716f7c54c4 name: managers