diff -u b/src/GroupMembership.php b/src/GroupMembership.php --- b/src/GroupMembership.php +++ b/src/GroupMembership.php @@ -86,7 +86,7 @@ */ protected function getGroupTypeRoles() { $properties = [ - 'group_type' => $this->groupContent->getGroup()->getGroupType()->id(), + 'group_type' => $this->groupContent->getGroup()->bundle(), 'internal' => FALSE, ]; @@ -139,26 +139,27 @@ } /** - * Add a role. + * Add a role to a member. * * @param string $role - * Role id. + * The role id for the role to add. */ public function addRole($role) { - // Check that role exists for a given group type. + // Check that the role exists for a given group type. $group_type_roles = $this->getGroupTypeRoles(); $role_exists = FALSE; foreach (array_keys($group_type_roles) as $group_type_role) { - if ($group_type_role == $role) { + if ($group_type_role === $role) { $role_exists = TRUE; + break; } } if ($role_exists) { - // Check that a user has already the role. + // Check if a member already has the role. foreach ($this->groupContent->group_roles as $key => $role_item) { - if ($role_item->target_id == $role) { + if ($role_item->target_id === $role) { return; } } @@ -169,10 +170,10 @@ } /** - * Remove a role. + * Remove a role from a member. * * @param string $role - * Role id. + * The role id for the role to remove. */ public function removeRole($role) { $roles = $this->groupContent->group_roles; only in patch2: unchanged: --- /dev/null +++ b/tests/src/Kernel/GroupMembershipTest.php @@ -0,0 +1,82 @@ +group = $this->createGroup(); + } + + /** + * Tests the addition of a role to a member of a group. + * + * @covers ::addRole + */ + public function testAddRole() { + $account = $this->createUser(); + $this->group->addMember($account); + $member = $this->group->getMember($account); + $memberRoles = $member->getRoles(); + $this->assertArrayNotHasKey('default-custom', $memberRoles); + + // Verify adding a non-existing role on a member that didn't had that role + // previously, doesn't add the role. + $member->addRole('default-non-existing-role'); + $memberRoles = $member->getRoles(); + $this->assertArrayNotHasKey('default-non-existing-role', $memberRoles); + + // Verify adding an existing role on a member that has that role already, + // doesn't set the role twice. + $member->addRole('default-member'); + $memberRoles = $member->getRoles(); + $this->assertArrayHasKey('default-member', $memberRoles); + + // Verify adding an existing role on a member that didn't had that role + // previously, adds the role. + $member->addRole('default-custom'); + $memberRoles = $member->getRoles(); + $this->assertArrayHasKey('default-custom', $memberRoles); + } + + /** + * Tests the removing of a role on a member of a group. + * + * @covers ::removeRole + */ + public function tesRemoveRole() { + $account = $this->createUser(); + $this->group->addMember($account); + $member = $this->group->getMember($account); + $memberRoles = $member->getRoles(); + $this->assertArrayNotHasKey('default-custom', $memberRoles); + + // First add a role we can remove afterwards. + $member->addRole('default-custom'); + $memberRoles = $member->getRoles(); + $this->assertArrayHasKey('default-custom', $memberRoles); + + // Now remove that role again. + $member->removeRole('default-custom'); + $memberRoles = $member->getRoles(); + $this->assertArrayNotHasKey('default-custom', $memberRoles); + } + +}