LivewireRequestContextTest.php 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. <?php
  2. namespace Facade\Ignition\Tests\Context;
  3. use Facade\Ignition\Context\LivewireRequestContext;
  4. use Facade\Ignition\Tests\TestCase;
  5. use Facade\Ignition\Tests\TestClasses\FakeLivewireManager;
  6. use Illuminate\Http\Request;
  7. use Illuminate\Support\Facades\Route;
  8. class LivewireRequestContextTest extends TestCase
  9. {
  10. /** @var \Livewire\LivewireManager */
  11. private $livewireManager;
  12. public function setUp(): void
  13. {
  14. parent::setUp();
  15. $this->livewireManager = FakeLivewireManager::setUp();
  16. }
  17. /** @test */
  18. public function it_returns_the_referer_url_and_method()
  19. {
  20. $context = $this->createRequestContext([
  21. 'path' => 'referred',
  22. 'method' => 'GET',
  23. ]);
  24. $request = $context->getRequest();
  25. $this->assertSame('http://localhost/referred', $request['url']);
  26. $this->assertSame('GET', $request['method']);
  27. }
  28. /** @test */
  29. public function it_returns_livewire_component_information()
  30. {
  31. $alias = 'fake-component';
  32. $class = 'fake-class';
  33. $this->livewireManager->fakeAliases[$alias] = $class;
  34. $context = $this->createRequestContext([
  35. 'path' => 'http://localhost/referred',
  36. 'method' => 'GET',
  37. 'id' => $id = uniqid(),
  38. 'name' => $alias,
  39. ]);
  40. $livewire = $context->toArray()['livewire'];
  41. $this->assertSame($id, $livewire['component_id']);
  42. $this->assertSame($alias, $livewire['component_alias']);
  43. $this->assertSame($class, $livewire['component_class']);
  44. }
  45. /** @test */
  46. public function it_returns_livewire_component_information_when_it_does_not_exist()
  47. {
  48. $context = $this->createRequestContext([
  49. 'path' => 'http://localhost/referred',
  50. 'method' => 'GET',
  51. 'id' => $id = uniqid(),
  52. 'name' => $name = 'fake-component',
  53. ]);
  54. $livewire = $context->toArray()['livewire'];
  55. $this->assertSame($id, $livewire['component_id']);
  56. $this->assertSame($name, $livewire['component_alias']);
  57. $this->assertNull($livewire['component_class']);
  58. }
  59. /** @test */
  60. public function it_removes_ids_from_update_payloads()
  61. {
  62. $context = $this->createRequestContext([
  63. 'path' => 'http://localhost/referred',
  64. 'method' => 'GET',
  65. 'id' => $id = uniqid(),
  66. 'name' => $name = 'fake-component',
  67. ], [
  68. [
  69. 'type' => 'callMethod',
  70. 'payload' => [
  71. 'id' => 'remove-me',
  72. 'method' => 'chang',
  73. 'params' => ['a'],
  74. ],
  75. ],
  76. ]);
  77. $livewire = $context->toArray()['livewire'];
  78. $this->assertSame($id, $livewire['component_id']);
  79. $this->assertSame($name, $livewire['component_alias']);
  80. $this->assertNull($livewire['component_class']);
  81. }
  82. /** @test */
  83. public function it_combines_data_into_one_payload()
  84. {
  85. $context = $this->createRequestContext([
  86. 'path' => 'http://localhost/referred',
  87. 'method' => 'GET',
  88. 'id' => uniqid(),
  89. 'name' => 'fake-component',
  90. ], [], [
  91. 'data' => [
  92. 'string' => 'Ruben',
  93. 'array' => ['a', 'b'],
  94. 'modelCollection' => [],
  95. 'model' => [],
  96. 'date' => '2021-11-10T14:20:36+0000',
  97. 'collection' => ['a', 'b'],
  98. 'stringable' => 'Test',
  99. 'wireable' => ['a', 'b'],
  100. ],
  101. 'dataMeta' => [
  102. 'modelCollections' => [
  103. 'modelCollection' => [
  104. 'class' => 'App\\\\Models\\\\User',
  105. 'id' => [1, 2, 3, 4],
  106. 'relations' => [],
  107. 'connection' => 'mysql',
  108. ],
  109. ],
  110. 'models' => [
  111. 'model' => [
  112. 'class' => 'App\\\\Models\\\\User',
  113. 'id' => 1,
  114. 'relations' => [],
  115. 'connection' => 'mysql',
  116. ],
  117. ],
  118. 'dates' => [
  119. 'date' => 'carbonImmutable',
  120. ],
  121. 'collections' => [
  122. 'collection',
  123. ],
  124. 'stringables' => [
  125. 'stringable',
  126. ],
  127. 'wireables' => [
  128. 'wireable',
  129. ],
  130. ],
  131. ]);
  132. $livewire = $context->toArray()['livewire'];
  133. $this->assertEquals([
  134. "string" => "Ruben",
  135. "array" => ['a', 'b'],
  136. "modelCollection" => [
  137. "class" => "App\\\\Models\\\\User",
  138. "id" => [1, 2, 3, 4],
  139. "relations" => [],
  140. "connection" => "mysql",
  141. ],
  142. "model" => [
  143. "class" => "App\\\\Models\\\\User",
  144. "id" => 1,
  145. "relations" => [],
  146. "connection" => "mysql",
  147. ],
  148. "date" => "2021-11-10T14:20:36+0000",
  149. "collection" => ['a', 'b'],
  150. "stringable" => "Test",
  151. "wireable" => ['a', 'b'],
  152. ], $livewire['data']);
  153. }
  154. protected function createRequestContext(array $fingerprint, array $updates = [], array $serverMemo = []): LivewireRequestContext
  155. {
  156. $providedRequest = null;
  157. Route::post('livewire', function (Request $request) use (&$providedRequest) {
  158. $providedRequest = $request;
  159. })->name('livewire.message');
  160. $this->postJson('livewire', [
  161. 'fingerprint' => $fingerprint,
  162. 'serverMemo' => $serverMemo,
  163. 'updates' => $updates,
  164. ]);
  165. return new LivewireRequestContext($providedRequest, $this->livewireManager);
  166. }
  167. }