AblyBroadcasterTest.php 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. <?php
  2. namespace Illuminate\Tests\Broadcasting;
  3. use Illuminate\Broadcasting\Broadcasters\AblyBroadcaster;
  4. use Illuminate\Http\Request;
  5. use Mockery as m;
  6. use PHPUnit\Framework\TestCase;
  7. use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
  8. class AblyBroadcasterTest extends TestCase
  9. {
  10. /**
  11. * @var \Illuminate\Broadcasting\Broadcasters\AblyBroadcaster
  12. */
  13. public $broadcaster;
  14. public $ably;
  15. protected function setUp(): void
  16. {
  17. parent::setUp();
  18. $this->ably = m::mock('Ably\AblyRest');
  19. $this->ably->options = (object) ['key' => 'abcd:efgh'];
  20. $this->broadcaster = m::mock(AblyBroadcaster::class, [$this->ably])->makePartial();
  21. }
  22. public function testAuthCallValidAuthenticationResponseWithPrivateChannelWhenCallbackReturnTrue()
  23. {
  24. $this->broadcaster->channel('test', function () {
  25. return true;
  26. });
  27. $this->broadcaster->shouldReceive('validAuthenticationResponse')
  28. ->once();
  29. $this->broadcaster->auth(
  30. $this->getMockRequestWithUserForChannel('private-test')
  31. );
  32. }
  33. public function testAuthThrowAccessDeniedHttpExceptionWithPrivateChannelWhenCallbackReturnFalse()
  34. {
  35. $this->expectException(AccessDeniedHttpException::class);
  36. $this->broadcaster->channel('test', function () {
  37. return false;
  38. });
  39. $this->broadcaster->auth(
  40. $this->getMockRequestWithUserForChannel('private-test')
  41. );
  42. }
  43. public function testAuthThrowAccessDeniedHttpExceptionWithPrivateChannelWhenRequestUserNotFound()
  44. {
  45. $this->expectException(AccessDeniedHttpException::class);
  46. $this->broadcaster->channel('test', function () {
  47. return true;
  48. });
  49. $this->broadcaster->auth(
  50. $this->getMockRequestWithoutUserForChannel('private-test')
  51. );
  52. }
  53. public function testAuthCallValidAuthenticationResponseWithPresenceChannelWhenCallbackReturnAnArray()
  54. {
  55. $returnData = [1, 2, 3, 4];
  56. $this->broadcaster->channel('test', function () use ($returnData) {
  57. return $returnData;
  58. });
  59. $this->broadcaster->shouldReceive('validAuthenticationResponse')
  60. ->once();
  61. $this->broadcaster->auth(
  62. $this->getMockRequestWithUserForChannel('presence-test')
  63. );
  64. }
  65. public function testAuthThrowAccessDeniedHttpExceptionWithPresenceChannelWhenCallbackReturnNull()
  66. {
  67. $this->expectException(AccessDeniedHttpException::class);
  68. $this->broadcaster->channel('test', function () {
  69. //
  70. });
  71. $this->broadcaster->auth(
  72. $this->getMockRequestWithUserForChannel('presence-test')
  73. );
  74. }
  75. public function testAuthThrowAccessDeniedHttpExceptionWithPresenceChannelWhenRequestUserNotFound()
  76. {
  77. $this->expectException(AccessDeniedHttpException::class);
  78. $this->broadcaster->channel('test', function () {
  79. return [1, 2, 3, 4];
  80. });
  81. $this->broadcaster->auth(
  82. $this->getMockRequestWithoutUserForChannel('presence-test')
  83. );
  84. }
  85. /**
  86. * @param string $channel
  87. * @return \Illuminate\Http\Request
  88. */
  89. protected function getMockRequestWithUserForChannel($channel)
  90. {
  91. $request = m::mock(Request::class);
  92. $request->channel_name = $channel;
  93. $request->socket_id = 'abcd.1234';
  94. $request->shouldReceive('input')
  95. ->with('callback', false)
  96. ->andReturn(false);
  97. $user = m::mock('User');
  98. $user->shouldReceive('getAuthIdentifierForBroadcasting')
  99. ->andReturn(42);
  100. $user->shouldReceive('getAuthIdentifier')
  101. ->andReturn(42);
  102. $request->shouldReceive('user')
  103. ->andReturn($user);
  104. return $request;
  105. }
  106. /**
  107. * @param string $channel
  108. * @return \Illuminate\Http\Request
  109. */
  110. protected function getMockRequestWithoutUserForChannel($channel)
  111. {
  112. $request = m::mock(Request::class);
  113. $request->channel_name = $channel;
  114. $request->shouldReceive('user')
  115. ->andReturn(null);
  116. return $request;
  117. }
  118. }