From a6fe1325ca4e45f35cc32ddcac53eaa5c02f5c64 Mon Sep 17 00:00:00 2001 From: Vincent Bergeron Date: Thu, 24 Sep 2026 14:15:17 -0400 Subject: [PATCH] Add support for dns providers --- README.md | 10 ++++-- src/Endpoints/DnsProvider.php | 22 +++++++++++++ src/Endpoints/Site.php | 7 ++-- src/Resources/DnsProvider.php | 7 ++++ src/Resources/Site.php | 3 +- src/SpinupWp.php | 2 ++ tests/Endpoints/DnsProviderTest.php | 51 +++++++++++++++++++++++++++++ tests/Endpoints/SiteTest.php | 20 +++++++++-- 8 files changed, 114 insertions(+), 8 deletions(-) create mode 100644 src/Endpoints/DnsProvider.php create mode 100644 src/Resources/DnsProvider.php create mode 100644 tests/Endpoints/DnsProviderTest.php diff --git a/README.md b/README.md index 5e06734..619fa9a 100644 --- a/README.md +++ b/README.md @@ -87,7 +87,7 @@ $site = $spinupwp->sites->get($siteId); $site = $spinupwp->sites->create($serverId, []); // Delete a site -$eventId = $spinupwp->sites->delete($siteId); +$eventId = $spinupwp->sites->delete($siteId, $deleteDatabase, $deleteBackups, $deleteDnsRecords); // Run a git deployment $eventId = $spinupwp->sites->gitDeploy($siteId); @@ -155,7 +155,7 @@ $eventId = $spinupwp->sites->deleteDomain($siteId, $domainId); On a `Site` instance you may also call: ```php // Delete the current site -$site->delete(); +$site->delete($deleteDatabase, $deleteBackups, $deleteDnsRecords); // Run a git deployment $site->gitDeploy(); @@ -221,6 +221,12 @@ $event = $spinupwp->events->get($eventId); $key = $spinupwp->sshKeys->get(); ``` +### DNS Providers +```php +// Return a collection of the DNS providers configured on your team +$dnsProviders = $spinupwp->dnsProviders->list(); +``` + ### Resource Collections When retrieving a list of resources, an instance of `ResourceCollection` is returned. This class handles fetching large lists of resources without having to paginate results and perform subsequent requests manually. ```php diff --git a/src/Endpoints/DnsProvider.php b/src/Endpoints/DnsProvider.php new file mode 100644 index 0000000..399a2b6 --- /dev/null +++ b/src/Endpoints/DnsProvider.php @@ -0,0 +1,22 @@ +getRequest('dns-providers', array_merge([ + 'page' => $page, + ], $parameters)); + + return $this->transformCollection( + $dnsProviders['data'], + DnsProviderResource::class, + $this->getPaginator($dnsProviders['pagination'], $parameters), + ); + } +} diff --git a/src/Endpoints/Site.php b/src/Endpoints/Site.php index ed71888..ab67815 100644 --- a/src/Endpoints/Site.php +++ b/src/Endpoints/Site.php @@ -55,11 +55,12 @@ public function create(int $serverId, array $data, bool $wait = false): SiteReso return new SiteResource($site, $this->spinupwp); } - public function delete(int $id, bool $deleteDatabase = false, bool $deleteBackups = false): int + public function delete(int $id, bool $deleteDatabase = false, bool $deleteBackups = false, bool $deleteDnsRecords = false): int { $request = $this->deleteRequest("sites/{$id}", [ - 'delete_database' => $deleteDatabase, - 'delete_backups' => $deleteBackups, + 'delete_database' => $deleteDatabase, + 'delete_backups' => $deleteBackups, + 'delete_dns_records' => $deleteDnsRecords, ]); return $request['event_id']; diff --git a/src/Resources/DnsProvider.php b/src/Resources/DnsProvider.php new file mode 100644 index 0000000..2744d68 --- /dev/null +++ b/src/Resources/DnsProvider.php @@ -0,0 +1,7 @@ +spinupwp->sites->delete( $this->id, $deleteDatabase, $deleteBackups, + $deleteDnsRecords, ); } diff --git a/src/SpinupWp.php b/src/SpinupWp.php index 7ea7484..a0c81fd 100644 --- a/src/SpinupWp.php +++ b/src/SpinupWp.php @@ -3,12 +3,14 @@ namespace SpinupWp; use GuzzleHttp\Client as HttpClient; +use SpinupWp\Endpoints\DnsProvider; use SpinupWp\Endpoints\Event; use SpinupWp\Endpoints\Server; use SpinupWp\Endpoints\Site; use SpinupWp\Endpoints\SshKey; /** + * @property DnsProvider $dnsProviders * @property Event $events * @property Server $servers * @property Site $sites diff --git a/tests/Endpoints/DnsProviderTest.php b/tests/Endpoints/DnsProviderTest.php new file mode 100644 index 0000000..167e2c3 --- /dev/null +++ b/tests/Endpoints/DnsProviderTest.php @@ -0,0 +1,51 @@ +client = Mockery::mock(Client::class); + $this->spinupwp = new SpinupWp('123', $this->client); + $this->endpoint = new DnsProvider($this->spinupwp); + } + + public function test_list_request(): void + { + $this->client->shouldReceive('request')->once()->with('GET', 'dns-providers?page=1', [])->andReturn( + new Response(200, [], '{"data": [{"id": 12, "service": "cloudflare", "name": "Cloudflare"}], "pagination": {"previous": null, "next": null, "count": 1}}') + ); + + $dnsProviders = $this->endpoint->list(); + $this->assertInstanceOf(ResourceCollection::class, $dnsProviders); + $this->assertCount(1, $dnsProviders); + $this->assertInstanceOf(DnsProviderResource::class, $dnsProviders->toArray()[0]); + $this->assertEquals('cloudflare', $dnsProviders->toArray()[0]->service); + } + + public function test_list_request_with_pagination_parameters(): void + { + $this->client->shouldReceive('request')->once()->with('GET', 'dns-providers?page=2&limit=100', [])->andReturn( + new Response(200, [], '{"data": [{"id": 12, "service": "cloudflare"}], "pagination": {"previous": null, "next": null, "count": 1}}') + ); + + $dnsProviders = $this->endpoint->list(2, ['limit' => 100]); + $this->assertCount(1, $dnsProviders); + } +} diff --git a/tests/Endpoints/SiteTest.php b/tests/Endpoints/SiteTest.php index 7498d3e..a5040bd 100644 --- a/tests/Endpoints/SiteTest.php +++ b/tests/Endpoints/SiteTest.php @@ -88,8 +88,9 @@ public function test_delete_request(): void { $this->client->shouldReceive('request')->once()->with('DELETE', 'sites/1', [ 'form_params' => [ - 'delete_database' => false, - 'delete_backups' => false, + 'delete_database' => false, + 'delete_backups' => false, + 'delete_dns_records' => false, ], ])->andReturn( new Response(200, [], '{"event_id": 100}') @@ -98,6 +99,21 @@ public function test_delete_request(): void $this->assertEquals(100, $this->siteEndpoint->delete(1)); } + public function test_delete_request_with_dns_records(): void + { + $this->client->shouldReceive('request')->once()->with('DELETE', 'sites/1', [ + 'form_params' => [ + 'delete_database' => false, + 'delete_backups' => false, + 'delete_dns_records' => true, + ], + ])->andReturn( + new Response(200, [], '{"event_id": 100}') + ); + + $this->assertEquals(100, $this->siteEndpoint->delete(1, false, false, true)); + } + public function test_git_deploy_request(): void { $this->client->shouldReceive('request')->once()->with('POST', 'sites/1/git/deploy', [])->andReturn(