2018-12-03 09:06:40 +00:00
|
|
|
<?php
|
|
|
|
|
|
2020-09-10 19:59:26 +00:00
|
|
|
namespace BeyondCode\LaravelWebSockets\Test;
|
2018-12-03 09:06:40 +00:00
|
|
|
|
2020-09-10 19:59:26 +00:00
|
|
|
use BeyondCode\LaravelWebSockets\API\FetchChannels;
|
2018-12-03 09:21:35 +00:00
|
|
|
use GuzzleHttp\Psr7\Request;
|
|
|
|
|
use Illuminate\Http\JsonResponse;
|
2022-10-06 11:46:54 +00:00
|
|
|
use Pusher\Pusher;
|
2018-12-03 09:06:40 +00:00
|
|
|
|
2018-12-03 09:22:13 +00:00
|
|
|
class FetchChannelsTest extends TestCase
|
2018-12-03 09:06:40 +00:00
|
|
|
{
|
2020-09-10 19:59:26 +00:00
|
|
|
public function test_invalid_signatures_can_not_access_the_api()
|
2018-12-03 09:21:35 +00:00
|
|
|
{
|
2022-10-06 11:46:54 +00:00
|
|
|
$this->startServer();
|
2018-12-03 09:21:35 +00:00
|
|
|
|
2019-01-02 21:30:57 +00:00
|
|
|
$requestPath = '/apps/1234/channels';
|
2020-09-10 19:59:26 +00:00
|
|
|
|
2022-10-06 11:46:54 +00:00
|
|
|
$queryString = http_build_query(Pusher::build_auth_query_params(
|
2020-09-10 19:59:26 +00:00
|
|
|
'TestKey', 'InvalidSecret', 'GET', $requestPath
|
2022-10-06 11:46:54 +00:00
|
|
|
));
|
2018-12-03 09:21:35 +00:00
|
|
|
|
2022-10-06 11:46:54 +00:00
|
|
|
$request = new Request('GET', "{$requestPath}?{$queryString}");
|
2018-12-03 09:21:35 +00:00
|
|
|
|
2022-10-06 11:46:54 +00:00
|
|
|
$response = $this->await($this->browser->get('http://localhost:4000'."{$requestPath}?{$queryString}"));
|
2018-12-03 09:21:35 +00:00
|
|
|
|
2022-10-06 11:46:54 +00:00
|
|
|
$this->assertSame(401, $response->getStatusCode());
|
|
|
|
|
$this->assertSame('{"error":"Invalid auth signature provided."}', $response->getBody()->getContents());
|
2018-12-03 09:21:35 +00:00
|
|
|
}
|
|
|
|
|
|
2020-09-10 19:59:26 +00:00
|
|
|
public function test_it_returns_the_channel_information()
|
2018-12-03 09:21:35 +00:00
|
|
|
{
|
2020-09-10 19:59:26 +00:00
|
|
|
$this->newPresenceConnection('presence-channel');
|
2018-12-03 09:21:35 +00:00
|
|
|
|
2020-09-10 19:59:26 +00:00
|
|
|
$connection = new Mocks\Connection;
|
2018-12-03 09:21:35 +00:00
|
|
|
|
2019-01-02 21:30:57 +00:00
|
|
|
$requestPath = '/apps/1234/channels';
|
2020-09-10 19:59:26 +00:00
|
|
|
|
2019-01-02 21:30:57 +00:00
|
|
|
$routeParams = [
|
|
|
|
|
'appId' => '1234',
|
|
|
|
|
];
|
2018-12-03 09:21:35 +00:00
|
|
|
|
2022-10-06 11:46:54 +00:00
|
|
|
$queryString = http_build_query(Pusher::build_auth_query_params(
|
2020-09-10 19:59:26 +00:00
|
|
|
'TestKey', 'TestSecret', 'GET', $requestPath
|
2022-10-06 11:46:54 +00:00
|
|
|
));
|
2018-12-03 09:21:35 +00:00
|
|
|
|
2019-01-02 21:30:57 +00:00
|
|
|
$request = new Request('GET', "{$requestPath}?{$queryString}&".http_build_query($routeParams));
|
2018-12-03 09:21:35 +00:00
|
|
|
|
2020-09-10 19:59:26 +00:00
|
|
|
$controller = app(FetchChannels::class);
|
2018-12-03 09:21:35 +00:00
|
|
|
|
|
|
|
|
$controller->onOpen($connection, $request);
|
|
|
|
|
|
|
|
|
|
/** @var JsonResponse $response */
|
|
|
|
|
$response = array_pop($connection->sentRawData);
|
|
|
|
|
|
|
|
|
|
$this->assertSame([
|
|
|
|
|
'channels' => [
|
2019-05-11 06:52:04 +00:00
|
|
|
'presence-channel' => [],
|
2018-12-04 21:22:33 +00:00
|
|
|
],
|
2018-12-03 09:21:35 +00:00
|
|
|
], json_decode($response->getContent(), true));
|
|
|
|
|
}
|
2018-12-07 19:42:20 +00:00
|
|
|
|
2020-09-10 19:59:26 +00:00
|
|
|
public function test_it_returns_the_channel_information_for_prefix()
|
2018-12-07 19:42:20 +00:00
|
|
|
{
|
2020-09-10 19:59:26 +00:00
|
|
|
$this->newPresenceConnection('presence-global.1');
|
|
|
|
|
$this->newPresenceConnection('presence-global.1');
|
|
|
|
|
$this->newPresenceConnection('presence-global.2');
|
|
|
|
|
$this->newPresenceConnection('presence-notglobal.2');
|
2019-01-02 21:30:57 +00:00
|
|
|
|
2020-09-10 19:59:26 +00:00
|
|
|
$connection = new Mocks\Connection;
|
2018-12-07 19:42:20 +00:00
|
|
|
|
2019-01-02 21:30:57 +00:00
|
|
|
$requestPath = '/apps/1234/channels';
|
2020-09-10 19:59:26 +00:00
|
|
|
|
2019-01-02 21:30:57 +00:00
|
|
|
$routeParams = [
|
|
|
|
|
'appId' => '1234',
|
|
|
|
|
];
|
|
|
|
|
|
2022-10-06 11:46:54 +00:00
|
|
|
$queryString = http_build_query(Pusher::build_auth_query_params('TestKey', 'TestSecret', 'GET', $requestPath, [
|
2019-01-02 21:30:57 +00:00
|
|
|
'filter_by_prefix' => 'presence-global',
|
2022-10-06 11:46:54 +00:00
|
|
|
]));
|
2018-12-07 19:42:20 +00:00
|
|
|
|
2019-01-02 21:30:57 +00:00
|
|
|
$request = new Request('GET', "{$requestPath}?{$queryString}&".http_build_query($routeParams));
|
|
|
|
|
|
2020-09-10 19:59:26 +00:00
|
|
|
$controller = app(FetchChannels::class);
|
2019-01-02 21:30:57 +00:00
|
|
|
|
|
|
|
|
$controller->onOpen($connection, $request);
|
|
|
|
|
|
|
|
|
|
/** @var JsonResponse $response */
|
|
|
|
|
$response = array_pop($connection->sentRawData);
|
|
|
|
|
|
2019-05-11 06:52:04 +00:00
|
|
|
$this->assertSame([
|
|
|
|
|
'channels' => [
|
|
|
|
|
'presence-global.1' => [],
|
|
|
|
|
'presence-global.2' => [],
|
|
|
|
|
],
|
|
|
|
|
], json_decode($response->getContent(), true));
|
|
|
|
|
}
|
|
|
|
|
|
2020-09-10 19:59:26 +00:00
|
|
|
public function test_it_returns_the_channel_information_for_prefix_with_user_count()
|
2019-05-11 06:52:04 +00:00
|
|
|
{
|
2020-09-17 11:44:52 +00:00
|
|
|
$this->newPresenceConnection('presence-global.1', ['user_id' => 1]);
|
|
|
|
|
$this->newPresenceConnection('presence-global.1', ['user_id' => 2]);
|
|
|
|
|
$this->newPresenceConnection('presence-global.2', ['user_id' => 3]);
|
|
|
|
|
$this->newPresenceConnection('presence-notglobal.2', ['user_id' => 4]);
|
2020-08-14 16:53:30 +00:00
|
|
|
|
2020-09-10 19:59:26 +00:00
|
|
|
$connection = new Mocks\Connection;
|
2019-05-11 06:52:04 +00:00
|
|
|
|
|
|
|
|
$requestPath = '/apps/1234/channels';
|
2020-09-10 19:59:26 +00:00
|
|
|
|
2019-05-11 06:52:04 +00:00
|
|
|
$routeParams = [
|
|
|
|
|
'appId' => '1234',
|
|
|
|
|
];
|
|
|
|
|
|
2022-10-06 11:46:54 +00:00
|
|
|
$queryString = http_build_query(Pusher::build_auth_query_params('TestKey', 'TestSecret', 'GET', $requestPath, [
|
2019-05-11 06:52:04 +00:00
|
|
|
'filter_by_prefix' => 'presence-global',
|
|
|
|
|
'info' => 'user_count',
|
2022-10-06 11:46:54 +00:00
|
|
|
]));
|
2019-05-11 06:52:04 +00:00
|
|
|
|
|
|
|
|
$request = new Request('GET', "{$requestPath}?{$queryString}&".http_build_query($routeParams));
|
|
|
|
|
|
2020-09-10 19:59:26 +00:00
|
|
|
$controller = app(FetchChannels::class);
|
2019-05-11 06:52:04 +00:00
|
|
|
|
|
|
|
|
$controller->onOpen($connection, $request);
|
|
|
|
|
|
|
|
|
|
/** @var JsonResponse $response */
|
|
|
|
|
$response = array_pop($connection->sentRawData);
|
|
|
|
|
|
2019-01-02 21:30:57 +00:00
|
|
|
$this->assertSame([
|
|
|
|
|
'channels' => [
|
|
|
|
|
'presence-global.1' => [
|
|
|
|
|
'user_count' => 2,
|
|
|
|
|
],
|
|
|
|
|
'presence-global.2' => [
|
|
|
|
|
'user_count' => 1,
|
|
|
|
|
],
|
|
|
|
|
],
|
|
|
|
|
], json_decode($response->getContent(), true));
|
|
|
|
|
}
|
|
|
|
|
|
2020-09-10 19:59:26 +00:00
|
|
|
public function test_can_not_get_non_presence_channel_user_count()
|
2019-05-11 06:52:04 +00:00
|
|
|
{
|
2022-10-06 11:46:54 +00:00
|
|
|
$this->startServer();
|
2019-05-11 06:52:04 +00:00
|
|
|
|
|
|
|
|
$requestPath = '/apps/1234/channels';
|
2020-09-10 19:59:26 +00:00
|
|
|
|
2022-10-06 11:46:54 +00:00
|
|
|
$queryString = http_build_query(Pusher::build_auth_query_params('TestKey', 'TestSecret', 'GET', $requestPath, [
|
2019-05-11 06:52:04 +00:00
|
|
|
'info' => 'user_count',
|
2022-10-06 11:46:54 +00:00
|
|
|
]));
|
2019-05-11 06:52:04 +00:00
|
|
|
|
2022-10-06 11:46:54 +00:00
|
|
|
$response = $this->await($this->browser->get('http://localhost:4000'."{$requestPath}?{$queryString}"));
|
2019-05-11 06:52:04 +00:00
|
|
|
|
2022-10-06 11:46:54 +00:00
|
|
|
$this->assertSame(400, $response->getStatusCode());
|
|
|
|
|
$this->assertSame('{"error":"Request must be limited to presence channels in order to fetch user_count"}', $response->getBody()->getContents());
|
2019-05-11 06:52:04 +00:00
|
|
|
}
|
|
|
|
|
|
2020-09-10 19:59:26 +00:00
|
|
|
public function test_it_returns_empty_object_for_no_channels_found()
|
2019-01-02 21:30:57 +00:00
|
|
|
{
|
2020-09-10 19:59:26 +00:00
|
|
|
$connection = new Mocks\Connection;
|
2018-12-07 19:42:20 +00:00
|
|
|
|
2019-01-02 21:30:57 +00:00
|
|
|
$requestPath = '/apps/1234/channels';
|
2020-09-10 19:59:26 +00:00
|
|
|
|
2019-01-02 21:30:57 +00:00
|
|
|
$routeParams = [
|
|
|
|
|
'appId' => '1234',
|
|
|
|
|
];
|
2018-12-07 19:42:20 +00:00
|
|
|
|
2022-10-06 11:46:54 +00:00
|
|
|
$queryString = http_build_query(Pusher::build_auth_query_params('TestKey', 'TestSecret', 'GET', $requestPath));
|
2018-12-07 19:42:20 +00:00
|
|
|
|
2019-01-02 21:30:57 +00:00
|
|
|
$request = new Request('GET', "{$requestPath}?{$queryString}&".http_build_query($routeParams));
|
2018-12-07 19:42:20 +00:00
|
|
|
|
2020-09-10 19:59:26 +00:00
|
|
|
$controller = app(FetchChannels::class);
|
2018-12-07 19:42:20 +00:00
|
|
|
|
|
|
|
|
$controller->onOpen($connection, $request);
|
|
|
|
|
|
|
|
|
|
/** @var JsonResponse $response */
|
|
|
|
|
$response = array_pop($connection->sentRawData);
|
|
|
|
|
|
|
|
|
|
$this->assertSame('{"channels":{}}', $response->getContent());
|
|
|
|
|
}
|
2018-12-04 21:22:33 +00:00
|
|
|
}
|