From 4dbfbb83278e681ae9ce28ec379dc2ca99b27654 Mon Sep 17 00:00:00 2001 From: Phil Young <philip.young@ukfast.co.uk> Date: Tue, 12 Oct 2021 11:51:24 +0100 Subject: [PATCH] Add Account Role Listings I want to list the roles availablew in an account so I can add a member to the account --- src/Endpoints/AccountRoles.php | 33 +++++++++ tests/Endpoints/AccountRolesTest.php | 32 +++++++++ .../Fixtures/Endpoints/listAccountRoles.json | 69 +++++++++++++++++++ 3 files changed, 134 insertions(+) create mode 100644 src/Endpoints/AccountRoles.php create mode 100644 tests/Endpoints/AccountRolesTest.php create mode 100644 tests/Fixtures/Endpoints/listAccountRoles.json diff --git a/src/Endpoints/AccountRoles.php b/src/Endpoints/AccountRoles.php new file mode 100644 index 00000000..aca76153 --- /dev/null +++ b/src/Endpoints/AccountRoles.php @@ -0,0 +1,33 @@ +<?php + +namespace Cloudflare\API\Endpoints; + +use Cloudflare\API\Adapter\Adapter; +use Cloudflare\API\Traits\BodyAccessorTrait; +use stdClass; + +class AccountRoles implements API +{ + use BodyAccessorTrait; + + /** + * @var Adapter + */ + private $adapter; + + public function __construct(Adapter $adapter) + { + $this->adapter = $adapter; + } + + public function listAccountRoles(string $accountId): stdClass + { + $roles = $this->adapter->get('accounts/' . $accountId . '/roles'); + $this->body = json_decode($roles->getBody()); + + return (object)[ + 'result' => $this->body->result, + 'result_info' => $this->body->result_info, + ]; + } +} diff --git a/tests/Endpoints/AccountRolesTest.php b/tests/Endpoints/AccountRolesTest.php new file mode 100644 index 00000000..acb16be8 --- /dev/null +++ b/tests/Endpoints/AccountRolesTest.php @@ -0,0 +1,32 @@ +<?php + +namespace Endpoints; + +use Cloudflare\API\Adapter\Adapter; +use Cloudflare\API\Endpoints\AccountRoles; +use TestCase; + +class AccountRolesTest extends TestCase +{ + public function testListAccountRoles() + { + $response = $this->getPsr7JsonResponseForFixture('Endpoints/listAccountRoles.json'); + + $adapter = $this->getMockBuilder(Adapter::class)->getMock(); + $adapter->method('get')->willReturn($response); + + $adapter->expects($this->once()) + ->method('get') + ->with($this->equalTo('accounts/023e105f4ecef8ad9ca31a8372d0c353/roles')); + + $roles = new AccountRoles($adapter); + $result = $roles->listAccountRoles('023e105f4ecef8ad9ca31a8372d0c353'); + + $this->assertObjectHasAttribute('result', $result); + $this->assertObjectHasAttribute('result_info', $result); + + $this->assertEquals('3536bcfad5faccb999b47003c79917fb', $result->result[0]->id); + $this->assertEquals(1, $result->result_info->page); + $this->assertEquals('3536bcfad5faccb999b47003c79917fb', $roles->getBody()->result[0]->id); + } +} diff --git a/tests/Fixtures/Endpoints/listAccountRoles.json b/tests/Fixtures/Endpoints/listAccountRoles.json new file mode 100644 index 00000000..b4f7224c --- /dev/null +++ b/tests/Fixtures/Endpoints/listAccountRoles.json @@ -0,0 +1,69 @@ +{ + "success": true, + "errors": [], + "messages": [], + "result": [ + { + "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": 1, + "total_pages": 1, + "count": 1, + "total_count": 1 + } +}