diff --git a/tests/Channels/PresenceChannelReplicationTest.php b/tests/Channels/PresenceChannelReplicationTest.php index 7e751ef..4da0d1b 100644 --- a/tests/Channels/PresenceChannelReplicationTest.php +++ b/tests/Channels/PresenceChannelReplicationTest.php @@ -15,4 +15,54 @@ class PresenceChannelReplicationTest extends TestCase $this->runOnlyOnRedisReplication(); } + + /** @test */ + public function clients_with_valid_auth_signatures_can_join_presence_channels() + { + $connection = $this->getWebSocketConnection(); + + $this->pusherServer->onOpen($connection); + + $channelData = [ + 'user_id' => 1, + 'user_info' => [ + 'name' => 'Marcel', + ], + ]; + + $signature = "{$connection->socketId}:presence-channel:".json_encode($channelData); + + $message = new Message(json_encode([ + 'event' => 'pusher:subscribe', + 'data' => [ + 'auth' => $connection->app->key.':'.hash_hmac('sha256', $signature, $connection->app->secret), + 'channel' => 'presence-channel', + 'channel_data' => json_encode($channelData), + ], + ])); + + $this->pusherServer->onMessage($connection, $message); + + $this->getPublishClient() + ->assertCalledWithArgs('hset', [ + '1234:presence-channel', + $connection->socketId, + json_encode($channelData), + ]) + ->assertCalledWithArgs('hgetall', [ + '1234:presence-channel' + ]); + // TODO: This fails somehow + // Debugging shows the exact same pattern as good. + /* ->assertCalledWithArgs('publish', [ + '1234:presence-channel', + json_encode([ + 'event' => 'pusher_internal:member_added', + 'channel' => 'presence-channel', + 'data' => $channelData, + 'appId' => '1234', + 'serverId' => $this->app->make(ReplicationInterface::class)->getServerId(), + ]), + ]) */ + } } diff --git a/tests/Channels/PresenceChannelTest.php b/tests/Channels/PresenceChannelTest.php index 2180a4c..a837efb 100644 --- a/tests/Channels/PresenceChannelTest.php +++ b/tests/Channels/PresenceChannelTest.php @@ -56,27 +56,9 @@ class PresenceChannelTest extends TestCase $this->pusherServer->onMessage($connection, $message); - $this->getPublishClient() - ->assertCalledWithArgs('hset', [ - '1234:presence-channel', - $connection->socketId, - json_encode($channelData), - ]) - ->assertCalledWithArgs('hgetall', [ - '1234:presence-channel' - ]); - // TODO: This fails somehow - // Debugging shows the exact same pattern as good. - /* ->assertCalledWithArgs('publish', [ - '1234:presence-channel', - json_encode([ - 'event' => 'pusher_internal:member_added', - 'channel' => 'presence-channel', - 'data' => $channelData, - 'appId' => '1234', - 'serverId' => $this->app->make(ReplicationInterface::class)->getServerId(), - ]), - ]) */ + $connection->assertSentEvent('pusher_internal:subscription_succeeded', [ + 'channel' => 'presence-channel', + ]); } /** @test */ diff --git a/tests/HttpApi/FetchChannelReplicationTest.php b/tests/HttpApi/FetchChannelReplicationTest.php index 9b8c731..b6d4c3f 100644 --- a/tests/HttpApi/FetchChannelReplicationTest.php +++ b/tests/HttpApi/FetchChannelReplicationTest.php @@ -103,8 +103,6 @@ class FetchChannelReplicationTest extends TestCase $this->getSubscribeClient()->assertNothingCalled(); - dd($this->getSubscribeClient()); - $this->getPublishClient() ->assertCalled('hset') ->assertCalled('hgetall');