diff --git a/tests/unit/Auth/AuthTest.php b/tests/unit/Auth/AuthTest.php index 09d86d3eaf..0053ca3392 100644 --- a/tests/unit/Auth/AuthTest.php +++ b/tests/unit/Auth/AuthTest.php @@ -196,4 +196,47 @@ class AuthTest extends TestCase $this->assertEquals(false, Auth::isAppUser(['role:'.Auth::USER_ROLE_OWNER => true, 'role:'.Auth::USER_ROLE_GUEST => true])); $this->assertEquals(false, Auth::isAppUser(['role:'.Auth::USER_ROLE_OWNER => true, 'role:'.Auth::USER_ROLE_ADMIN => true, 'role:'.Auth::USER_ROLE_DEVELOPER => true])); } + + public function testGuestRoles() + { + $user = new Document([ + '$id' => '' + ]); + + $roles = Auth::getRoles($user); + $this->assertCount(0, $roles); + $this->assertEmpty($roles); + } + + public function testUserRoles() + { + $user = new Document([ + '$id' => '123', + 'memberships' => [ + [ + 'teamId' => 'abc', + 'roles' => [ + 'administrator', + 'moderator' + ] + ], + [ + 'teamId' => 'def', + 'roles' => [ + 'guest' + ] + ] + ] + ]); + + $roles = Auth::getRoles($user); + + $this->assertCount(6, $roles); + $this->assertContains('user:123', $roles); + $this->assertContains('team:abc', $roles); + $this->assertContains('team:abc/administrator', $roles); + $this->assertContains('team:abc/moderator', $roles); + $this->assertContains('team:def', $roles); + $this->assertContains('team:def/guest', $roles); + } } diff --git a/tests/unit/Event/RealtimeTest.php b/tests/unit/Event/RealtimeTest.php new file mode 100644 index 0000000000..e4aef27ed3 --- /dev/null +++ b/tests/unit/Event/RealtimeTest.php @@ -0,0 +1,73 @@ + '' + ]); + $channels = [ + 0 => 'files', + 1 => 'documents', + 2 => 'documents.789', + 3 => 'account', + 4 => 'account.456' + ]; + + $channels = Realtime::convertChannels($channels, $user); + $this->assertCount(3, $channels); + $this->assertArrayHasKey('files', $channels); + $this->assertArrayHasKey('documents', $channels); + $this->assertArrayHasKey('documents.789', $channels); + $this->assertArrayNotHasKey('account', $channels); + $this->assertArrayNotHasKey('account.456', $channels); + } + + public function testConvertChannelsUser() + { + $user = new Document([ + '$id' => '123', + 'memberships' => [ + [ + 'teamId' => 'abc', + 'roles' => [ + 'administrator', + 'moderator' + ] + ], + [ + 'teamId' => 'def', + 'roles' => [ + 'guest' + ] + ] + ] + ]); + $channels = [ + 0 => 'files', + 1 => 'documents', + 2 => 'documents.789', + 3 => 'account', + 4 => 'account.456' + ]; + + $channels = Realtime::convertChannels($channels, $user); + + $this->assertCount(4, $channels); + $this->assertArrayHasKey('files', $channels); + $this->assertArrayHasKey('documents', $channels); + $this->assertArrayHasKey('documents.789', $channels); + $this->assertArrayHasKey('account.123', $channels); + $this->assertArrayNotHasKey('account', $channels); + $this->assertArrayNotHasKey('account.456', $channels); + } +} diff --git a/tests/unit/Realtime/RealtimeChannelsTest.php b/tests/unit/Messaging/MessagingChannelsTest.php similarity index 77% rename from tests/unit/Realtime/RealtimeChannelsTest.php rename to tests/unit/Messaging/MessagingChannelsTest.php index 923a38325e..4159def554 100644 --- a/tests/unit/Realtime/RealtimeChannelsTest.php +++ b/tests/unit/Messaging/MessagingChannelsTest.php @@ -2,19 +2,21 @@ namespace Appwrite\Tests; +use Appwrite\Auth\Auth; use Appwrite\Database\Document; -use Appwrite\Realtime; +use Appwrite\Event\Realtime as EventRealtime; +use Appwrite\Messaging; +use Appwrite\Messaging\Adapter\Realtime; use PHPUnit\Framework\TestCase; -class RealtimeChannelsTest extends TestCase +class MessagingChannelsTest extends TestCase { /** * Configures how many Connections the Test should Mock. */ public $connectionsPerChannel = 10; - public $connections = []; - public $subscriptions = []; + public Realtime $realtime; public $connectionsCount = 0; public $connectionsAuthenticated = 0; public $connectionsGuest = 0; @@ -41,12 +43,14 @@ class RealtimeChannelsTest extends TestCase $this->connectionsGuest = count($this->allChannels) * $this->connectionsPerChannel; $this->connectionsTotal = $this->connectionsAuthenticated + $this->connectionsGuest; + $this->realtime = new Realtime(); + /** * Add Authenticated Clients */ for ($i = 0; $i < $this->connectionsPerChannel; $i++) { foreach ($this->allChannels as $index => $channel) { - Realtime\Parser::setUser(new Document([ + $user = new Document([ '$id' => 'user' . $this->connectionsCount, 'memberships' => [ [ @@ -56,16 +60,19 @@ class RealtimeChannelsTest extends TestCase ] ] ] - ])); - $roles = Realtime\Parser::getRoles(); - $parsedChannels = Realtime\Parser::parseChannels([0 => $channel]); + ]); - Realtime\Parser::subscribe( + $roles = [ + 'role:' . (($user->isEmpty()) ? Auth::USER_ROLE_GUEST : Auth::USER_ROLE_MEMBER), + ...Auth::getRoles($user) + ]; + + $parsedChannels = EventRealtime::convertChannels([0 => $channel], $user); + + $this->realtime->subscribe( '1', $this->connectionsCount, $roles, - $this->subscriptions, - $this->connections, $parsedChannels ); @@ -78,19 +85,21 @@ class RealtimeChannelsTest extends TestCase */ for ($i = 0; $i < $this->connectionsPerChannel; $i++) { foreach ($this->allChannels as $index => $channel) { - Realtime\Parser::setUser(new Document([ + $user = new Document([ '$id' => '' - ])); + ]); - $roles = Realtime\Parser::getRoles(); - $parsedChannels = Realtime\Parser::parseChannels([0 => $channel]); + $roles = [ + 'role:' . (($user->isEmpty()) ? Auth::USER_ROLE_GUEST : Auth::USER_ROLE_MEMBER), + ...Auth::getRoles($user) + ]; - Realtime\Parser::subscribe( + $parsedChannels = EventRealtime::convertChannels([0 => $channel], $user); + + $this->realtime->subscribe( '1', $this->connectionsCount, $roles, - $this->subscriptions, - $this->connections, $parsedChannels ); @@ -101,8 +110,7 @@ class RealtimeChannelsTest extends TestCase public function tearDown(): void { - $this->connections = []; - $this->subscriptions = []; + unset($this->realtime); $this->connectionsCount = 0; } @@ -111,7 +119,7 @@ class RealtimeChannelsTest extends TestCase /** * Check for 1 project. */ - $this->assertCount(1, $this->subscriptions); + $this->assertCount(1, $this->realtime->subscriptions); /** * Check for correct amount of subscriptions: @@ -121,28 +129,28 @@ class RealtimeChannelsTest extends TestCase * - 1 role:guest * - 1 role:member */ - $this->assertCount(($this->connectionsAuthenticated + (3 * $this->connectionsPerChannel) + 2), $this->subscriptions['1']); + $this->assertCount(($this->connectionsAuthenticated + (3 * $this->connectionsPerChannel) + 2), $this->realtime->subscriptions['1']); /** * Check for connections * - Authenticated * - Guests */ - $this->assertCount($this->connectionsTotal, $this->connections); + $this->assertCount($this->connectionsTotal, $this->realtime->connections); + + $this->realtime->unsubscribe(-1); - Realtime\Parser::unsubscribe(-1, $this->subscriptions, $this->connections); - - $this->assertCount($this->connectionsTotal, $this->connections); - $this->assertCount(($this->connectionsAuthenticated + (3 * $this->connectionsPerChannel) + 2), $this->subscriptions['1']); + $this->assertCount($this->connectionsTotal, $this->realtime->connections); + $this->assertCount(($this->connectionsAuthenticated + (3 * $this->connectionsPerChannel) + 2), $this->realtime->subscriptions['1']); for ($i = 0; $i < $this->connectionsCount; $i++) { - Realtime\Parser::unsubscribe($i, $this->subscriptions, $this->connections); + $this->realtime->unsubscribe($i); - $this->assertCount(($this->connectionsCount - $i - 1), $this->connections); + $this->assertCount(($this->connectionsCount - $i - 1), $this->realtime->connections); } - $this->assertEmpty($this->connections); - $this->assertEmpty($this->subscriptions); + $this->assertEmpty($this->realtime->connections); + $this->assertEmpty($this->realtime->subscriptions); } /** @@ -161,10 +169,7 @@ class RealtimeChannelsTest extends TestCase ] ]; - $receivers = Realtime\Parser::identifyReceivers( - $event, - $this->subscriptions - ); + $receivers = $this->realtime->getReceivers($event); /** * Every Client subscribed to the Wildcard should receive this event. @@ -197,10 +202,7 @@ class RealtimeChannelsTest extends TestCase ] ]; - $receivers = Realtime\Parser::identifyReceivers( - $event, - $this->subscriptions - ); + $receivers = $this->realtime->getReceivers($event); /** * Every Role subscribed to a Channel should receive this event. @@ -234,10 +236,7 @@ class RealtimeChannelsTest extends TestCase ] ]; - $receivers = Realtime\Parser::identifyReceivers( - $event, - $this->subscriptions - ); + $receivers = $this->realtime->getReceivers($event); /** * Every Client subscribed to a Channel should receive this event. @@ -271,10 +270,7 @@ class RealtimeChannelsTest extends TestCase ] ]; - $receivers = Realtime\Parser::identifyReceivers( - $event, - $this->subscriptions - ); + $receivers = $this->realtime->getReceivers($event); /** * Every Team Member should receive this event. @@ -300,10 +296,7 @@ class RealtimeChannelsTest extends TestCase ] ]; - $receivers = Realtime\Parser::identifyReceivers( - $event, - $this->subscriptions - ); + $receivers = $this->realtime->getReceivers($event); /** * Only 1 Team Member of a role should have access to a specific channel. diff --git a/tests/unit/Messaging/MessagingGuestTest.php b/tests/unit/Messaging/MessagingGuestTest.php new file mode 100644 index 0000000000..804116604d --- /dev/null +++ b/tests/unit/Messaging/MessagingGuestTest.php @@ -0,0 +1,128 @@ +subscribe( + '1', + 1, + ['role:guest'], + ['files' => 0, 'documents' => 0, 'documents.789' => 0, 'account.123' => 0] + ); + + $event = [ + 'project' => '1', + 'permissions' => ['*'], + 'data' => [ + 'channels' => [ + 0 => 'documents', + 1 => 'documents', + ] + ] + ]; + + $receivers = $realtime->getReceivers($event); + + $this->assertCount(1, $receivers); + $this->assertEquals(1, $receivers[0]); + + $event['permissions'] = ['role:guest']; + + $receivers = $realtime->getReceivers($event); + + $this->assertCount(1, $receivers); + $this->assertEquals(1, $receivers[0]); + + $event['permissions'] = ['role:member']; + + $receivers = $realtime->getReceivers($event); + + $this->assertEmpty($receivers); + + $event['permissions'] = ['user:123']; + + $receivers = $realtime->getReceivers($event); + + $this->assertEmpty($receivers); + + $event['permissions'] = ['team:abc']; + + $receivers = $realtime->getReceivers($event); + + $this->assertEmpty($receivers); + + $event['permissions'] = ['team:abc/administrator']; + + $receivers = $realtime->getReceivers($event); + + $this->assertEmpty($receivers); + + $event['permissions'] = ['team:abc/god']; + + $receivers = $realtime->getReceivers($event); + + $this->assertEmpty($receivers); + + $event['permissions'] = ['team:def']; + + $receivers = $realtime->getReceivers($event); + + $this->assertEmpty($receivers); + + $event['permissions'] = ['team:def/guest']; + + $receivers = $realtime->getReceivers($event); + + $this->assertEmpty($receivers); + + $event['permissions'] = ['user:456']; + + $receivers = $realtime->getReceivers($event); + + $this->assertEmpty($receivers); + + $event['permissions'] = ['team:def/member']; + + $receivers = $realtime->getReceivers($event); + + $this->assertEmpty($receivers); + + $event['permissions'] = ['*']; + $event['data']['channels'] = ['documents.123']; + + $receivers = $realtime->getReceivers($event); + + $this->assertEmpty($receivers); + + $event['data']['channels'] = ['documents.789']; + + $receivers = $realtime->getReceivers($event); + + $this->assertCount(1, $receivers); + $this->assertEquals(1, $receivers[0]); + + $event['project'] = '2'; + + $receivers = $realtime->getReceivers($event); + + $this->assertEmpty($receivers); + + $realtime->unsubscribe(2); + + $this->assertCount(1, $realtime->connections); + $this->assertCount(1, $realtime->subscriptions['1']); + + $realtime->unsubscribe(1); + + $this->assertEmpty($realtime->connections); + $this->assertEmpty($realtime->subscriptions); + } +} diff --git a/tests/unit/Messaging/MessagingTest.php b/tests/unit/Messaging/MessagingTest.php new file mode 100644 index 0000000000..6cd6a69675 --- /dev/null +++ b/tests/unit/Messaging/MessagingTest.php @@ -0,0 +1,135 @@ +subscribe( + '1', + 1, + ['user:123', 'role:member', 'team:abc', 'team:abc/administrator', 'team:abc/moderator', 'team:def', 'team:def/guest'], + ['files' => 0, 'documents' => 0, 'documents.789' => 0, 'account.123' => 0] + ); + + $event = [ + 'project' => '1', + 'permissions' => ['*'], + 'data' => [ + 'channels' => [ + 0 => 'account.123', + ] + ] + ]; + + $receivers = $realtime->getReceivers($event); + + $this->assertCount(1, $receivers); + $this->assertEquals(1, $receivers[0]); + + $event['permissions'] = ['role:member']; + + $receivers = $realtime->getReceivers($event); + + $this->assertCount(1, $receivers); + $this->assertEquals(1, $receivers[0]); + + $event['permissions'] = ['user:123']; + + $receivers = $realtime->getReceivers($event); + + $this->assertCount(1, $receivers); + $this->assertEquals(1, $receivers[0]); + + $event['permissions'] = ['team:abc']; + + $receivers = $realtime->getReceivers($event); + + $this->assertCount(1, $receivers); + $this->assertEquals(1, $receivers[0]); + + $event['permissions'] = ['team:abc/administrator']; + + $receivers = $realtime->getReceivers($event); + + $this->assertCount(1, $receivers); + $this->assertEquals(1, $receivers[0]); + + $event['permissions'] = ['team:abc/moderator']; + + $receivers = $realtime->getReceivers($event); + + $this->assertCount(1, $receivers); + $this->assertEquals(1, $receivers[0]); + + $event['permissions'] = ['team:def']; + + $receivers = $realtime->getReceivers($event); + + $this->assertCount(1, $receivers); + $this->assertEquals(1, $receivers[0]); + + $event['permissions'] = ['team:def/guest']; + + $receivers = $realtime->getReceivers($event); + + $this->assertCount(1, $receivers); + $this->assertEquals(1, $receivers[0]); + + $event['permissions'] = ['user:456']; + + $receivers = $realtime->getReceivers($event); + + $this->assertEmpty($receivers); + + $event['permissions'] = ['team:def/member']; + + $receivers = $realtime->getReceivers($event); + + $this->assertEmpty($receivers); + + $event['permissions'] = ['*']; + $event['data']['channels'] = ['documents.123']; + + $receivers = $realtime->getReceivers($event); + + $this->assertEmpty($receivers); + + $event['data']['channels'] = ['documents.789']; + + $receivers = $realtime->getReceivers($event); + + $this->assertCount(1, $receivers); + $this->assertEquals(1, $receivers[0]); + + $event['project'] = '2'; + + $receivers = $realtime->getReceivers($event); + + $this->assertEmpty($receivers); + + $realtime->unsubscribe(2); + + $this->assertCount(1, $realtime->connections); + $this->assertCount(7, $realtime->subscriptions['1']); + + $realtime->unsubscribe(1); + + $this->assertEmpty($realtime->connections); + $this->assertEmpty($realtime->subscriptions); + } +} diff --git a/tests/unit/Realtime/RealtimeGuestTest.php b/tests/unit/Realtime/RealtimeGuestTest.php deleted file mode 100644 index 01e43d7308..0000000000 --- a/tests/unit/Realtime/RealtimeGuestTest.php +++ /dev/null @@ -1,191 +0,0 @@ - '' - ])); - - $roles = Realtime\Parser::getRoles(); - $this->assertCount(1, $roles); - $this->assertContains('role:guest', $roles); - - $channels = [ - 0 => 'files', - 1 => 'documents', - 2 => 'documents.789', - 3 => 'account', - 4 => 'account.456' - ]; - - $channels = Realtime\Parser::parseChannels($channels); - $this->assertCount(3, $channels); - $this->assertArrayHasKey('files', $channels); - $this->assertArrayHasKey('documents', $channels); - $this->assertArrayHasKey('documents.789', $channels); - $this->assertArrayNotHasKey('account', $channels); - $this->assertArrayNotHasKey('account.456', $channels); - - Realtime\Parser::subscribe('1', 1, $roles, $this->subscriptions, $this->connections, $channels); - - $event = [ - 'project' => '1', - 'permissions' => ['*'], - 'data' => [ - 'channels' => [ - 0 => 'documents', - 1 => 'documents', - ] - ] - ]; - - $receivers = Realtime\Parser::identifyReceivers( - $event, - $this->subscriptions - ); - - $this->assertCount(1, $receivers); - $this->assertEquals(1, $receivers[0]); - - $event['permissions'] = ['role:guest']; - - $receivers = Realtime\Parser::identifyReceivers( - $event, - $this->subscriptions - ); - - $this->assertCount(1, $receivers); - $this->assertEquals(1, $receivers[0]); - - $event['permissions'] = ['role:member']; - - $receivers = Realtime\Parser::identifyReceivers( - $event, - $this->subscriptions - ); - - $this->assertEmpty($receivers); - - $event['permissions'] = ['user:123']; - - $receivers = Realtime\Parser::identifyReceivers( - $event, - $this->subscriptions - ); - - $this->assertEmpty($receivers); - - $event['permissions'] = ['team:abc']; - - $receivers = Realtime\Parser::identifyReceivers( - $event, - $this->subscriptions - ); - - $this->assertEmpty($receivers); - - $event['permissions'] = ['team:abc/administrator']; - - $receivers = Realtime\Parser::identifyReceivers( - $event, - $this->subscriptions - ); - - $this->assertEmpty($receivers); - - $event['permissions'] = ['team:abc/god']; - - $receivers = Realtime\Parser::identifyReceivers( - $event, - $this->subscriptions - ); - - $this->assertEmpty($receivers); - - $event['permissions'] = ['team:def']; - - $receivers = Realtime\Parser::identifyReceivers( - $event, - $this->subscriptions - ); - - $this->assertEmpty($receivers); - - $event['permissions'] = ['team:def/guest']; - - $receivers = Realtime\Parser::identifyReceivers( - $event, - $this->subscriptions - ); - - $this->assertEmpty($receivers); - - $event['permissions'] = ['user:456']; - - $receivers = Realtime\Parser::identifyReceivers( - $event, - $this->subscriptions - ); - - $this->assertEmpty($receivers); - - $event['permissions'] = ['team:def/member']; - - $receivers = Realtime\Parser::identifyReceivers( - $event, - $this->subscriptions - ); - - $this->assertEmpty($receivers); - - $event['permissions'] = ['*']; - $event['data']['channels'] = ['documents.123']; - - $receivers = Realtime\Parser::identifyReceivers( - $event, - $this->subscriptions - ); - - $this->assertEmpty($receivers); - - $event['data']['channels'] = ['documents.789']; - - $receivers = Realtime\Parser::identifyReceivers( - $event, - $this->subscriptions - ); - - $this->assertCount(1, $receivers); - $this->assertEquals(1, $receivers[0]); - - $event['project'] = '2'; - - $receivers = Realtime\Parser::identifyReceivers( - $event, - $this->subscriptions - ); - - $this->assertEmpty($receivers); - - Realtime\Parser::unsubscribe(2, $this->subscriptions, $this->connections); - - $this->assertCount(1, $this->connections); - $this->assertCount(1, $this->subscriptions['1']); - - Realtime\Parser::unsubscribe(1, $this->subscriptions, $this->connections); - - $this->assertEmpty($this->connections); - $this->assertEmpty($this->subscriptions); - } -} diff --git a/tests/unit/Realtime/RealtimeTest.php b/tests/unit/Realtime/RealtimeTest.php deleted file mode 100644 index a722bea10d..0000000000 --- a/tests/unit/Realtime/RealtimeTest.php +++ /dev/null @@ -1,220 +0,0 @@ - '123', - 'memberships' => [ - [ - 'teamId' => 'abc', - 'roles' => [ - 'administrator', - 'god' - ] - ], - [ - 'teamId' => 'def', - 'roles' => [ - 'guest' - ] - ] - ] - ])); - - $roles = Realtime\Parser::getRoles(); - - $this->assertCount(7, $roles); - $this->assertContains('user:123', $roles); - $this->assertContains('role:member', $roles); - $this->assertContains('team:abc', $roles); - $this->assertContains('team:abc/administrator', $roles); - $this->assertContains('team:abc/god', $roles); - $this->assertContains('team:def', $roles); - $this->assertContains('team:def/guest', $roles); - - $channels = [ - 0 => 'files', - 1 => 'documents', - 2 => 'documents.789', - 3 => 'account', - 4 => 'account.456' - ]; - - $channels = Realtime\Parser::parseChannels($channels); - - $this->assertCount(4, $channels); - $this->assertArrayHasKey('files', $channels); - $this->assertArrayHasKey('documents', $channels); - $this->assertArrayHasKey('documents.789', $channels); - $this->assertArrayHasKey('account.123', $channels); - $this->assertArrayNotHasKey('account', $channels); - $this->assertArrayNotHasKey('account.456', $channels); - - Realtime\Parser::subscribe('1', 1, $roles, $this->subscriptions, $this->connections, $channels); - - $event = [ - 'project' => '1', - 'permissions' => ['*'], - 'data' => [ - 'channels' => [ - 0 => 'account.123', - ] - ] - ]; - - $receivers = Realtime\Parser::identifyReceivers( - $event, - $this->subscriptions - ); - - $this->assertCount(1, $receivers); - $this->assertEquals(1, $receivers[0]); - - $event['permissions'] = ['role:member']; - - $receivers = Realtime\Parser::identifyReceivers( - $event, - $this->subscriptions - ); - - $this->assertCount(1, $receivers); - $this->assertEquals(1, $receivers[0]); - - $event['permissions'] = ['user:123']; - - $receivers = Realtime\Parser::identifyReceivers( - $event, - $this->subscriptions - ); - - $this->assertCount(1, $receivers); - $this->assertEquals(1, $receivers[0]); - - $event['permissions'] = ['team:abc']; - - $receivers = Realtime\Parser::identifyReceivers( - $event, - $this->subscriptions - ); - - $this->assertCount(1, $receivers); - $this->assertEquals(1, $receivers[0]); - - $event['permissions'] = ['team:abc/administrator']; - - $receivers = Realtime\Parser::identifyReceivers( - $event, - $this->subscriptions - ); - - $this->assertCount(1, $receivers); - $this->assertEquals(1, $receivers[0]); - - $event['permissions'] = ['team:abc/god']; - - $receivers = Realtime\Parser::identifyReceivers( - $event, - $this->subscriptions - ); - - $this->assertCount(1, $receivers); - $this->assertEquals(1, $receivers[0]); - - $event['permissions'] = ['team:def']; - - $receivers = Realtime\Parser::identifyReceivers( - $event, - $this->subscriptions - ); - - $this->assertCount(1, $receivers); - $this->assertEquals(1, $receivers[0]); - - $event['permissions'] = ['team:def/guest']; - - $receivers = Realtime\Parser::identifyReceivers( - $event, - $this->subscriptions - ); - - $this->assertCount(1, $receivers); - $this->assertEquals(1, $receivers[0]); - - $event['permissions'] = ['user:456']; - - $receivers = Realtime\Parser::identifyReceivers( - $event, - $this->subscriptions - ); - - $this->assertEmpty($receivers); - - $event['permissions'] = ['team:def/member']; - - $receivers = Realtime\Parser::identifyReceivers( - $event, - $this->subscriptions - ); - - $this->assertEmpty($receivers); - - $event['permissions'] = ['*']; - $event['data']['channels'] = ['documents.123']; - - $receivers = Realtime\Parser::identifyReceivers( - $event, - $this->subscriptions - ); - - $this->assertEmpty($receivers); - - $event['data']['channels'] = ['documents.789']; - - $receivers = Realtime\Parser::identifyReceivers( - $event, - $this->subscriptions - ); - - $this->assertCount(1, $receivers); - $this->assertEquals(1, $receivers[0]); - - $event['project'] = '2'; - - $receivers = Realtime\Parser::identifyReceivers( - $event, - $this->subscriptions - ); - - $this->assertEmpty($receivers); - - Realtime\Parser::unsubscribe(2, $this->subscriptions, $this->connections); - - $this->assertCount(1, $this->connections); - $this->assertCount(7, $this->subscriptions['1']); - - - Realtime\Parser::unsubscribe(1, $this->subscriptions, $this->connections); - - $this->assertEmpty($this->connections); - $this->assertEmpty($this->subscriptions); - } -}