From dde2de44955ee8c7d7092d968de7a58784c6a517 Mon Sep 17 00:00:00 2001 From: Kyle Yee Date: Mon, 28 Jan 2019 11:24:45 +0800 Subject: [PATCH] Feature: add accounts end point, add get domains --- src/Endpoints/Accounts.php | 61 ++++++++++++++++++++++ tests/Endpoints/AccountsTest.php | 37 +++++++++++++ tests/Fixtures/Endpoints/listAccounts.json | 20 +++++++ 3 files changed, 118 insertions(+) create mode 100644 src/Endpoints/Accounts.php create mode 100644 tests/Endpoints/AccountsTest.php create mode 100644 tests/Fixtures/Endpoints/listAccounts.json diff --git a/src/Endpoints/Accounts.php b/src/Endpoints/Accounts.php new file mode 100644 index 0000000..4ded300 --- /dev/null +++ b/src/Endpoints/Accounts.php @@ -0,0 +1,61 @@ +adapter = $adapter; + } + + public function listAccounts( + int $page = 1, + int $perPage = 20, + string $direction = '' + ): \stdClass { + $query = [ + 'page' => $page, + 'per_page' => $perPage + ]; + + if (!empty($direction)) { + $query['direction'] = $direction; + } + + $user = $this->adapter->get('accounts', $query); + $this->body = json_decode($user->getBody()); + + return (object)['result' => $this->body->result, 'result_info' => $this->body->result_info]; + } + + public function getDomains(string $accountID): \stdClass + { + $response = $this->adapter->get('accounts/' . $accountID . '/registrar/domains'); + + $this->body = $response->getBody(); + + return json_decode($this->body)->result; + } + + public function getDomainDetails(string $accountID, string $domainName): \stdClass + { + $response = $this->adapter->get('accounts/' . $accountID . '/registrar/domains' . $domainName); + + $this->body = $response->getBody(); + + return json_decode($this->body)->result; + } +} diff --git a/tests/Endpoints/AccountsTest.php b/tests/Endpoints/AccountsTest.php new file mode 100644 index 0000000..db2b1be --- /dev/null +++ b/tests/Endpoints/AccountsTest.php @@ -0,0 +1,37 @@ +getPsr7JsonResponseForFixture('Endpoints/listAccounts.json'); + + $mock = $this->getMockBuilder(\Cloudflare\API\Adapter\Adapter::class)->getMock(); + $mock->method('get')->willReturn($response); + + $mock->expects($this->once()) + ->method('get') + ->with( + $this->equalTo('accounts'), + $this->equalTo([ + 'page' => 1, + 'per_page' => 20, + 'direction' => 'desc', + ]) + ); + + $accounts = new \Cloudflare\API\Endpoints\Accounts($mock); + $result = $accounts->listAccounts(1, 20, 'desc'); + + $this->assertObjectHasAttribute('result', $result); + $this->assertObjectHasAttribute('result_info', $result); + + $this->assertEquals('023e105f4ecef8ad9ca31a8372d0c353', $result->result[0]->id); + $this->assertEquals(1, $result->result_info->page); + $this->assertEquals('023e105f4ecef8ad9ca31a8372d0c353', $accounts->getBody()->result[0]->id); + } +} diff --git a/tests/Fixtures/Endpoints/listAccounts.json b/tests/Fixtures/Endpoints/listAccounts.json new file mode 100644 index 0000000..0e6275a --- /dev/null +++ b/tests/Fixtures/Endpoints/listAccounts.json @@ -0,0 +1,20 @@ +{ + "success": true, + "errors": [], + "messages": [], + "result": [ + { + "id": "023e105f4ecef8ad9ca31a8372d0c353", + "name": "Example Account", + "settings": { + "enforce_twofactor": true + } + } + ], + "result_info": { + "page": 1, + "per_page": 20, + "count": 1, + "total_count": 2000 + } +}