From 8e236eec98b0776c1833aab427a178b36e331388 Mon Sep 17 00:00:00 2001 From: Vincent Bergeron Date: Wed, 15 Jul 2026 13:09:12 -0400 Subject: [PATCH] Add functions to disable and enable sites Adds `disable()` and `enable()` to the site endpoint and resource, which POST to `sites/{id}/disable` and `sites/{id}/enable` and return the `event_id` of the resulting event. The new `disabled_at` site attribute needs no changes, as it is exposed through the resource's magic getter, and the 400 responses these endpoints return are already mapped to `BadRequestException`. --- README.md | 12 +++++++++++ src/Endpoints/Site.php | 14 ++++++++++++ src/Resources/Site.php | 10 +++++++++ tests/Endpoints/SiteTest.php | 41 ++++++++++++++++++++++++++++++++++++ 4 files changed, 77 insertions(+) diff --git a/README.md b/README.md index ca91065..5e06734 100644 --- a/README.md +++ b/README.md @@ -101,6 +101,12 @@ $eventId = $spinupwp->sites->purgeObjectCache($siteId); // Reset a site's file permissions $eventId = $spinupwp->sites->correctFilePermissions($siteId); +// Disable a site so it no longer serves traffic +$eventId = $spinupwp->sites->disable($siteId); + +// Enable a previously disabled site +$eventId = $spinupwp->sites->enable($siteId); + // Enable HTTPS $eventId = $spinupwp->sites->enableHttps($siteId, ['type' => 'webroot']); @@ -163,6 +169,12 @@ $site->purgeObjectCache(); // Reset a site's file permissions $site->correctFilePermissions(); +// Disable a site so it no longer serves traffic +$site->disable(); + +// Enable a previously disabled site +$site->enable(); + // Enable HTTPS $site->enableHttps(['type' => 'webroot']); diff --git a/src/Endpoints/Site.php b/src/Endpoints/Site.php index 781bcaf..ed71888 100644 --- a/src/Endpoints/Site.php +++ b/src/Endpoints/Site.php @@ -93,6 +93,20 @@ public function correctFilePermissions(int $id): int return $request['event_id']; } + public function disable(int $id): int + { + $request = $this->postRequest("sites/{$id}/disable"); + + return $request['event_id']; + } + + public function enable(int $id): int + { + $request = $this->postRequest("sites/{$id}/enable"); + + return $request['event_id']; + } + public function enableHttps(int $id, array $data): int { $request = $this->postRequest("sites/{$id}/https", $data); diff --git a/src/Resources/Site.php b/src/Resources/Site.php index a608479..6dd1e6e 100644 --- a/src/Resources/Site.php +++ b/src/Resources/Site.php @@ -33,6 +33,16 @@ public function correctFilePermissions(): int return $this->spinupwp->sites->correctFilePermissions($this->id); } + public function disable(): int + { + return $this->spinupwp->sites->disable($this->id); + } + + public function enable(): int + { + return $this->spinupwp->sites->enable($this->id); + } + public function enableHttps(array $data): int { return $this->spinupwp->sites->enableHttps($this->id, $data); diff --git a/tests/Endpoints/SiteTest.php b/tests/Endpoints/SiteTest.php index 14319ac..7498d3e 100644 --- a/tests/Endpoints/SiteTest.php +++ b/tests/Endpoints/SiteTest.php @@ -4,6 +4,7 @@ use GuzzleHttp\Psr7\Response; use PHPUnit\Framework\TestCase; use SpinupWp\Endpoints\Site; +use SpinupWp\Exceptions\BadRequestException; use SpinupWp\Exceptions\NotFoundException; use SpinupWp\Exceptions\RateLimitException; use SpinupWp\Exceptions\UnauthorizedException; @@ -133,6 +134,46 @@ public function test_correct_file_permissions(): void $this->assertEquals(100, $this->siteEndpoint->correctFilePermissions(1)); } + public function test_disable_request(): void + { + $this->client->shouldReceive('request')->once()->with('POST', 'sites/1/disable', [])->andReturn( + new Response(200, [], '{"event_id": 100}') + ); + + $this->assertEquals(100, $this->siteEndpoint->disable(1)); + } + + public function test_enable_request(): void + { + $this->client->shouldReceive('request')->once()->with('POST', 'sites/1/enable', [])->andReturn( + new Response(200, [], '{"event_id": 100}') + ); + + $this->assertEquals(100, $this->siteEndpoint->enable(1)); + } + + public function test_disable_request_when_already_disabled(): void + { + $this->expectException(BadRequestException::class); + + $this->client->shouldReceive('request')->once()->with('POST', 'sites/1/disable', [])->andReturn( + new Response(400, [], '{"message": "Site is already disabled."}') + ); + + $this->siteEndpoint->disable(1); + } + + public function test_enable_request_when_not_disabled(): void + { + $this->expectException(BadRequestException::class); + + $this->client->shouldReceive('request')->once()->with('POST', 'sites/1/enable', [])->andReturn( + new Response(400, [], '{"message": "Site is not disabled."}') + ); + + $this->siteEndpoint->enable(1); + } + public function test_handling_validation_errors(): void { $this->client->shouldReceive('request')->once()->with('POST', 'sites', [