diff --git a/.env b/.env index 726043414a..fee68d5a04 100644 --- a/.env +++ b/.env @@ -133,4 +133,5 @@ _APP_PROJECT_REGIONS=default _APP_FUNCTIONS_CREATION_ABUSE_LIMIT=5000 _APP_STATS_USAGE_DUAL_WRITING_DBS=database_db_main _APP_TRUSTED_HEADERS=x-forwarded-for -_APP_POOL_ADAPTER=stack \ No newline at end of file +_APP_POOL_ADAPTER=stack +_APP_WORKER_SCREENSHOTS_ROUTER=http://appwrite diff --git a/docker-compose.yml b/docker-compose.yml index 0a959cd137..5a6367f402 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -564,6 +564,7 @@ services: environment: # Specific - _APP_BROWSER_HOST + - _APP_WORKER_SCREENSHOTS_ROUTER # Basic - _APP_ENV - _APP_WORKER_PER_CORE diff --git a/src/Appwrite/Platform/Modules/Functions/Workers/Screenshots.php b/src/Appwrite/Platform/Modules/Functions/Workers/Screenshots.php index ff0fa812cf..f5f7a7974b 100644 --- a/src/Appwrite/Platform/Modules/Functions/Workers/Screenshots.php +++ b/src/Appwrite/Platform/Modules/Functions/Workers/Screenshots.php @@ -111,15 +111,16 @@ class Screenshots extends Action throw new \Exception('Bucket not found'); } + $routerHost = System::getEnv('_APP_WORKER_SCREENSHOTS_ROUTER', 'http://appwrite'); $configs = [ 'screenshotLight' => [ 'headers' => [ 'x-appwrite-hostname' => $rule->getAttribute('domain') ], - 'url' => 'http://appwrite/?appwrite-preview=1&appwrite-theme=light', + 'url' => $routerHost . '/?appwrite-preview=1&appwrite-theme=light', 'theme' => 'light' ], 'screenshotDark' => [ 'headers' => [ 'x-appwrite-hostname' => $rule->getAttribute('domain') ], - 'url' => 'http://appwrite/?appwrite-preview=1&appwrite-theme=dark', + 'url' => $routerHost . '/?appwrite-preview=1&appwrite-theme=dark', 'theme' => 'dark' ], ]; diff --git a/tests/e2e/Client.php b/tests/e2e/Client.php index 6b81713654..ccdfb84e00 100644 --- a/tests/e2e/Client.php +++ b/tests/e2e/Client.php @@ -185,6 +185,14 @@ class Client $responseHeaders = []; $cookies = []; + if (isset($params['queries'])) { + foreach ($params['queries'] as $value) { + if (!is_string($value)) { + throw new Exception('Queries must be converted to strings'); + } + } + } + $query = match ($headers['content-type']) { 'application/json' => json_encode($params), 'multipart/form-data' => $this->flatten($params), diff --git a/tests/e2e/Services/Databases/Legacy/DatabasesBase.php b/tests/e2e/Services/Databases/Legacy/DatabasesBase.php index 9f59bf5922..c6944089c0 100644 --- a/tests/e2e/Services/Databases/Legacy/DatabasesBase.php +++ b/tests/e2e/Services/Databases/Legacy/DatabasesBase.php @@ -2430,22 +2430,36 @@ trait DatabasesBase $this->assertEquals($document['title'], $response['body']['title']); $this->assertEquals($document['releaseYear'], $response['body']['releaseYear']); $this->assertArrayNotHasKey('birthDay', $response['body']); + $sequence = $response['body']['$sequence']; - // Query by sequence + // Query by sequence on get single document route $response = $this->client->call(Client::METHOD_GET, '/databases/' . $databaseId . '/collections/' . $document['$collectionId'] . '/documents/' . $document['$id'], array_merge([ 'content-type' => 'application/json', 'x-appwrite-project' => $this->getProject()['$id'], ], $this->getHeaders()), [ 'queries' => [ - Query::equal('$sequence', [$sequence]) + Query::equal('$sequence', [$sequence])->toString() + ], + ]); + + $this->assertEquals(400, $response['headers']['status-code']); + $this->assertEquals('Invalid query method: equal', $response['body']['message']); + + // Query by sequence + $response = $this->client->call(Client::METHOD_GET, '/databases/' . $databaseId . '/collections/' . $document['$collectionId'] . '/documents', array_merge([ + 'content-type' => 'application/json', + 'x-appwrite-project' => $this->getProject()['$id'], + ], $this->getHeaders()), [ + 'queries' => [ + Query::equal('$sequence', [$sequence.''])->toString() ], ]); $this->assertEquals(200, $response['headers']['status-code']); - $this->assertEquals($document['title'], $response['body']['title']); - $this->assertEquals($document['releaseYear'], $response['body']['releaseYear']); - $this->assertTrue(array_key_exists('$sequence', $response['body'])); + $this->assertEquals($document['title'], $response['body']['documents'][0]['title']); + $this->assertEquals($document['releaseYear'], $response['body']['documents'][0]['releaseYear']); + $this->assertTrue(array_key_exists('$sequence', $response['body']['documents'][0])); } /** diff --git a/tests/e2e/Services/Databases/TablesDB/DatabasesBase.php b/tests/e2e/Services/Databases/TablesDB/DatabasesBase.php index 7b2f903aa1..50f5cd4232 100644 --- a/tests/e2e/Services/Databases/TablesDB/DatabasesBase.php +++ b/tests/e2e/Services/Databases/TablesDB/DatabasesBase.php @@ -2358,6 +2358,36 @@ trait DatabasesBase $this->assertEquals($row['title'], $response['body']['title']); $this->assertEquals($row['releaseYear'], $response['body']['releaseYear']); $this->assertArrayNotHasKey('birthDay', $response['body']); + + $sequence = $response['body']['$sequence']; + + // Query by sequence on get single row route + $response = $this->client->call(Client::METHOD_GET, '/tablesdb/' . $databaseId . '/tables/' . $row['$tableId'] . '/rows/' . $row['$id'], array_merge([ + 'content-type' => 'application/json', + 'x-appwrite-project' => $this->getProject()['$id'], + ], $this->getHeaders()), [ + 'queries' => [ + Query::equal('$sequence', [$sequence])->toString() + ], + ]); + + $this->assertEquals(400, $response['headers']['status-code']); + $this->assertEquals('Invalid query method: equal', $response['body']['message']); + + // Query by sequence + $response = $this->client->call(Client::METHOD_GET, '/tablesdb/' . $databaseId . '/tables/' . $row['$tableId'] . '/rows', array_merge([ + 'content-type' => 'application/json', + 'x-appwrite-project' => $this->getProject()['$id'], + ], $this->getHeaders()), [ + 'queries' => [ + Query::equal('$sequence', [$sequence.''])->toString() + ], + ]); + + $this->assertEquals(200, $response['headers']['status-code']); + $this->assertEquals($row['title'], $response['body']['rows'][0]['title']); + $this->assertEquals($row['releaseYear'], $response['body']['rows'][0]['releaseYear']); + $this->assertTrue(array_key_exists('$sequence', $response['body']['rows'][0])); } /** diff --git a/tests/e2e/Services/Proxy/ProxyCustomServerTest.php b/tests/e2e/Services/Proxy/ProxyCustomServerTest.php index be0b89b404..5c62240891 100644 --- a/tests/e2e/Services/Proxy/ProxyCustomServerTest.php +++ b/tests/e2e/Services/Proxy/ProxyCustomServerTest.php @@ -546,7 +546,7 @@ class ProxyCustomServerTest extends Scope $rules = $this->listRules([ 'search' => $rule1Domain, - 'queries' => [ Query::orderDesc('$createdAt') ] + 'queries' => [ Query::orderDesc('$createdAt')->toString() ] ]); $this->assertEquals(200, $rules['headers']['status-code']); @@ -555,7 +555,7 @@ class ProxyCustomServerTest extends Scope $rules = $this->listRules([ 'search' => $rule2Domain, - 'queries' => [ Query::orderDesc('$createdAt') ] + 'queries' => [ Query::orderDesc('$createdAt')->toString() ] ]); $this->assertEquals(200, $rules['headers']['status-code']); $ruleIds = \array_column($rules['body']['rules'], '$id'); @@ -563,7 +563,7 @@ class ProxyCustomServerTest extends Scope $rules = $this->listRules([ 'search' => $rule1Id, - 'queries' => [ Query::orderDesc('$createdAt') ] + 'queries' => [ Query::orderDesc('$createdAt')->toString() ] ]); $this->assertEquals(200, $rules['headers']['status-code']); $ruleDomains = \array_column($rules['body']['rules'], 'domain'); @@ -571,7 +571,7 @@ class ProxyCustomServerTest extends Scope $rules = $this->listRules([ 'search' => $rule2Id, - 'queries' => [ Query::orderDesc('$createdAt') ] + 'queries' => [ Query::orderDesc('$createdAt')->toString() ] ]); $this->assertEquals(200, $rules['headers']['status-code']); $ruleDomains = \array_column($rules['body']['rules'], 'domain'); diff --git a/tests/e2e/Services/Sites/SitesCustomServerTest.php b/tests/e2e/Services/Sites/SitesCustomServerTest.php index ab0a6946d6..b099342dce 100644 --- a/tests/e2e/Services/Sites/SitesCustomServerTest.php +++ b/tests/e2e/Services/Sites/SitesCustomServerTest.php @@ -155,7 +155,7 @@ class SitesCustomServerTest extends Scope 'x-appwrite-project' => $this->getProject()['$id'], ], $this->getHeaders()), [ 'queries' => [ - Query::equal('deploymentResourceId', [$siteId]) + Query::equal('deploymentResourceId', [$siteId])->toString() ] ]);