From 5841d5ee57a0d703a5bf7260c9aefbbf0f3fe203 Mon Sep 17 00:00:00 2001 From: Khushboo Verma <43381712+vermakhushboo@users.noreply.github.com> Date: Thu, 3 Apr 2025 12:35:05 +0530 Subject: [PATCH] Add tests for error pages --- .../Services/Sites/SitesCustomServerTest.php | 70 +++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/tests/e2e/Services/Sites/SitesCustomServerTest.php b/tests/e2e/Services/Sites/SitesCustomServerTest.php index 35bc9bb410..c5b93f4fb4 100644 --- a/tests/e2e/Services/Sites/SitesCustomServerTest.php +++ b/tests/e2e/Services/Sites/SitesCustomServerTest.php @@ -2503,4 +2503,74 @@ class SitesCustomServerTest extends Scope $this->cleanupSite($siteId); } + + public function testErrorPages(): void + { + // non-existent domain page + $domain = 'non-existent-page.sites.localhost'; + $proxyClient = new Client(); + $proxyClient->setEndpoint('http://' . $domain); + + $response = $proxyClient->call(Client::METHOD_GET, '/'); + + $this->assertEquals(404, $response['headers']['status-code']); + $this->assertStringContainsString("This page is empty, but you can make it yours.", $response['body']); + + $siteId = $this->setupSite([ + 'siteId' => ID::unique(), + 'name' => 'Astro SSR site', + 'framework' => 'astro', + 'buildRuntime' => 'node-22', + 'outputDirectory' => './dist', + 'buildCommand' => 'cd random', + 'installCommand' => 'npm install', + ]); + $this->assertNotEmpty($siteId); + + $domain = $this->setupSiteDomain($siteId); + + $deployment = $this->createDeployment($siteId, [ + 'code' => $this->packageSite('astro'), + 'activate' => 'true' + ]); + + $deploymentId = $deployment['body']['$id'] ?? ''; + $this->assertNotEmpty($deploymentId); + + $delpoymentDomain = $this->getDeploymentDomain($deploymentId); + $this->assertNotEmpty($delpoymentDomain); + + $proxyClient = new Client(); + $proxyClient->setEndpoint('http://' . $delpoymentDomain); + $response = $proxyClient->call(Client::METHOD_GET, '/', followRedirects: false); + $this->assertEquals(301, $response['headers']['status-code']); + + $jwtObj = new JWT(System::getEnv('_APP_OPENSSL_KEY_V1'), 'HS256', 900, 0); + $apiKey = $jwtObj->encode([ + 'projectCheckDisabled' => true, + 'previewAuthDisabled' => true, + ]); + + // deployment is still building error page + $response = $proxyClient->call(Client::METHOD_GET, '/', followRedirects: false, headers: [ + 'x-appwrite-key' => API_KEY_DYNAMIC . '_' . $apiKey, + ]); + $this->assertEquals(400, $response['headers']['status-code']); + $this->assertStringContainsString("Deployment is still building", $response['body']); + + $this->assertEventually(function () use ($siteId, $deploymentId) { + $deployment = $this->getDeployment($siteId, $deploymentId); + + $this->assertEquals('failed', $deployment['body']['status']); + }, 50000, 500); + + // deployment failed error page + $response = $proxyClient->call(Client::METHOD_GET, '/', followRedirects: false, headers: [ + 'x-appwrite-key' => API_KEY_DYNAMIC . '_' . $apiKey, + ]); + $this->assertEquals(400, $response['headers']['status-code']); + $this->assertStringContainsString("Deployment build failed", $response['body']); + + $this->cleanupSite($siteId); + } }