Skip to content
This repository was archived by the owner on Feb 7, 2024. It is now read-only.

Commit 1380f0b

Browse files
committed
Add failing test
1 parent 00dd9b0 commit 1380f0b

File tree

1 file changed

+45
-20
lines changed

1 file changed

+45
-20
lines changed

tests/Channels/PresenceChannelTest.php

Lines changed: 45 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace BeyondCode\LaravelWebSockets\Tests\Channels;
44

5+
use BeyondCode\LaravelWebSockets\Tests\Mocks\Connection;
56
use BeyondCode\LaravelWebSockets\Tests\Mocks\Message;
67
use BeyondCode\LaravelWebSockets\Tests\TestCase;
78
use BeyondCode\LaravelWebSockets\WebSockets\Exceptions\InvalidSignature;
@@ -42,16 +43,7 @@ public function clients_with_valid_auth_signatures_can_join_presence_channels()
4243
],
4344
];
4445

45-
$signature = "{$connection->socketId}:presence-channel:".json_encode($channelData);
46-
47-
$message = new Message(json_encode([
48-
'event' => 'pusher:subscribe',
49-
'data' => [
50-
'auth' => $connection->app->key.':'.hash_hmac('sha256', $signature, $connection->app->secret),
51-
'channel' => 'presence-channel',
52-
'channel_data' => json_encode($channelData),
53-
],
54-
]));
46+
$message = $this->getSignedMessage($connection, 'presence-channel', $channelData);
5547

5648
$this->pusherServer->onMessage($connection, $message);
5749

@@ -71,21 +63,54 @@ public function clients_with_no_user_info_can_join_presence_channels()
7163
'user_id' => 1,
7264
];
7365

74-
$signature = "{$connection->socketId}:presence-channel:".json_encode($channelData);
75-
76-
$message = new Message(json_encode([
77-
'event' => 'pusher:subscribe',
78-
'data' => [
79-
'auth' => $connection->app->key.':'.hash_hmac('sha256', $signature, $connection->app->secret),
80-
'channel' => 'presence-channel',
81-
'channel_data' => json_encode($channelData),
82-
],
83-
]));
66+
$message = $this->getSignedMessage($connection, 'presence-channel', $channelData);
8467

8568
$this->pusherServer->onMessage($connection, $message);
8669

8770
$connection->assertSentEvent('pusher_internal:subscription_succeeded', [
8871
'channel' => 'presence-channel',
8972
]);
9073
}
74+
75+
/** @test */
76+
public function multiple_clients_with_same_user_id_are_counted_once()
77+
{
78+
$this->pusherServer->onOpen($connection = $this->getWebSocketConnection());
79+
$this->pusherServer->onOpen($connection2 = $this->getWebSocketConnection());
80+
81+
$channelName = 'presence-channel';
82+
$channelData = [
83+
'user_id' => $userId = 1,
84+
];
85+
86+
$this->pusherServer->onMessage($connection, $this->getSignedMessage($connection, $channelName, $channelData));
87+
$this->pusherServer->onMessage($connection2, $this->getSignedMessage($connection2, $channelName, $channelData));
88+
89+
$connection2->assertSentEvent('pusher_internal:subscription_succeeded', [
90+
'channel' => $channelName,
91+
'data' => json_encode([
92+
'presence' => [
93+
'ids' => [(string)$userId],
94+
'hash' => [
95+
(string)$userId => [],
96+
],
97+
'count' => 1,
98+
],
99+
]),
100+
]);
101+
}
102+
103+
private function getSignedMessage(Connection $connection, string $channelName, array $channelData): Message
104+
{
105+
$signature = "{$connection->socketId}:{$channelName}:" . json_encode($channelData);
106+
107+
return new Message(json_encode([
108+
'event' => 'pusher:subscribe',
109+
'data' => [
110+
'auth' => $connection->app->key . ':' . hash_hmac('sha256', $signature, $connection->app->secret),
111+
'channel' => $channelName,
112+
'channel_data' => json_encode($channelData),
113+
],
114+
]));
115+
}
91116
}

0 commit comments

Comments
 (0)