laravel-websockets/tests/FetchChannelsTest.php

197 lines
5.9 KiB
PHP
Raw Normal View History

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;
2020-03-04 09:58:39 +00:00
use Pusher\Pusher;
2018-12-03 09:21:35 +00:00
use Symfony\Component\HttpKernel\Exception\HttpException;
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
{
$this->expectException(HttpException::class);
$this->expectExceptionMessage('Invalid auth signature provided.');
2020-09-10 19:59:26 +00:00
$connection = new Mocks\Connection;
2018-12-03 09:21:35 +00:00
$requestPath = '/apps/1234/channels';
2020-09-10 19:59:26 +00:00
$routeParams = [
'appId' => '1234',
];
2018-12-03 09:21:35 +00:00
2020-09-10 19:59:26 +00:00
$queryString = Pusher::build_auth_query_string(
'TestKey', 'InvalidSecret', 'GET', $requestPath
);
2018-12-03 09:21:35 +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);
}
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
$requestPath = '/apps/1234/channels';
2020-09-10 19:59:26 +00:00
$routeParams = [
'appId' => '1234',
];
2018-12-03 09:21:35 +00:00
2020-09-10 19:59:26 +00:00
$queryString = Pusher::build_auth_query_string(
'TestKey', 'TestSecret', 'GET', $requestPath
);
2018-12-03 09:21:35 +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' => [
'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');
2020-09-10 19:59:26 +00:00
$connection = new Mocks\Connection;
2018-12-07 19:42:20 +00:00
$requestPath = '/apps/1234/channels';
2020-09-10 19:59:26 +00:00
$routeParams = [
'appId' => '1234',
];
$queryString = Pusher::build_auth_query_string('TestKey', 'TestSecret', 'GET', $requestPath, [
'filter_by_prefix' => 'presence-global',
]);
2018-12-07 19:42:20 +00:00
$request = new Request('GET', "{$requestPath}?{$queryString}&".http_build_query($routeParams));
2020-09-10 19:59:26 +00:00
$controller = app(FetchChannels::class);
$controller->onOpen($connection, $request);
/** @var JsonResponse $response */
$response = array_pop($connection->sentRawData);
$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()
{
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');
2020-08-14 16:53:30 +00:00
2020-09-10 19:59:26 +00:00
$connection = new Mocks\Connection;
$requestPath = '/apps/1234/channels';
2020-09-10 19:59:26 +00:00
$routeParams = [
'appId' => '1234',
];
$queryString = Pusher::build_auth_query_string('TestKey', 'TestSecret', 'GET', $requestPath, [
'filter_by_prefix' => 'presence-global',
'info' => 'user_count',
]);
$request = new Request('GET', "{$requestPath}?{$queryString}&".http_build_query($routeParams));
2020-09-10 19:59:26 +00:00
$controller = app(FetchChannels::class);
$controller->onOpen($connection, $request);
/** @var JsonResponse $response */
$response = array_pop($connection->sentRawData);
$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()
{
$this->expectException(HttpException::class);
$this->expectExceptionMessage('Request must be limited to presence channels in order to fetch user_count');
2020-09-10 19:59:26 +00:00
$connection = new Mocks\Connection;
$requestPath = '/apps/1234/channels';
2020-09-10 19:59:26 +00:00
$routeParams = [
'appId' => '1234',
];
$queryString = Pusher::build_auth_query_string('TestKey', 'TestSecret', 'GET', $requestPath, [
'info' => 'user_count',
]);
$request = new Request('GET', "{$requestPath}?{$queryString}&".http_build_query($routeParams));
2020-09-10 19:59:26 +00:00
$controller = app(FetchChannels::class);
$controller->onOpen($connection, $request);
/** @var JsonResponse $response */
$response = array_pop($connection->sentRawData);
}
2020-09-10 19:59:26 +00:00
public function test_it_returns_empty_object_for_no_channels_found()
{
2020-09-10 19:59:26 +00:00
$connection = new Mocks\Connection;
2018-12-07 19:42:20 +00:00
$requestPath = '/apps/1234/channels';
2020-09-10 19:59:26 +00:00
$routeParams = [
'appId' => '1234',
];
2018-12-07 19:42:20 +00:00
$queryString = Pusher::build_auth_query_string('TestKey', 'TestSecret', 'GET', $requestPath);
2018-12-07 19:42:20 +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
}