From 4ef8222294be5ebdb3a4ed72e1c0e6e99a4a1cb6 Mon Sep 17 00:00:00 2001 From: fogelito Date: Thu, 12 Feb 2026 12:18:03 +0200 Subject: [PATCH 1/9] Check strings --- tests/e2e/Client.php | 8 ++++++++ 1 file changed, 8 insertions(+) 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), From 536f09e5b8710c60260880d64c7c58955869ad56 Mon Sep 17 00:00:00 2001 From: fogelito Date: Thu, 12 Feb 2026 13:10:53 +0200 Subject: [PATCH 2/9] fix rules --- tests/e2e/Services/Proxy/ProxyCustomServerTest.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) 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'); From c7965e931f2b5a04cbecda8142802b4958dfbc97 Mon Sep 17 00:00:00 2001 From: fogelito Date: Thu, 12 Feb 2026 13:13:05 +0200 Subject: [PATCH 3/9] fix testConsoleAvailabilityEndpoint --- tests/e2e/Services/Sites/SitesCustomServerTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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() ] ]); From fc034762465baedfecd36c0087e267dac5f03dc4 Mon Sep 17 00:00:00 2001 From: fogelito Date: Thu, 12 Feb 2026 13:50:22 +0200 Subject: [PATCH 4/9] fix to String --- tests/e2e/Services/Databases/Legacy/DatabasesBase.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/e2e/Services/Databases/Legacy/DatabasesBase.php b/tests/e2e/Services/Databases/Legacy/DatabasesBase.php index 9f59bf5922..72e2bd1598 100644 --- a/tests/e2e/Services/Databases/Legacy/DatabasesBase.php +++ b/tests/e2e/Services/Databases/Legacy/DatabasesBase.php @@ -2438,7 +2438,7 @@ trait DatabasesBase 'x-appwrite-project' => $this->getProject()['$id'], ], $this->getHeaders()), [ 'queries' => [ - Query::equal('$sequence', [$sequence]) + Query::equal('$sequence', [$sequence])->toString() ], ]); From 2ec259d4339954e60aaad953c6d72e946a739794 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Ba=C4=8Do?= Date: Thu, 12 Feb 2026 12:50:39 +0100 Subject: [PATCH 5/9] Introduce _APP_WORKER_SCREENSHOTS_ROUTER --- .env | 3 ++- docker-compose.yml | 1 + .../Platform/Modules/Functions/Workers/Screenshots.php | 5 +++-- 3 files changed, 6 insertions(+), 3 deletions(-) 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' ], ]; From db6a3342c0b1e5d35a0b5b542964c5719b3ad5f5 Mon Sep 17 00:00:00 2001 From: fogelito Date: Thu, 12 Feb 2026 15:52:39 +0200 Subject: [PATCH 6/9] fix tests --- .../Databases/Legacy/DatabasesBase.php | 22 +++++++++++--- .../Databases/TablesDB/DatabasesBase.php | 30 +++++++++++++++++++ 2 files changed, 48 insertions(+), 4 deletions(-) diff --git a/tests/e2e/Services/Databases/Legacy/DatabasesBase.php b/tests/e2e/Services/Databases/Legacy/DatabasesBase.php index 72e2bd1598..c6944089c0 100644 --- a/tests/e2e/Services/Databases/Legacy/DatabasesBase.php +++ b/tests/e2e/Services/Databases/Legacy/DatabasesBase.php @@ -2430,9 +2430,10 @@ 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'], @@ -2442,10 +2443,23 @@ trait DatabasesBase ], ]); + $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..442458f535 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, '/databases/' . $databaseId . '/tables/' . $row['$collectionId'] . '/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, '/databases/' . $row . '/tables/' . $row['$collectionId'] . '/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])); } /** From 2cb98a87c81ffc167afb4226ef3b6cf7b973e052 Mon Sep 17 00:00:00 2001 From: fogelito Date: Thu, 12 Feb 2026 15:58:39 +0200 Subject: [PATCH 7/9] tablesdb --- tests/e2e/Services/Databases/TablesDB/DatabasesBase.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/e2e/Services/Databases/TablesDB/DatabasesBase.php b/tests/e2e/Services/Databases/TablesDB/DatabasesBase.php index 442458f535..efa252c1b1 100644 --- a/tests/e2e/Services/Databases/TablesDB/DatabasesBase.php +++ b/tests/e2e/Services/Databases/TablesDB/DatabasesBase.php @@ -2362,7 +2362,7 @@ trait DatabasesBase $sequence = $response['body']['$sequence']; // Query by sequence on get single row route - $response = $this->client->call(Client::METHOD_GET, '/databases/' . $databaseId . '/tables/' . $row['$collectionId'] . '/rows/' . $row['$id'], array_merge([ + $response = $this->client->call(Client::METHOD_GET, '/tablesdb/' . $databaseId . '/tables/' . $row['$collectionId'] . '/rows/' . $row['$id'], array_merge([ 'content-type' => 'application/json', 'x-appwrite-project' => $this->getProject()['$id'], ], $this->getHeaders()), [ @@ -2375,7 +2375,7 @@ trait DatabasesBase $this->assertEquals('Invalid query method: equal', $response['body']['message']); // Query by sequence - $response = $this->client->call(Client::METHOD_GET, '/databases/' . $row . '/tables/' . $row['$collectionId'] . '/rows', array_merge([ + $response = $this->client->call(Client::METHOD_GET, '/tablesdb/' . $row . '/tables/' . $row['$collectionId'] . '/rows', array_merge([ 'content-type' => 'application/json', 'x-appwrite-project' => $this->getProject()['$id'], ], $this->getHeaders()), [ From 5756b58d4d9fb7912c3050a40e460ed086dc507c Mon Sep 17 00:00:00 2001 From: fogelito Date: Thu, 12 Feb 2026 15:59:34 +0200 Subject: [PATCH 8/9] $tableId --- tests/e2e/Services/Databases/TablesDB/DatabasesBase.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/e2e/Services/Databases/TablesDB/DatabasesBase.php b/tests/e2e/Services/Databases/TablesDB/DatabasesBase.php index efa252c1b1..6971bb2cc9 100644 --- a/tests/e2e/Services/Databases/TablesDB/DatabasesBase.php +++ b/tests/e2e/Services/Databases/TablesDB/DatabasesBase.php @@ -2362,7 +2362,7 @@ trait DatabasesBase $sequence = $response['body']['$sequence']; // Query by sequence on get single row route - $response = $this->client->call(Client::METHOD_GET, '/tablesdb/' . $databaseId . '/tables/' . $row['$collectionId'] . '/rows/' . $row['$id'], array_merge([ + $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()), [ @@ -2375,7 +2375,7 @@ trait DatabasesBase $this->assertEquals('Invalid query method: equal', $response['body']['message']); // Query by sequence - $response = $this->client->call(Client::METHOD_GET, '/tablesdb/' . $row . '/tables/' . $row['$collectionId'] . '/rows', array_merge([ + $response = $this->client->call(Client::METHOD_GET, '/tablesdb/' . $row . '/tables/' . $row['$tableId'] . '/rows', array_merge([ 'content-type' => 'application/json', 'x-appwrite-project' => $this->getProject()['$id'], ], $this->getHeaders()), [ From b2aa2cc24726479ef033852180aded04e406a59e Mon Sep 17 00:00:00 2001 From: fogelito Date: Thu, 12 Feb 2026 16:36:37 +0200 Subject: [PATCH 9/9] typo --- tests/e2e/Services/Databases/TablesDB/DatabasesBase.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/e2e/Services/Databases/TablesDB/DatabasesBase.php b/tests/e2e/Services/Databases/TablesDB/DatabasesBase.php index 6971bb2cc9..50f5cd4232 100644 --- a/tests/e2e/Services/Databases/TablesDB/DatabasesBase.php +++ b/tests/e2e/Services/Databases/TablesDB/DatabasesBase.php @@ -2375,7 +2375,7 @@ trait DatabasesBase $this->assertEquals('Invalid query method: equal', $response['body']['message']); // Query by sequence - $response = $this->client->call(Client::METHOD_GET, '/tablesdb/' . $row . '/tables/' . $row['$tableId'] . '/rows', array_merge([ + $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()), [