fix: tests as per new events system.

This commit is contained in:
Darshan
2025-04-27 10:36:21 +05:30
parent 949f58522d
commit f94ecc885a
10 changed files with 322 additions and 322 deletions
+3 -3
View File
@@ -42,7 +42,7 @@ trait RealtimeBase
/**
* Test for SUCCESS
*/
$client = $this->getWebsocket(["documents"]);
$client = $this->getWebsocket(["rows"]);
$this->assertNotEmpty($client->receive());
$client->close();
}
@@ -58,7 +58,7 @@ trait RealtimeBase
$this->assertEquals(1008, $payload["data"]["code"]);
$this->assertEquals("Missing channels", $payload["data"]["message"]);
\usleep(250000); // 250ms
$this->expectException(ConnectionException::class); // Check if server disconnnected client
$this->expectException(ConnectionException::class); // Check if server disconnected client
$client->close();
}
@@ -83,7 +83,7 @@ trait RealtimeBase
$payload["data"]["message"]
);
\usleep(250000); // 250ms
$this->expectException(ConnectionException::class); // Check if server disconnnected client
$this->expectException(ConnectionException::class); // Check if server disconnected client
$client->close();
}
}
@@ -201,12 +201,12 @@ class RealtimeConsoleClientTest extends Scope
$this->assertCount(2, $response['data']['channels']);
$this->assertContains('console', $response['data']['channels']);
$this->assertContains("projects.{$projectId}", $response['data']['channels']);
$this->assertContains("databases.{$databaseId}.collections.{$actorsId}.attributes.*.create", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.{$actorsId}.attributes.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.{$actorsId}", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.*.attributes.*.create", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.*.attributes.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.{$actorsId}.columns.*.create", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.{$actorsId}.columns.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.{$actorsId}", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.*.columns.*.create", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.*.columns.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}", $response['data']['events']);
$this->assertContains("databases.*", $response['data']['events']);
$this->assertNotEmpty($response['data']['payload']);
@@ -222,12 +222,12 @@ class RealtimeConsoleClientTest extends Scope
$this->assertCount(2, $response['data']['channels']);
$this->assertContains('console', $response['data']['channels']);
$this->assertContains("projects.{$projectId}", $response['data']['channels']);
$this->assertContains("databases.{$databaseId}.collections.{$actorsId}.attributes.*.update", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.{$actorsId}.attributes.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.{$actorsId}", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.*.attributes.*.update", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.*.attributes.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.{$actorsId}.columns.*.update", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.{$actorsId}.columns.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.{$actorsId}", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.*.columns.*.update", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.*.columns.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}", $response['data']['events']);
$this->assertContains("databases.*", $response['data']['events']);
$this->assertNotEmpty($response['data']['payload']);
@@ -292,12 +292,12 @@ class RealtimeConsoleClientTest extends Scope
$this->assertCount(2, $response['data']['channels']);
$this->assertContains('console', $response['data']['channels']);
$this->assertContains("projects.{$projectId}", $response['data']['channels']);
$this->assertContains("databases.{$databaseId}.collections.{$actorsId}.indexes.*.create", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.{$actorsId}.indexes.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.{$actorsId}", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.*.indexes.*.create", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.*.indexes.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.{$actorsId}.indexes.*.create", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.{$actorsId}.indexes.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.{$actorsId}", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.*.indexes.*.create", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.*.indexes.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.*", $response['data']['events']);
$this->assertNotEmpty($response['data']['payload']);
$this->assertEquals('processing', $response['data']['payload']['status']);
@@ -311,12 +311,12 @@ class RealtimeConsoleClientTest extends Scope
$this->assertCount(2, $response['data']['channels']);
$this->assertContains('console', $response['data']['channels']);
$this->assertContains("projects.{$projectId}", $response['data']['channels']);
$this->assertContains("databases.{$databaseId}.collections.{$actorsId}.indexes.*.update", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.{$actorsId}.indexes.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.{$actorsId}", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.*.indexes.*.update", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.*.indexes.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.{$actorsId}.indexes.*.update", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.{$actorsId}.indexes.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.{$actorsId}", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.*.indexes.*.update", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.*.indexes.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.*", $response['data']['events']);
$this->assertNotEmpty($response['data']['payload']);
$this->assertEquals('available', $response['data']['payload']['status']);
@@ -372,12 +372,12 @@ class RealtimeConsoleClientTest extends Scope
$this->assertCount(2, $response['data']['channels']);
$this->assertContains('console', $response['data']['channels']);
$this->assertContains("projects.{$projectId}", $response['data']['channels']);
$this->assertContains("databases.{$databaseId}.collections.{$actorsId}.indexes.*.update", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.{$actorsId}.indexes.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.{$actorsId}", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.*.indexes.*.update", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.*.indexes.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.{$actorsId}.indexes.*.update", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.{$actorsId}.indexes.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.{$actorsId}", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.*.indexes.*.update", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.*.indexes.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.*", $response['data']['events']);
$this->assertNotEmpty($response['data']['payload']);
/** Delete index generates two events. One from the API and one from the database worker */
@@ -390,12 +390,12 @@ class RealtimeConsoleClientTest extends Scope
$this->assertCount(2, $response['data']['channels']);
$this->assertContains('console', $response['data']['channels']);
$this->assertContains("projects.{$projectId}", $response['data']['channels']);
$this->assertContains("databases.{$databaseId}.collections.{$actorsId}.indexes.*.delete", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.{$actorsId}.indexes.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.{$actorsId}", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.*.indexes.*.delete", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.*.indexes.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.{$actorsId}.indexes.*.delete", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.{$actorsId}.indexes.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.{$actorsId}", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.*.indexes.*.delete", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.*.indexes.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.*", $response['data']['events']);
$this->assertNotEmpty($response['data']['payload']);
$client->close();
@@ -449,12 +449,12 @@ class RealtimeConsoleClientTest extends Scope
$this->assertCount(2, $response['data']['channels']);
$this->assertContains('console', $response['data']['channels']);
$this->assertContains("projects.{$projectId}", $response['data']['channels']);
$this->assertContains("databases.{$databaseId}.collections.{$actorsId}.attributes.*.update", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.{$actorsId}.attributes.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.{$actorsId}", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.*.attributes.*.update", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.*.attributes.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.{$actorsId}.columns.*.update", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.{$actorsId}.columns.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.{$actorsId}", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.*.columns.*.update", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.*.columns.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.*", $response['data']['events']);
$this->assertNotEmpty($response['data']['payload']);
$response = json_decode($client->receive(), true);
@@ -467,12 +467,12 @@ class RealtimeConsoleClientTest extends Scope
$this->assertCount(2, $response['data']['channels']);
$this->assertContains('console', $response['data']['channels']);
$this->assertContains("projects.{$projectId}", $response['data']['channels']);
$this->assertContains("databases.{$databaseId}.collections.{$actorsId}.attributes.*.delete", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.{$actorsId}.attributes.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.{$actorsId}", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.*.attributes.*.delete", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.*.attributes.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.{$actorsId}.columns.*.delete", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.{$actorsId}.columns.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.{$actorsId}", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.*.columns.*.delete", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.*.columns.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.*", $response['data']['events']);
$this->assertNotEmpty($response['data']['payload']);
$client->close();
@@ -607,7 +607,7 @@ class RealtimeConsoleClientTest extends Scope
$this->assertContains("projects.{$projectId}", $response['data']['channels']);
$this->assertArrayHasKey('buildLogs', $response['data']['payload']);
// Ignore comparasion for first payload
// Ignore comparison for first payload
if ($previousBuildLogs !== null) {
$this->assertNotEquals($previousBuildLogs, $response['data']['payload']['buildLogs']);
}
@@ -31,7 +31,7 @@ class RealtimeCustomClientTest extends Scope
'cookie' => 'a_session_' . $this->getProject()['$id'] . '=' . $session
];
$client = $this->getWebsocket(['documents'], $headers);
$client = $this->getWebsocket(['rows'], $headers);
$response = json_decode($client->receive(), true);
$this->assertArrayHasKey('type', $response);
@@ -40,7 +40,7 @@ class RealtimeCustomClientTest extends Scope
$this->assertNotEmpty($response['data']);
$this->assertNotEmpty($response['data']['user']);
$this->assertCount(1, $response['data']['channels']);
$this->assertContains('documents', $response['data']['channels']);
$this->assertContains('rows', $response['data']['channels']);
$this->assertEquals($userId, $response['data']['user']['$id']);
$client->close();
@@ -60,7 +60,7 @@ class RealtimeCustomClientTest extends Scope
$client->close();
$client = $this->getWebsocket(['account', 'documents', 'account.123'], $headers);
$client = $this->getWebsocket(['account', 'rows', 'account.123'], $headers);
$response = json_decode($client->receive(), true);
$this->assertArrayHasKey('type', $response);
@@ -69,7 +69,7 @@ class RealtimeCustomClientTest extends Scope
$this->assertNotEmpty($response['data']);
$this->assertNotEmpty($response['data']['user']);
$this->assertCount(3, $response['data']['channels']);
$this->assertContains('documents', $response['data']['channels']);
$this->assertContains('rows', $response['data']['channels']);
$this->assertContains('account', $response['data']['channels']);
$this->assertContains('account.' . $userId, $response['data']['channels']);
$this->assertEquals($userId, $response['data']['user']['$id']);
@@ -80,12 +80,12 @@ class RealtimeCustomClientTest extends Scope
'account',
'files',
'files.1',
'collections',
'collections.1.documents',
'collections.2.documents',
'documents',
'collections.1.documents.1',
'collections.2.documents.2',
'tables',
'tables.1.rows',
'tables.2.rows',
'rows',
'tables.1.rows.1',
'tables.2.rows.2',
], $headers);
$response = json_decode($client->receive(), true);
@@ -100,12 +100,12 @@ class RealtimeCustomClientTest extends Scope
$this->assertContains('account.' . $userId, $response['data']['channels']);
$this->assertContains('files', $response['data']['channels']);
$this->assertContains('files.1', $response['data']['channels']);
$this->assertContains('collections', $response['data']['channels']);
$this->assertContains('collections.1.documents', $response['data']['channels']);
$this->assertContains('collections.2.documents', $response['data']['channels']);
$this->assertContains('documents', $response['data']['channels']);
$this->assertContains('collections.1.documents.1', $response['data']['channels']);
$this->assertContains('collections.2.documents.2', $response['data']['channels']);
$this->assertContains('tables', $response['data']['channels']);
$this->assertContains('tables.1.rows', $response['data']['channels']);
$this->assertContains('tables.2.rows', $response['data']['channels']);
$this->assertContains('rows', $response['data']['channels']);
$this->assertContains('tables.1.rows.1', $response['data']['channels']);
$this->assertContains('tables.2.rows.2', $response['data']['channels']);
$this->assertEquals($userId, $response['data']['user']['$id']);
$client->close();
@@ -245,7 +245,7 @@ class RealtimeCustomClientTest extends Scope
/**
* Test for FAILURE
*/
$client = $this->getWebsocket(['documents'], ['origin' => 'http://appwrite.unknown']);
$client = $this->getWebsocket(['rows'], ['origin' => 'http://appwrite.unknown']);
$payload = json_decode($client->receive(), true);
$this->assertArrayHasKey('type', $payload);
@@ -675,7 +675,7 @@ class RealtimeCustomClientTest extends Scope
$session = $user['session'] ?? '';
$projectId = $this->getProject()['$id'];
$client = $this->getWebsocket(['documents', 'collections'], [
$client = $this->getWebsocket(['rows', 'tables'], [
'origin' => 'http://localhost',
'cookie' => 'a_session_' . $projectId . '=' . $session
]);
@@ -687,8 +687,8 @@ class RealtimeCustomClientTest extends Scope
$this->assertEquals('connected', $response['type']);
$this->assertNotEmpty($response['data']);
$this->assertCount(2, $response['data']['channels']);
$this->assertContains('documents', $response['data']['channels']);
$this->assertContains('collections', $response['data']['channels']);
$this->assertContains('rows', $response['data']['channels']);
$this->assertContains('tables', $response['data']['channels']);
$this->assertNotEmpty($response['data']['user']);
$this->assertEquals($user['$id'], $response['data']['user']['$id']);
@@ -770,19 +770,19 @@ class RealtimeCustomClientTest extends Scope
$this->assertNotEmpty($response['data']);
$this->assertArrayHasKey('timestamp', $response['data']);
$this->assertCount(3, $response['data']['channels']);
$this->assertContains('documents', $response['data']['channels']);
$this->assertContains('databases.' . $databaseId . '.collections.' . $actorsId . '.documents.' . $documentId, $response['data']['channels']);
$this->assertContains('databases.' . $databaseId . '.collections.' . $actorsId . '.documents', $response['data']['channels']);
$this->assertContains("databases.{$databaseId}.collections.{$actorsId}.documents.{$documentId}.create", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.{$actorsId}.documents.{$documentId}", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.{$actorsId}.documents.*.create", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.{$actorsId}.documents.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.{$actorsId}", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.*.documents.{$documentId}.create", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.*.documents.{$documentId}", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.*.documents.*.create", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.*.documents.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.*", $response['data']['events']);
$this->assertContains('rows', $response['data']['channels']);
$this->assertContains('databases.' . $databaseId . '.tables.' . $actorsId . '.rows.' . $documentId, $response['data']['channels']);
$this->assertContains('databases.' . $databaseId . '.tables.' . $actorsId . '.rows', $response['data']['channels']);
$this->assertContains("databases.{$databaseId}.tables.{$actorsId}.rows.{$documentId}.create", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.{$actorsId}.rows.{$documentId}", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.{$actorsId}.rows.*.create", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.{$actorsId}.rows.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.{$actorsId}", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.*.rows.{$documentId}.create", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.*.rows.{$documentId}", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.*.rows.*.create", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.*.rows.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}", $response['data']['events']);
$this->assertContains("databases.*", $response['data']['events']);
$this->assertNotEmpty($response['data']['payload']);
@@ -814,19 +814,19 @@ class RealtimeCustomClientTest extends Scope
$this->assertNotEmpty($response['data']);
$this->assertArrayHasKey('timestamp', $response['data']);
$this->assertCount(3, $response['data']['channels']);
$this->assertContains('documents', $response['data']['channels']);
$this->assertContains("databases.{$databaseId}.collections.{$actorsId}.documents.{$documentId}", $response['data']['channels']);
$this->assertContains("databases.{$databaseId}.collections.{$actorsId}.documents", $response['data']['channels']);
$this->assertContains("databases.{$databaseId}.collections.{$actorsId}.documents.{$documentId}.update", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.{$actorsId}.documents.{$documentId}", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.{$actorsId}.documents.*.update", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.{$actorsId}.documents.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.{$actorsId}", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.*.documents.{$documentId}.update", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.*.documents.{$documentId}", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.*.documents.*.update", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.*.documents.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.*", $response['data']['events']);
$this->assertContains('rows', $response['data']['channels']);
$this->assertContains("databases.{$databaseId}.tables.{$actorsId}.rows.{$documentId}", $response['data']['channels']);
$this->assertContains("databases.{$databaseId}.tables.{$actorsId}.rows", $response['data']['channels']);
$this->assertContains("databases.{$databaseId}.tables.{$actorsId}.rows.{$documentId}.update", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.{$actorsId}.rows.{$documentId}", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.{$actorsId}.rows.*.update", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.{$actorsId}.rows.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.{$actorsId}", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.*.rows.{$documentId}.update", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.*.rows.{$documentId}", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.*.rows.*.update", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.*.rows.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}", $response['data']['events']);
$this->assertContains("databases.*", $response['data']['events']);
$this->assertNotEmpty($response['data']['payload']);
@@ -868,19 +868,19 @@ class RealtimeCustomClientTest extends Scope
$this->assertNotEmpty($response['data']);
$this->assertArrayHasKey('timestamp', $response['data']);
$this->assertCount(3, $response['data']['channels']);
$this->assertContains('documents', $response['data']['channels']);
$this->assertContains("databases.{$databaseId}.collections.{$actorsId}.documents.{$documentId}", $response['data']['channels']);
$this->assertContains("databases.{$databaseId}.collections.{$actorsId}.documents", $response['data']['channels']);
$this->assertContains("databases.{$databaseId}.collections.{$actorsId}.documents.{$documentId}.delete", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.{$actorsId}.documents.{$documentId}", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.{$actorsId}.documents.*.delete", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.{$actorsId}.documents.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.{$actorsId}", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.*.documents.{$documentId}.delete", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.*.documents.{$documentId}", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.*.documents.*.delete", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.*.documents.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.*", $response['data']['events']);
$this->assertContains('rows', $response['data']['channels']);
$this->assertContains("databases.{$databaseId}.tables.{$actorsId}.rows.{$documentId}", $response['data']['channels']);
$this->assertContains("databases.{$databaseId}.tables.{$actorsId}.rows", $response['data']['channels']);
$this->assertContains("databases.{$databaseId}.tables.{$actorsId}.rows.{$documentId}.delete", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.{$actorsId}.rows.{$documentId}", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.{$actorsId}.rows.*.delete", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.{$actorsId}.rows.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.{$actorsId}", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.*.rows.{$documentId}.delete", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.*.rows.{$documentId}", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.*.rows.*.delete", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.*.rows.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}", $response['data']['events']);
$this->assertContains("databases.*", $response['data']['events']);
$this->assertNotEmpty($response['data']['payload']);
@@ -895,7 +895,7 @@ class RealtimeCustomClientTest extends Scope
$session = $user['session'] ?? '';
$projectId = $this->getProject()['$id'];
$client = $this->getWebsocket(['documents', 'collections'], [
$client = $this->getWebsocket(['rows', 'tables'], [
'origin' => 'http://localhost',
'cookie' => 'a_session_' . $projectId . '=' . $session
]);
@@ -907,8 +907,8 @@ class RealtimeCustomClientTest extends Scope
$this->assertEquals('connected', $response['type']);
$this->assertNotEmpty($response['data']);
$this->assertCount(2, $response['data']['channels']);
$this->assertContains('documents', $response['data']['channels']);
$this->assertContains('collections', $response['data']['channels']);
$this->assertContains('rows', $response['data']['channels']);
$this->assertContains('tables', $response['data']['channels']);
$this->assertNotEmpty($response['data']['user']);
$this->assertEquals($user['$id'], $response['data']['user']['$id']);
@@ -988,19 +988,19 @@ class RealtimeCustomClientTest extends Scope
$this->assertNotEmpty($response['data']);
$this->assertArrayHasKey('timestamp', $response['data']);
$this->assertCount(3, $response['data']['channels']);
$this->assertContains('documents', $response['data']['channels']);
$this->assertContains("databases.{$databaseId}.collections.{$actorsId}.documents.{$documentId}", $response['data']['channels']);
$this->assertContains("databases.{$databaseId}.collections.{$actorsId}.documents", $response['data']['channels']);
$this->assertContains("databases.{$databaseId}.collections.{$actorsId}.documents.{$documentId}.create", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.{$actorsId}.documents.{$documentId}", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.{$actorsId}.documents.*.create", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.{$actorsId}.documents.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.{$actorsId}", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.*.documents.{$documentId}.create", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.*.documents.{$documentId}", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.*.documents.*.create", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.*.documents.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.*", $response['data']['events']);
$this->assertContains('rows', $response['data']['channels']);
$this->assertContains("databases.{$databaseId}.tables.{$actorsId}.rows.{$documentId}", $response['data']['channels']);
$this->assertContains("databases.{$databaseId}.tables.{$actorsId}.rows", $response['data']['channels']);
$this->assertContains("databases.{$databaseId}.tables.{$actorsId}.rows.{$documentId}.create", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.{$actorsId}.rows.{$documentId}", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.{$actorsId}.rows.*.create", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.{$actorsId}.rows.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.{$actorsId}", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.*.rows.{$documentId}.create", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.*.rows.{$documentId}", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.*.rows.*.create", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.*.rows.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}", $response['data']['events']);
$this->assertContains("databases.*", $response['data']['events']);
$this->assertNotEmpty($response['data']['payload']);
@@ -1027,19 +1027,19 @@ class RealtimeCustomClientTest extends Scope
$this->assertNotEmpty($response['data']);
$this->assertArrayHasKey('timestamp', $response['data']);
$this->assertCount(3, $response['data']['channels']);
$this->assertContains('documents', $response['data']['channels']);
$this->assertContains("databases.{$databaseId}.collections.{$actorsId}.documents.{$documentId}", $response['data']['channels']);
$this->assertContains("databases.{$databaseId}.collections.{$actorsId}.documents", $response['data']['channels']);
$this->assertContains("databases.{$databaseId}.collections.{$actorsId}.documents.{$documentId}.update", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.{$actorsId}.documents.{$documentId}", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.{$actorsId}.documents.*.update", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.{$actorsId}.documents.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.{$actorsId}", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.*.documents.{$documentId}.update", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.*.documents.{$documentId}", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.*.documents.*.update", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.*.documents.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.*", $response['data']['events']);
$this->assertContains('rows', $response['data']['channels']);
$this->assertContains("databases.{$databaseId}.tables.{$actorsId}.rows.{$documentId}", $response['data']['channels']);
$this->assertContains("databases.{$databaseId}.tables.{$actorsId}.rows", $response['data']['channels']);
$this->assertContains("databases.{$databaseId}.tables.{$actorsId}.rows.{$documentId}.update", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.{$actorsId}.rows.{$documentId}", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.{$actorsId}.rows.*.update", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.{$actorsId}.rows.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.{$actorsId}", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.*.rows.{$documentId}.update", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.*.rows.{$documentId}", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.*.rows.*.update", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.*.rows.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}", $response['data']['events']);
$this->assertContains("databases.*", $response['data']['events']);
$this->assertNotEmpty($response['data']['payload']);
@@ -1077,19 +1077,19 @@ class RealtimeCustomClientTest extends Scope
$this->assertNotEmpty($response['data']);
$this->assertArrayHasKey('timestamp', $response['data']);
$this->assertCount(3, $response['data']['channels']);
$this->assertContains('documents', $response['data']['channels']);
$this->assertContains("databases.{$databaseId}.collections.{$actorsId}.documents.{$documentId}", $response['data']['channels']);
$this->assertContains("databases.{$databaseId}.collections.{$actorsId}.documents", $response['data']['channels']);
$this->assertContains("databases.{$databaseId}.collections.{$actorsId}.documents.{$documentId}.delete", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.{$actorsId}.documents.{$documentId}", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.{$actorsId}.documents.*.delete", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.{$actorsId}.documents.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.{$actorsId}", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.*.documents.{$documentId}.delete", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.*.documents.{$documentId}", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.*.documents.*.delete", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.*.documents.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.collections.*", $response['data']['events']);
$this->assertContains('rows', $response['data']['channels']);
$this->assertContains("databases.{$databaseId}.tables.{$actorsId}.rows.{$documentId}", $response['data']['channels']);
$this->assertContains("databases.{$databaseId}.tables.{$actorsId}.rows", $response['data']['channels']);
$this->assertContains("databases.{$databaseId}.tables.{$actorsId}.rows.{$documentId}.delete", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.{$actorsId}.rows.{$documentId}", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.{$actorsId}.rows.*.delete", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.{$actorsId}.rows.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.{$actorsId}", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.*.rows.{$documentId}.delete", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.*.rows.{$documentId}", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.*.rows.*.delete", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.*.rows.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}.tables.*", $response['data']['events']);
$this->assertContains("databases.{$databaseId}", $response['data']['events']);
$this->assertContains("databases.*", $response['data']['events']);
$this->assertNotEmpty($response['data']['payload']);
+46 -46
View File
@@ -83,10 +83,10 @@ trait WebhooksBase
$this->assertEquals($webhook['method'], 'POST');
$this->assertEquals($webhook['headers']['Content-Type'], 'application/json');
$this->assertEquals($webhook['headers']['User-Agent'], 'Appwrite-Server vdev. Please report abuse at security@appwrite.io');
$this->assertStringContainsString('databases.' . $databaseId . '.collections.*', $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString('databases.' . $databaseId . '.collections.*.create', $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.collections.{$actorsId}", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.collections.{$actorsId}.create", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString('databases.' . $databaseId . '.tables.*', $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString('databases.' . $databaseId . '.tables.*.create', $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.tables.{$actorsId}", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.tables.{$actorsId}.create", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertEquals($webhook['headers']['X-Appwrite-Webhook-Signature'], $signatureExpected);
$this->assertEquals($webhook['headers']['X-Appwrite-Webhook-Id'] ?? '', $this->getProject()['webhookId']);
$this->assertEquals($webhook['headers']['X-Appwrite-Webhook-Project-Id'] ?? '', $this->getProject()['$id']);
@@ -155,12 +155,12 @@ trait WebhooksBase
$this->assertEquals($webhook['method'], 'POST');
$this->assertEquals($webhook['headers']['Content-Type'], 'application/json');
$this->assertEquals($webhook['headers']['User-Agent'], 'Appwrite-Server vdev. Please report abuse at security@appwrite.io');
$this->assertStringContainsString('databases.' . $databaseId . '.collections.*', $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString('databases.' . $databaseId . '.collections.*.attributes.*', $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString('databases.' . $databaseId . '.collections.*.attributes.*.create', $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.collections.{$actorsId}", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.collections.{$actorsId}.attributes.*", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.collections.{$actorsId}.attributes.*.create", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString('databases.' . $databaseId . '.tables.*', $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString('databases.' . $databaseId . '.tables.*.columns.*', $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString('databases.' . $databaseId . '.tables.*.columns.*.create', $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.tables.{$actorsId}", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.tables.{$actorsId}.columns.*", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.tables.{$actorsId}.columns.*.create", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertEquals($webhook['headers']['X-Appwrite-Webhook-Signature'], $signatureExpected);
$this->assertEquals($webhook['headers']['X-Appwrite-Webhook-Id'] ?? '', $this->getProject()['webhookId']);
$this->assertEquals($webhook['headers']['X-Appwrite-Webhook-Project-Id'] ?? '', $this->getProject()['$id']);
@@ -181,12 +181,12 @@ trait WebhooksBase
// $this->assertEquals($webhook['method'], 'DELETE');
$this->assertEquals($webhook['headers']['Content-Type'], 'application/json');
$this->assertEquals($webhook['headers']['User-Agent'], 'Appwrite-Server vdev. Please report abuse at security@appwrite.io');
$this->assertStringContainsString('databases.' . $databaseId . '.collections.*', $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString('databases.' . $databaseId . '.collections.*.attributes.*', $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString('databases.' . $databaseId . '.collections.*.attributes.*.update', $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.collections.{$actorsId}", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.collections.{$actorsId}.attributes.*", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.collections.{$actorsId}.attributes.*.update", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString('databases.' . $databaseId . '.tables.*', $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString('databases.' . $databaseId . '.tables.*.columns.*', $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString('databases.' . $databaseId . '.tables.*.columns.*.update', $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.tables.{$actorsId}", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.tables.{$actorsId}.columns.*", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.tables.{$actorsId}.columns.*.update", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertEquals($webhook['headers']['X-Appwrite-Webhook-Signature'], $signatureExpected);
$this->assertEquals($webhook['headers']['X-Appwrite-Webhook-Id'] ?? '', $this->getProject()['webhookId']);
$this->assertEquals($webhook['headers']['X-Appwrite-Webhook-Project-Id'] ?? '', $this->getProject()['$id']);
@@ -234,16 +234,16 @@ trait WebhooksBase
$this->assertEquals($webhook['method'], 'POST');
$this->assertEquals($webhook['headers']['Content-Type'], 'application/json');
$this->assertEquals($webhook['headers']['User-Agent'], 'Appwrite-Server vdev. Please report abuse at security@appwrite.io');
$this->assertStringContainsString('databases.' . $databaseId . '.collections.*', $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString('databases.' . $databaseId . '.collections.*.documents.*', $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString('databases.' . $databaseId . '.collections.*.documents.*.create', $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.collections.*.documents.{$documentId}", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.collections.*.documents.{$documentId}.create", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.collections.{$actorsId}", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.collections.{$actorsId}.documents.*", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.collections.{$actorsId}.documents.*.create", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.collections.{$actorsId}.documents.{$documentId}", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.collections.{$actorsId}.documents.{$documentId}.create", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString('databases.' . $databaseId . '.tables.*', $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString('databases.' . $databaseId . '.tables.*.rows.*', $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString('databases.' . $databaseId . '.tables.*.rows.*.create', $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.tables.*.rows.{$documentId}", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.tables.*.rows.{$documentId}.create", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.tables.{$actorsId}", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.tables.{$actorsId}.rows.*", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.tables.{$actorsId}.rows.*.create", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.tables.{$actorsId}.rows.{$documentId}", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.tables.{$actorsId}.rows.{$documentId}.create", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertEquals($webhook['headers']['X-Appwrite-Webhook-Signature'], $signatureExpected);
$this->assertEquals($webhook['headers']['X-Appwrite-Webhook-Id'] ?? '', $this->getProject()['webhookId']);
$this->assertEquals($webhook['headers']['X-Appwrite-Webhook-Project-Id'] ?? '', $this->getProject()['$id']);
@@ -296,16 +296,16 @@ trait WebhooksBase
$this->assertEquals($webhook['method'], 'POST');
$this->assertEquals($webhook['headers']['Content-Type'], 'application/json');
$this->assertEquals($webhook['headers']['User-Agent'], 'Appwrite-Server vdev. Please report abuse at security@appwrite.io');
$this->assertStringContainsString('databases.' . $databaseId . '.collections.*', $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString('databases.' . $databaseId . '.collections.*.documents.*', $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString('databases.' . $databaseId . '.collections.*.documents.*.update', $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.collections.*.documents.{$documentId}", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.collections.*.documents.{$documentId}.update", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.collections.{$actorsId}", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.collections.{$actorsId}.documents.*", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.collections.{$actorsId}.documents.*.update", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.collections.{$actorsId}.documents.{$documentId}", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.collections.{$actorsId}.documents.{$documentId}.update", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString('databases.' . $databaseId . '.tables.*', $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString('databases.' . $databaseId . '.tables.*.rows.*', $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString('databases.' . $databaseId . '.tables.*.rows.*.update', $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.tables.*.rows.{$documentId}", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.tables.*.rows.{$documentId}.update", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.tables.{$actorsId}", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.tables.{$actorsId}.rows.*", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.tables.{$actorsId}.rows.*.update", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.tables.{$actorsId}.rows.{$documentId}", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.tables.{$actorsId}.rows.{$documentId}.update", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertEquals($webhook['headers']['X-Appwrite-Webhook-Signature'], $signatureExpected);
$this->assertEquals($webhook['headers']['X-Appwrite-Webhook-Id'] ?? '', $this->getProject()['webhookId']);
$this->assertEquals($webhook['headers']['X-Appwrite-Webhook-Project-Id'] ?? '', $this->getProject()['$id']);
@@ -366,16 +366,16 @@ trait WebhooksBase
$this->assertEquals($webhook['method'], 'POST');
$this->assertEquals($webhook['headers']['Content-Type'], 'application/json');
$this->assertEquals($webhook['headers']['User-Agent'], 'Appwrite-Server vdev. Please report abuse at security@appwrite.io');
$this->assertStringContainsString('databases.' . $databaseId . '.collections.*', $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString('databases.' . $databaseId . '.collections.*.documents.*', $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString('databases.' . $databaseId . '.collections.*.documents.*.delete', $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.collections.*.documents.{$documentId}", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.collections.*.documents.{$documentId}.delete", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.collections.{$actorsId}", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.collections.{$actorsId}.documents.*", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.collections.{$actorsId}.documents.*.delete", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.collections.{$actorsId}.documents.{$documentId}", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.collections.{$actorsId}.documents.{$documentId}.delete", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString('databases.' . $databaseId . '.tables.*', $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString('databases.' . $databaseId . '.tables.*.rows.*', $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString('databases.' . $databaseId . '.tables.*.rows.*.delete', $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.tables.*.rows.{$documentId}", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.tables.*.rows.{$documentId}.delete", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.tables.{$actorsId}", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.tables.{$actorsId}.rows.*", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.tables.{$actorsId}.rows.*.delete", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.tables.{$actorsId}.rows.{$documentId}", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.tables.{$actorsId}.rows.{$documentId}.delete", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertEquals($webhook['headers']['X-Appwrite-Webhook-Signature'], $signatureExpected);
$this->assertEquals($webhook['headers']['X-Appwrite-Webhook-Id'] ?? '', $this->getProject()['webhookId']);
$this->assertEquals($webhook['headers']['X-Appwrite-Webhook-Project-Id'] ?? '', $this->getProject()['$id']);
@@ -48,10 +48,10 @@ class WebhooksCustomServerTest extends Scope
$this->assertEquals($webhook['method'], 'POST');
$this->assertEquals($webhook['headers']['Content-Type'], 'application/json');
$this->assertEquals($webhook['headers']['User-Agent'], 'Appwrite-Server vdev. Please report abuse at security@appwrite.io');
$this->assertStringContainsString('databases.' . $databaseId . '.collections.*', $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString('databases.' . $databaseId . '.collections.*.update', $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.collections.{$id}", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.collections.{$id}.update", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString('databases.' . $databaseId . '.tables.*', $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString('databases.' . $databaseId . '.tables.*.update', $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.tables.{$id}", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.tables.{$id}.update", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertEquals($webhook['headers']['X-Appwrite-Webhook-Signature'], $signatureExpected);
$this->assertEquals($webhook['headers']['X-Appwrite-Webhook-Id'] ?? '', $this->getProject()['webhookId']);
$this->assertEquals($webhook['headers']['X-Appwrite-Webhook-Project-Id'] ?? '', $this->getProject()['$id']);
@@ -96,12 +96,12 @@ class WebhooksCustomServerTest extends Scope
$this->assertEquals($webhook['method'], 'POST');
$this->assertEquals($webhook['headers']['Content-Type'], 'application/json');
$this->assertEquals($webhook['headers']['User-Agent'], 'Appwrite-Server vdev. Please report abuse at security@appwrite.io');
$this->assertStringContainsString('databases.' . $databaseId . '.collections.*', $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString('databases.' . $databaseId . '.collections.*.indexes.*', $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString('databases.' . $databaseId . '.collections.*.indexes.*.create', $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.collections.{$actorsId}", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.collections.{$actorsId}.indexes.*", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.collections.{$actorsId}.indexes.*.create", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString('databases.' . $databaseId . '.tables.*', $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString('databases.' . $databaseId . '.tables.*.indexes.*', $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString('databases.' . $databaseId . '.tables.*.indexes.*.create', $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.tables.{$actorsId}", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.tables.{$actorsId}.indexes.*", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.tables.{$actorsId}.indexes.*.create", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertEquals($webhook['headers']['X-Appwrite-Webhook-Signature'], $signatureExpected);
$this->assertEquals($webhook['headers']['X-Appwrite-Webhook-Id'] ?? '', $this->getProject()['webhookId']);
$this->assertEquals($webhook['headers']['X-Appwrite-Webhook-Project-Id'] ?? '', $this->getProject()['$id']);
@@ -121,12 +121,12 @@ class WebhooksCustomServerTest extends Scope
// $this->assertEquals($webhook['method'], 'DELETE');
$this->assertEquals($webhook['headers']['Content-Type'], 'application/json');
$this->assertEquals($webhook['headers']['User-Agent'], 'Appwrite-Server vdev. Please report abuse at security@appwrite.io');
$this->assertStringContainsString('databases.' . $databaseId . '.collections.*', $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString('databases.' . $databaseId . '.collections.*.indexes.*', $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString('databases.' . $databaseId . '.collections.*.indexes.*.update', $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.collections.{$actorsId}", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.collections.{$actorsId}.indexes.*", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.collections.{$actorsId}.indexes.*.update", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString('databases.' . $databaseId . '.tables.*', $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString('databases.' . $databaseId . '.tables.*.indexes.*', $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString('databases.' . $databaseId . '.tables.*.indexes.*.update', $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.tables.{$actorsId}", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.tables.{$actorsId}.indexes.*", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.tables.{$actorsId}.indexes.*.update", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertEquals($webhook['headers']['X-Appwrite-Webhook-Signature'], $signatureExpected);
$this->assertEquals($webhook['headers']['X-Appwrite-Webhook-Id'] ?? '', $this->getProject()['webhookId']);
$this->assertEquals($webhook['headers']['X-Appwrite-Webhook-Project-Id'] ?? '', $this->getProject()['$id']);
@@ -189,10 +189,10 @@ class WebhooksCustomServerTest extends Scope
$this->assertEquals($webhook['method'], 'POST');
$this->assertEquals($webhook['headers']['Content-Type'], 'application/json');
$this->assertEquals($webhook['headers']['User-Agent'], 'Appwrite-Server vdev. Please report abuse at security@appwrite.io');
$this->assertStringContainsString('databases.' . $databaseId . '.collections.*', $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString('databases.' . $databaseId . '.collections.*.delete', $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.collections.{$id}", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.collections.{$id}.delete", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString('databases.' . $databaseId . '.tables.*', $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString('databases.' . $databaseId . '.tables.*.delete', $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.tables.{$id}", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertStringContainsString("databases.{$databaseId}.tables.{$id}.delete", $webhook['headers']['X-Appwrite-Webhook-Events']);
$this->assertEquals($webhook['headers']['X-Appwrite-Webhook-Signature'], $signatureExpected);
$this->assertEquals($webhook['headers']['X-Appwrite-Webhook-Id'] ?? '', $this->getProject()['webhookId']);
$this->assertEquals($webhook['headers']['X-Appwrite-Webhook-Project-Id'] ?? '', $this->getProject()['$id']);
+39 -39
View File
@@ -93,57 +93,57 @@ class EventTest extends TestCase
$this->assertContains('users.*.update', $event);
$this->assertContains('users.*', $event);
$event = Event::generateEvents('collections.[collectionId].documents.[documentId].create', [
'collectionId' => 'chapters',
'documentId' => 'prolog',
$event = Event::generateEvents('tables.[tableId].rows.[rowId].create', [
'tableId' => 'chapters',
'rowId' => 'prolog',
]);
$this->assertCount(10, $event);
$this->assertContains('collections.chapters.documents.prolog.create', $event);
$this->assertContains('collections.chapters.documents.prolog', $event);
$this->assertContains('collections.chapters.documents.*.create', $event);
$this->assertContains('collections.chapters.documents.*', $event);
$this->assertContains('collections.chapters', $event);
$this->assertContains('collections.*.documents.prolog.create', $event);
$this->assertContains('collections.*.documents.prolog', $event);
$this->assertContains('collections.*.documents.*.create', $event);
$this->assertContains('collections.*.documents.*', $event);
$this->assertContains('collections.*', $event);
$this->assertContains('tables.chapters.rows.prolog.create', $event);
$this->assertContains('tables.chapters.rows.prolog', $event);
$this->assertContains('tables.chapters.rows.*.create', $event);
$this->assertContains('tables.chapters.rows.*', $event);
$this->assertContains('tables.chapters', $event);
$this->assertContains('tables.*.rows.prolog.create', $event);
$this->assertContains('tables.*.rows.prolog', $event);
$this->assertContains('tables.*.rows.*.create', $event);
$this->assertContains('tables.*.rows.*', $event);
$this->assertContains('tables.*', $event);
$event = Event::generateEvents('databases.[databaseId].collections.[collectionId].documents.[documentId].create', [
$event = Event::generateEvents('databases.[databaseId].tables.[tableId].rows.[rowId].create', [
'databaseId' => 'chaptersDB',
'collectionId' => 'chapters',
'documentId' => 'prolog',
'tableId' => 'chapters',
'rowId' => 'prolog',
]);
$this->assertCount(22, $event);
$this->assertContains('databases.chaptersDB.collections.chapters.documents.prolog.create', $event);
$this->assertContains('databases.chaptersDB.collections.chapters.documents.prolog', $event);
$this->assertContains('databases.chaptersDB.collections.chapters.documents.*.create', $event);
$this->assertContains('databases.chaptersDB.collections.chapters.documents.*', $event);
$this->assertContains('databases.chaptersDB.collections.chapters', $event);
$this->assertContains('databases.chaptersDB.collections.*.documents.prolog.create', $event);
$this->assertContains('databases.chaptersDB.collections.*.documents.prolog', $event);
$this->assertContains('databases.chaptersDB.collections.*', $event);
$this->assertContains('databases.chaptersDB.tables.chapters.rows.prolog.create', $event);
$this->assertContains('databases.chaptersDB.tables.chapters.rows.prolog', $event);
$this->assertContains('databases.chaptersDB.tables.chapters.rows.*.create', $event);
$this->assertContains('databases.chaptersDB.tables.chapters.rows.*', $event);
$this->assertContains('databases.chaptersDB.tables.chapters', $event);
$this->assertContains('databases.chaptersDB.tables.*.rows.prolog.create', $event);
$this->assertContains('databases.chaptersDB.tables.*.rows.prolog', $event);
$this->assertContains('databases.chaptersDB.tables.*', $event);
$this->assertContains('databases.chaptersDB', $event);
$this->assertContains('databases.*.collections.chapters.documents.prolog.create', $event);
$this->assertContains('databases.*.collections.chapters.documents.prolog', $event);
$this->assertContains('databases.*.collections.chapters', $event);
$this->assertContains('databases.*.collections.*.documents.*.create', $event);
$this->assertContains('databases.*.collections.*.documents.*', $event);
$this->assertContains('databases.*.collections.*', $event);
$this->assertContains('databases.*.tables.chapters.rows.prolog.create', $event);
$this->assertContains('databases.*.tables.chapters.rows.prolog', $event);
$this->assertContains('databases.*.tables.chapters', $event);
$this->assertContains('databases.*.tables.*.rows.*.create', $event);
$this->assertContains('databases.*.tables.*.rows.*', $event);
$this->assertContains('databases.*.tables.*', $event);
$this->assertContains('databases.*', $event);
$this->assertContains('databases.*.collections.*.documents.prolog', $event);
$this->assertContains('databases.*.collections.*.documents.prolog.create', $event);
$this->assertContains('databases.*.collections.chapters.documents.*', $event);
$this->assertContains('databases.*.collections.chapters.documents.*.create', $event);
$this->assertContains('databases.chaptersDB.collections.*.documents.*', $event);
$this->assertContains('databases.chaptersDB.collections.*.documents.*.create', $event);
$this->assertContains('databases.*.tables.*.rows.prolog', $event);
$this->assertContains('databases.*.tables.*.rows.prolog.create', $event);
$this->assertContains('databases.*.tables.chapters.rows.*', $event);
$this->assertContains('databases.*.tables.chapters.rows.*.create', $event);
$this->assertContains('databases.chaptersDB.tables.*.rows.*', $event);
$this->assertContains('databases.chaptersDB.tables.*.rows.*.create', $event);
try {
$event = Event::generateEvents('collections.[collectionId].documents.[documentId].create', [
'collectionId' => 'chapters'
$event = Event::generateEvents('tables.[tableId].rows.[rowId].create', [
'tableId' => 'chapters'
]);
$this->fail();
} catch (\Throwable $th) {
@@ -151,7 +151,7 @@ class EventTest extends TestCase
}
try {
$event = Event::generateEvents('collections.[collectionId].documents.[documentId].create');
$event = Event::generateEvents('tables.[tableId].rows.[rowId].create');
$this->fail();
} catch (\Throwable $th) {
$this->assertInstanceOf(InvalidArgumentException::class, $th, 'An invalid exception was thrown');
+1 -1
View File
@@ -7,7 +7,7 @@ use Utopia\Queue\Queue;
class MockPublisher implements Publisher
{
private $events = [];
private array $events = [];
public function enqueue(Queue $queue, array $payload): bool
{
@@ -29,27 +29,27 @@ class EventValidatorTest extends TestCase
$this->assertTrue($this->object->isValid('users.*.update.email'));
$this->assertTrue($this->object->isValid('users.*.update'));
$this->assertTrue($this->object->isValid('users.*'));
$this->assertTrue($this->object->isValid('databases.books.collections.chapters.documents.prolog.create'));
$this->assertTrue($this->object->isValid('databases.books.collections.chapters.documents.prolog'));
$this->assertTrue($this->object->isValid('databases.books.collections.chapters.documents.*.create'));
$this->assertTrue($this->object->isValid('databases.books.collections.chapters.documents.*'));
$this->assertTrue($this->object->isValid('databases.books.collections.*.documents.prolog.create'));
$this->assertTrue($this->object->isValid('databases.books.collections.*.documents.prolog'));
$this->assertTrue($this->object->isValid('databases.books.collections.*.documents.*.create'));
$this->assertTrue($this->object->isValid('databases.books.collections.*.documents.*'));
$this->assertTrue($this->object->isValid('databases.*.collections.chapters.documents.prolog.create'));
$this->assertTrue($this->object->isValid('databases.*.collections.chapters.documents.prolog'));
$this->assertTrue($this->object->isValid('databases.*.collections.chapters.documents.*.create'));
$this->assertTrue($this->object->isValid('databases.*.collections.chapters.documents.*'));
$this->assertTrue($this->object->isValid('databases.*.collections.*.documents.prolog.create'));
$this->assertTrue($this->object->isValid('databases.*.collections.*.documents.prolog'));
$this->assertTrue($this->object->isValid('databases.*.collections.*.documents.*.create'));
$this->assertTrue($this->object->isValid('databases.*.collections.*.documents.*'));
$this->assertTrue($this->object->isValid('databases.*.collections.*'));
$this->assertTrue($this->object->isValid('databases.books.tables.chapters.rows.prolog.create'));
$this->assertTrue($this->object->isValid('databases.books.tables.chapters.rows.prolog'));
$this->assertTrue($this->object->isValid('databases.books.tables.chapters.rows.*.create'));
$this->assertTrue($this->object->isValid('databases.books.tables.chapters.rows.*'));
$this->assertTrue($this->object->isValid('databases.books.tables.*.rows.prolog.create'));
$this->assertTrue($this->object->isValid('databases.books.tables.*.rows.prolog'));
$this->assertTrue($this->object->isValid('databases.books.tables.*.rows.*.create'));
$this->assertTrue($this->object->isValid('databases.books.tables.*.rows.*'));
$this->assertTrue($this->object->isValid('databases.*.tables.chapters.rows.prolog.create'));
$this->assertTrue($this->object->isValid('databases.*.tables.chapters.rows.prolog'));
$this->assertTrue($this->object->isValid('databases.*.tables.chapters.rows.*.create'));
$this->assertTrue($this->object->isValid('databases.*.tables.chapters.rows.*'));
$this->assertTrue($this->object->isValid('databases.*.tables.*.rows.prolog.create'));
$this->assertTrue($this->object->isValid('databases.*.tables.*.rows.prolog'));
$this->assertTrue($this->object->isValid('databases.*.tables.*.rows.*.create'));
$this->assertTrue($this->object->isValid('databases.*.tables.*.rows.*'));
$this->assertTrue($this->object->isValid('databases.*.tables.*'));
$this->assertTrue($this->object->isValid('databases.*'));
$this->assertTrue($this->object->isValid('databases.books'));
$this->assertTrue($this->object->isValid('databases.books.collections.chapters'));
$this->assertTrue($this->object->isValid('databases.books.collections.*'));
$this->assertTrue($this->object->isValid('databases.books.tables.chapters'));
$this->assertTrue($this->object->isValid('databases.books.tables.*'));
$this->assertTrue($this->object->isValid('functions.*'));
$this->assertTrue($this->object->isValid('buckets.*'));
$this->assertTrue($this->object->isValid('teams.*'));
@@ -63,9 +63,9 @@ class EventValidatorTest extends TestCase
$this->assertFalse($this->object->isValid(null));
$this->assertFalse($this->object->isValid(''));
$this->assertFalse($this->object->isValid('unknown.*'));
$this->assertFalse($this->object->isValid('collections'));
$this->assertFalse($this->object->isValid('collections.*.unknown'));
$this->assertFalse($this->object->isValid('collections.*.documents.*.unknown'));
$this->assertFalse($this->object->isValid('tables'));
$this->assertFalse($this->object->isValid('tables.*.unknown'));
$this->assertFalse($this->object->isValid('tables.*.rows.*.unknown'));
$this->assertFalse($this->object->isValid('users.torsten.unknown'));
$this->assertFalse($this->object->isValid('users.torsten.delete.email'));
$this->assertFalse($this->object->isValid('teams.*.memberships.*.update.unknown'));
@@ -29,27 +29,27 @@ class FunctionEventValidatorTest extends TestCase
$this->assertTrue($this->object->isValid('users.*.update.email'));
$this->assertTrue($this->object->isValid('users.*.update'));
$this->assertTrue($this->object->isValid('users.*'));
$this->assertTrue($this->object->isValid('databases.books.collections.chapters.documents.prolog.create'));
$this->assertTrue($this->object->isValid('databases.books.collections.chapters.documents.prolog'));
$this->assertTrue($this->object->isValid('databases.books.collections.chapters.documents.*.create'));
$this->assertTrue($this->object->isValid('databases.books.collections.chapters.documents.*'));
$this->assertTrue($this->object->isValid('databases.books.collections.*.documents.prolog.create'));
$this->assertTrue($this->object->isValid('databases.books.collections.*.documents.prolog'));
$this->assertTrue($this->object->isValid('databases.books.collections.*.documents.*.create'));
$this->assertTrue($this->object->isValid('databases.books.collections.*.documents.*'));
$this->assertTrue($this->object->isValid('databases.*.collections.chapters.documents.prolog.create'));
$this->assertTrue($this->object->isValid('databases.*.collections.chapters.documents.prolog'));
$this->assertTrue($this->object->isValid('databases.*.collections.chapters.documents.*.create'));
$this->assertTrue($this->object->isValid('databases.*.collections.chapters.documents.*'));
$this->assertTrue($this->object->isValid('databases.*.collections.*.documents.prolog.create'));
$this->assertTrue($this->object->isValid('databases.*.collections.*.documents.prolog'));
$this->assertTrue($this->object->isValid('databases.*.collections.*.documents.*.create'));
$this->assertTrue($this->object->isValid('databases.*.collections.*.documents.*'));
$this->assertTrue($this->object->isValid('databases.*.collections.*'));
$this->assertTrue($this->object->isValid('databases.books.tables.chapters.rows.prolog.create'));
$this->assertTrue($this->object->isValid('databases.books.tables.chapters.rows.prolog'));
$this->assertTrue($this->object->isValid('databases.books.tables.chapters.rows.*.create'));
$this->assertTrue($this->object->isValid('databases.books.tables.chapters.rows.*'));
$this->assertTrue($this->object->isValid('databases.books.tables.*.rows.prolog.create'));
$this->assertTrue($this->object->isValid('databases.books.tables.*.rows.prolog'));
$this->assertTrue($this->object->isValid('databases.books.tables.*.rows.*.create'));
$this->assertTrue($this->object->isValid('databases.books.tables.*.rows.*'));
$this->assertTrue($this->object->isValid('databases.*.tables.chapters.rows.prolog.create'));
$this->assertTrue($this->object->isValid('databases.*.tables.chapters.rows.prolog'));
$this->assertTrue($this->object->isValid('databases.*.tables.chapters.rows.*.create'));
$this->assertTrue($this->object->isValid('databases.*.tables.chapters.rows.*'));
$this->assertTrue($this->object->isValid('databases.*.tables.*.rows.prolog.create'));
$this->assertTrue($this->object->isValid('databases.*.tables.*.rows.prolog'));
$this->assertTrue($this->object->isValid('databases.*.tables.*.rows.*.create'));
$this->assertTrue($this->object->isValid('databases.*.tables.*.rows.*'));
$this->assertTrue($this->object->isValid('databases.*.tables.*'));
$this->assertTrue($this->object->isValid('databases.*'));
$this->assertTrue($this->object->isValid('databases.books'));
$this->assertTrue($this->object->isValid('databases.books.collections.chapters'));
$this->assertTrue($this->object->isValid('databases.books.collections.*'));
$this->assertTrue($this->object->isValid('databases.books.tables.chapters'));
$this->assertTrue($this->object->isValid('databases.books.tables.*'));
$this->assertTrue($this->object->isValid('buckets.*'));
$this->assertTrue($this->object->isValid('teams.*'));
$this->assertTrue($this->object->isValid('users.*'));
@@ -62,9 +62,9 @@ class FunctionEventValidatorTest extends TestCase
$this->assertFalse($this->object->isValid(null));
$this->assertFalse($this->object->isValid(''));
$this->assertFalse($this->object->isValid('unknown.*'));
$this->assertFalse($this->object->isValid('collections'));
$this->assertFalse($this->object->isValid('collections.*.unknown'));
$this->assertFalse($this->object->isValid('collections.*.documents.*.unknown'));
$this->assertFalse($this->object->isValid('tables'));
$this->assertFalse($this->object->isValid('tables.*.unknown'));
$this->assertFalse($this->object->isValid('tables.*.rows.*.unknown'));
$this->assertFalse($this->object->isValid('users.torsten.unknown'));
$this->assertFalse($this->object->isValid('users.torsten.delete.email'));
$this->assertFalse($this->object->isValid('teams.*.memberships.*.update.unknown'));
+19 -19
View File
@@ -35,7 +35,7 @@ class MessagingTest extends TestCase
Role::team(ID::custom('def'))->toString(),
Role::team(ID::custom('def'), 'guest')->toString(),
],
['files' => 0, 'documents' => 0, 'documents.789' => 0, 'account.123' => 0]
['files' => 0, 'rows' => 0, 'rows.789' => 0, 'account.123' => 0]
);
$event = [
@@ -115,13 +115,13 @@ class MessagingTest extends TestCase
$this->assertEmpty($receivers);
$event['roles'] = [Role::any()->toString()];
$event['data']['channels'] = ['documents.123'];
$event['data']['channels'] = ['rows.123'];
$receivers = $realtime->getSubscribers($event);
$this->assertEmpty($receivers);
$event['data']['channels'] = ['documents.789'];
$event['data']['channels'] = ['rows.789'];
$receivers = $realtime->getSubscribers($event);
@@ -153,8 +153,8 @@ class MessagingTest extends TestCase
$channels = [
0 => 'files',
1 => 'documents',
2 => 'documents.789',
1 => 'rows',
2 => 'rows.789',
3 => 'account',
4 => 'account.456'
];
@@ -162,8 +162,8 @@ class MessagingTest extends TestCase
$channels = Realtime::convertChannels($channels, $user->getId());
$this->assertCount(4, $channels);
$this->assertArrayHasKey('files', $channels);
$this->assertArrayHasKey('documents', $channels);
$this->assertArrayHasKey('documents.789', $channels);
$this->assertArrayHasKey('rows', $channels);
$this->assertArrayHasKey('rows.789', $channels);
$this->assertArrayHasKey('account', $channels);
$this->assertArrayNotHasKey('account.456', $channels);
}
@@ -190,8 +190,8 @@ class MessagingTest extends TestCase
]);
$channels = [
0 => 'files',
1 => 'documents',
2 => 'documents.789',
1 => 'rows',
2 => 'rows.789',
3 => 'account',
4 => 'account.456'
];
@@ -200,8 +200,8 @@ class MessagingTest extends TestCase
$this->assertCount(5, $channels);
$this->assertArrayHasKey('files', $channels);
$this->assertArrayHasKey('documents', $channels);
$this->assertArrayHasKey('documents.789', $channels);
$this->assertArrayHasKey('rows', $channels);
$this->assertArrayHasKey('rows.789', $channels);
$this->assertArrayHasKey('account.123', $channels);
$this->assertArrayHasKey('account', $channels);
$this->assertArrayNotHasKey('account.456', $channels);
@@ -213,10 +213,10 @@ class MessagingTest extends TestCase
* Test Collection Level Permissions
*/
$result = Realtime::fromPayload(
event: 'databases.database_id.collections.collection_id.documents.document_id.create',
event: 'databases.database_id.tables.collection_id.rows.document_id.create',
payload: new Document([
'$id' => ID::custom('test'),
'$collection' => ID::custom('collection'),
'$collection' => ID::custom('table'),
'$permissions' => [
Permission::read(Role::team('123abc')),
Permission::update(Role::team('123abc')),
@@ -226,8 +226,8 @@ class MessagingTest extends TestCase
database: new Document([
'$id' => ID::custom('database'),
]),
collection: new Document([
'$id' => ID::custom('collection'),
table: new Document([
'$id' => ID::custom('table'),
'$permissions' => [
Permission::read(Role::any()),
Permission::update(Role::any()),
@@ -243,10 +243,10 @@ class MessagingTest extends TestCase
* Test Document Level Permissions
*/
$result = Realtime::fromPayload(
event: 'databases.database_id.collections.collection_id.documents.document_id.create',
event: 'databases.database_id.tables.collection_id.rows.document_id.create',
payload: new Document([
'$id' => ID::custom('test'),
'$collection' => ID::custom('collection'),
'$collection' => ID::custom('table'),
'$permissions' => [
Permission::read(Role::any()),
Permission::update(Role::any()),
@@ -256,8 +256,8 @@ class MessagingTest extends TestCase
database: new Document([
'$id' => ID::custom('database'),
]),
collection: new Document([
'$id' => ID::custom('collection'),
table: new Document([
'$id' => ID::custom('table'),
'$permissions' => [
Permission::read(Role::team('123abc')),
Permission::update(Role::team('123abc')),