diff --git a/src/Endpoints/AccountMembers.php b/src/Endpoints/AccountMembers.php index c9f1c3c..ec9e90a 100644 --- a/src/Endpoints/AccountMembers.php +++ b/src/Endpoints/AccountMembers.php @@ -31,4 +31,20 @@ class AccountMembers implements API return $this->body->result; } + + public function listAccountMembers(string $accountId, int $page = 1, int $perPage = 20): \stdClass + { + $query = [ + 'page' => $page, + 'per_page' => $perPage, + ]; + + $zone = $this->adapter->get('accounts/' . $accountId . '/members', $query); + $this->body = json_decode($zone->getBody()); + + return (object)[ + 'result' => $this->body->result, + 'result_info' => $this->body->result_info, + ]; + } } diff --git a/tests/Endpoints/AccountMembersTest.php b/tests/Endpoints/AccountMembersTest.php index c43c96a..431e263 100644 --- a/tests/Endpoints/AccountMembersTest.php +++ b/tests/Endpoints/AccountMembersTest.php @@ -29,4 +29,31 @@ class AccountMembersTest extends TestCase $this->assertEquals('4536bcfad5faccb111b47003c79917fa', $accountMembers->getBody()->result->id); } + + public function testListAccountMembers() + { + $response = $this->getPsr7JsonResponseForFixture('Endpoints/listAccountMembers.json'); + + $mock = $this->getMockBuilder(Adapter::class)->getMock(); + $mock->method('get')->willReturn($response); + + $mock->expects($this->once()) + ->method('get') + ->with( + $this->equalTo('accounts/023e105f4ecef8ad9ca31a8372d0c353/members'), + $this->equalTo([ + 'page' => 1, + 'per_page' => 20, + ]) + ); + + $accountMembers = new AccountMembers($mock); + $result = $accountMembers->listAccountMembers('023e105f4ecef8ad9ca31a8372d0c353', 1, 20); + + $this->assertObjectHasAttribute('result', $result); + + $this->assertEquals('4536bcfad5faccb111b47003c79917fa', $result->result[0]->id); + $this->assertEquals(1, $result->result_info->count); + $this->assertEquals('4536bcfad5faccb111b47003c79917fa', $accountMembers->getBody()->result[0]->id); + } } diff --git a/tests/Fixtures/Endpoints/listAccountMembers.json b/tests/Fixtures/Endpoints/listAccountMembers.json new file mode 100644 index 0000000..5096fa0 --- /dev/null +++ b/tests/Fixtures/Endpoints/listAccountMembers.json @@ -0,0 +1,82 @@ +{ + "success": true, + "errors": [], + "messages": [], + "result": [ + { + "id": "4536bcfad5faccb111b47003c79917fa", + "code": "05dd05cce12bbed97c0d87cd78e89bc2fd41a6cee72f27f6fc84af2e45c0fac0", + "user": { + "id": "7c5dae5552338874e5053f2534d2767a", + "first_name": "John", + "last_name": "Appleseed", + "email": "user@example.com", + "two_factor_authentication_enabled": false + }, + "status": "accepted", + "roles": [ + { + "id": "3536bcfad5faccb999b47003c79917fb", + "name": "Account Administrator", + "description": "Administrative access to the entire Account", + "permissions": { + "analytics": { + "read": true, + "write": true + }, + "billing": { + "read": true, + "write": true + }, + "cache_purge": { + "read": true, + "write": true + }, + "dns": { + "read": true, + "write": true + }, + "dns_records": { + "read": true, + "write": true + }, + "lb": { + "read": true, + "write": true + }, + "logs": { + "read": true, + "write": true + }, + "organization": { + "read": true, + "write": true + }, + "ssl": { + "read": true, + "write": true + }, + "waf": { + "read": true, + "write": true + }, + "zones": { + "read": true, + "write": true + }, + "zone_settings": { + "read": true, + "write": true + } + } + } + ] + } + ], + "result_info": { + "page": 1, + "per_page": 20, + "count": 1, + "total_count": 200 + } +}