diff --git a/lib/Resource/DirectoryUser.php b/lib/Resource/DirectoryUser.php index 78be8ec..cc74e77 100644 --- a/lib/Resource/DirectoryUser.php +++ b/lib/Resource/DirectoryUser.php @@ -2,8 +2,13 @@ namespace WorkOS\Resource; +use WorkOS\Resource\RoleResponse; + /** * Class DirectoryUser. + * + * @property RoleResponse|null $role + * @property array|null $roles */ class DirectoryUser extends BaseWorkOSResource { @@ -36,6 +41,8 @@ class DirectoryUser extends BaseWorkOSResource "jobTitle", "state", "idpId", + "role", + "roles", "groups", "directoryId", "organizationId" @@ -53,11 +60,32 @@ class DirectoryUser extends BaseWorkOSResource "job_title" => "jobTitle", "state" => "state", "idp_id" => "idpId", + "role" => "role", + "roles" => "roles", "groups" => "groups", "directory_id" => "directoryId", "organization_id" => "organizationId" ]; + public static function constructFromResponse($response) + { + $instance = parent::constructFromResponse($response); + + if (isset($response["role"])) { + $instance->values["role"] = new RoleResponse($response["role"]["slug"]); + } + + if (isset($response["roles"])) { + $roles = []; + foreach ($response["roles"] as $role) { + $roles[] = new RoleResponse($role["slug"]); + } + $instance->values["roles"] = $roles; + } + + return $instance; + } + /** * @deprecated 4.22.0 Use `email` property instead. * diff --git a/lib/Resource/OrganizationMembership.php b/lib/Resource/OrganizationMembership.php index ce4ffe4..ba98ae7 100644 --- a/lib/Resource/OrganizationMembership.php +++ b/lib/Resource/OrganizationMembership.php @@ -2,6 +2,8 @@ namespace WorkOS\Resource; +use WorkOS\Resource\RoleResponse; + /** * Class OrganizationMembership. * @@ -42,4 +44,23 @@ class OrganizationMembership extends BaseWorkOSResource "created_at" => "createdAt", "updated_at" => "updatedAt" ]; + + public static function constructFromResponse($response) + { + $instance = parent::constructFromResponse($response); + + if (isset($response["role"])) { + $instance->values["role"] = new RoleResponse($response["role"]["slug"]); + } + + if (isset($response["roles"])) { + $roles = []; + foreach ($response["roles"] as $role) { + $roles[] = new RoleResponse($role["slug"]); + } + $instance->values["roles"] = $roles; + } + + return $instance; + } } diff --git a/lib/Resource/Profile.php b/lib/Resource/Profile.php index 9c18d2c..2d455a9 100644 --- a/lib/Resource/Profile.php +++ b/lib/Resource/Profile.php @@ -16,6 +16,7 @@ * @property string $connectionType * @property string $idpId * @property RoleResponse|null $role + * @property array|null $roles * @property array $groups * @property array $rawAttributes */ @@ -33,6 +34,7 @@ class Profile extends BaseWorkOSResource "connectionType", "idpId", "role", + "roles", "groups", "customAttributes", "rawAttributes" @@ -48,6 +50,7 @@ class Profile extends BaseWorkOSResource "connection_type" => "connectionType", "idp_id" => "idpId", "role" => "role", + "roles" => "roles", "groups" => "groups", "custom_attributes" => "customAttributes", "raw_attributes" => "rawAttributes" @@ -61,6 +64,14 @@ public static function constructFromResponse($response) $instance->values["role"] = new RoleResponse($response["role"]["slug"]); } + if (isset($response["roles"])) { + $roles = []; + foreach ($response["roles"] as $role) { + $roles[] = new RoleResponse($role["slug"]); + } + $instance->values["roles"] = $roles; + } + return $instance; } } diff --git a/tests/WorkOS/DirectorySyncTest.php b/tests/WorkOS/DirectorySyncTest.php index a1fe0c3..7dfe236 100644 --- a/tests/WorkOS/DirectorySyncTest.php +++ b/tests/WorkOS/DirectorySyncTest.php @@ -3,6 +3,7 @@ namespace WorkOS; use PHPUnit\Framework\TestCase; +use WorkOS\Resource\RoleResponse; class DirectorySyncTest extends TestCase { @@ -143,7 +144,7 @@ public function testGetUser() $user = $this->ds->getUser($directoryUser); $userFixture = $this->userFixture(); - $this->assertSame($userFixture, $user->toArray()); + $this->assertEquals($userFixture, $user->toArray()); } public function testGetUserPrimaryEmail() @@ -214,7 +215,7 @@ public function testListUsers() $user = $this->userFixture(); list($before, $after, $users) = $this->ds->listUsers(); - $this->assertSame($user, $users[0]->toArray()); + $this->assertEquals($user, $users[0]->toArray()); } public function testDeleteDirectory() @@ -397,6 +398,14 @@ private function usersResponseFixture() "custom_attributes" => [ "fullName" => "Yoon Seri" ], + "role" => [ + "slug" => "admin" + ], + "roles" => [ + [ + "slug" => "admin" + ] + ], "id" => "directory_usr_id" ] ] @@ -453,6 +462,14 @@ private function userResponseFixture() "custom_attributes" => [ "fullName" => "Yoon Seri" ], + "role" => [ + "slug" => "admin" + ], + "roles" => [ + [ + "slug" => "admin" + ] + ], "id" => "directory_usr_id" ]); } @@ -501,6 +518,14 @@ private function userResponseFixtureNoEmail() "custom_attributes" => [ "fullName" => "Yoon Seri" ], + "role" => [ + "slug" => "admin" + ], + "roles" => [ + [ + "slug" => "admin" + ] + ], "id" => "directory_usr_id" ]); } @@ -553,6 +578,10 @@ private function userFixture() "jobTitle" => "Software Engineer", "state" => "active", "idpId" => null, + "role" => new RoleResponse("admin"), + "roles" => [ + new RoleResponse("admin"), + ], "groups" => null, "directoryId" => "dir_123", "organizationId" => "org_123", diff --git a/tests/WorkOS/SSOTest.php b/tests/WorkOS/SSOTest.php index 9bbaa5a..1d16824 100644 --- a/tests/WorkOS/SSOTest.php +++ b/tests/WorkOS/SSOTest.php @@ -224,7 +224,14 @@ private function profileAndTokenResponseFixture() "connection_id" => "conn_01EMH8WAK20T42N2NBMNBCYHAG", "connection_type" => "GoogleOAuth", "idp_id" => "randomalphanum", - "role" => new RoleResponse("admin"), + "role" => [ + "slug" => "admin" + ], + "roles" => [ + [ + "slug" => "admin" + ] + ], "groups" => array("Admins", "Developers"), "custom_attributes" => array("license" => "professional"), "raw_attributes" => array( @@ -251,6 +258,9 @@ private function profileFixture() "connectionType" => "GoogleOAuth", "idpId" => "randomalphanum", "role" => new RoleResponse("admin"), + "roles" => [ + new RoleResponse("admin"), + ], "groups" => array("Admins", "Developers"), "customAttributes" => array("license" => "professional"), "rawAttributes" => array( diff --git a/tests/WorkOS/UserManagementTest.php b/tests/WorkOS/UserManagementTest.php index e05b11d..158a2a0 100644 --- a/tests/WorkOS/UserManagementTest.php +++ b/tests/WorkOS/UserManagementTest.php @@ -4,6 +4,7 @@ use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\TestCase; +use WorkOS\Resource\RoleResponse; class UserManagementTest extends TestCase { @@ -914,7 +915,7 @@ public function testCreateOrganizationMembership() $response = $this->userManagement->createOrganizationMembership($userId, $orgId, $roleSlug); - $this->assertSame($organizationMembership, $response->toArray()); + $this->assertEquals($organizationMembership, $response->toArray()); } public function testCreateOrganizationMembershipWithRoleSlugs() @@ -945,7 +946,7 @@ public function testCreateOrganizationMembershipWithRoleSlugs() $response = $this->userManagement->createOrganizationMembership($userId, $orgId, null, $roleSlugs); - $this->assertSame($organizationMembership, $response->toArray()); + $this->assertEquals($organizationMembership, $response->toArray()); } public function testGetOrganizationMembership() @@ -968,7 +969,7 @@ public function testGetOrganizationMembership() $response = $this->userManagement->getOrganizationMembership($organizationMembershipId); - $this->assertSame($organizationMembership, $response->toArray()); + $this->assertEquals($organizationMembership, $response->toArray()); } public function testListOrganizationMemberships() @@ -1002,7 +1003,7 @@ public function testListOrganizationMemberships() list($before, $after, $organizationMemberships) = $this->userManagement->listOrganizationMemberships($userId, $orgId); - $this->assertSame($organizationMembership, $organizationMemberships[0]->toArray()); + $this->assertEquals($organizationMembership, $organizationMemberships[0]->toArray()); } public function testListOrganizationMembershipsWithStatuses() @@ -1037,7 +1038,7 @@ public function testListOrganizationMembershipsWithStatuses() list($before, $after, $organizationMemberships) = $this->userManagement->listOrganizationMemberships($userId, $orgId, $statuses); - $this->assertSame($organizationMembership, $organizationMemberships[0]->toArray()); + $this->assertEquals($organizationMembership, $organizationMemberships[0]->toArray()); } public function testListOrganizationMembershipsWithStatus() @@ -1072,7 +1073,7 @@ public function testListOrganizationMembershipsWithStatus() list($before, $after, $organizationMemberships) = $this->userManagement->listOrganizationMemberships($userId, $orgId, $statuses); - $this->assertSame($organizationMembership, $organizationMemberships[0]->toArray()); + $this->assertEquals($organizationMembership, $organizationMemberships[0]->toArray()); } public function testDeleteOrganizationMembership() @@ -1113,7 +1114,7 @@ public function testUpdateOrganizationMembership() ); $response = $this->userManagement->updateOrganizationMembership($organizationMembershipId, $roleSlug); - $this->assertSame($this->organizationMembershipFixture(), $response->toArray()); + $this->assertEquals($this->organizationMembershipFixture(), $response->toArray()); } public function testUpdateOrganizationMembershipWithRoleSlugs() @@ -1134,7 +1135,7 @@ public function testUpdateOrganizationMembershipWithRoleSlugs() ); $response = $this->userManagement->updateOrganizationMembership($organizationMembershipId, null, $roleSlugs); - $this->assertSame($this->organizationMembershipFixture(), $response->toArray()); + $this->assertEquals($this->organizationMembershipFixture(), $response->toArray()); } @@ -1158,7 +1159,7 @@ public function testDeactivateOrganizationMembership() $response = $this->userManagement->deactivateOrganizationMembership($organizationMembershipId); - $this->assertSame(array_merge($organizationMembership, array("status" => "inactive")), $response->toArray()); + $this->assertEquals(array_merge($organizationMembership, array("status" => "inactive")), $response->toArray()); } public function testReactivateOrganizationMembership() @@ -1181,7 +1182,7 @@ public function testReactivateOrganizationMembership() $response = $this->userManagement->reactivateOrganizationMembership($organizationMembershipId); - $this->assertSame($organizationMembership, $response->toArray()); + $this->assertEquals($organizationMembership, $response->toArray()); } public function testSendInvitation() @@ -1610,13 +1611,9 @@ private function organizationMembershipFixture() "id" => "om_01E4ZCR3C56J083X43JQXF3JK5", "userId" => "user_01H7X1M4TZJN5N4HG4XXMA1234", "organizationId" => "org_01EHQMYV6MBK39QC5PZXHY59C3", - "role" => [ - "slug" => "admin", - ], + "role" => new RoleResponse("admin"), "roles" => [ - [ - "slug" => "admin", - ], + new RoleResponse("admin"), ], "status" => "active", "createdAt" => "2021-06-25T19:07:33.155Z",