TestEventTest.php 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. <?php
  2. namespace App\Module\Game\Tests;
  3. use App\Module\Game\Events\TestEvent;
  4. use App\Module\Game\Models\Test;
  5. use App\Module\Game\Test as TestService;
  6. use Illuminate\Foundation\Testing\DatabaseTransactions;
  7. use Illuminate\Support\Facades\Event;
  8. use Tests\TestCase;
  9. class TestEventTest extends TestCase
  10. {
  11. use DatabaseTransactions;
  12. protected TestService $service;
  13. protected function setUp(): void
  14. {
  15. parent::setUp();
  16. $this->service = new TestService();
  17. }
  18. /**
  19. * 测试创建事件
  20. */
  21. public function test_created_event(): void
  22. {
  23. Event::fake();
  24. // 创建测试数据
  25. $test = $this->service->create([
  26. 'name' => '测试数据1',
  27. 'code' => 'TEST001',
  28. 'description' => '这是一个测试数据',
  29. 'data' => ['key' => 'value'],
  30. 'status' => 1
  31. ]);
  32. // 断言事件被触发
  33. Event::assertDispatched(TestEvent::class, function ($event) use ($test) {
  34. return $event->test->id === $test->id
  35. && $event->type === 'created'
  36. && $event->test->name === '测试数据1'
  37. && $event->test->code === 'TEST001'
  38. && $event->test->status === 1;
  39. });
  40. }
  41. /**
  42. * 测试更新事件
  43. */
  44. public function test_updated_event(): void
  45. {
  46. Event::fake();
  47. // 创建测试数据
  48. $test = $this->service->create([
  49. 'name' => '原始数据',
  50. 'code' => 'TEST002',
  51. 'status' => 1
  52. ]);
  53. // 更新数据
  54. $this->service->update($test, [
  55. 'name' => '更新后的数据',
  56. 'status' => 2
  57. ]);
  58. // 断言事件被触发
  59. Event::assertDispatched(TestEvent::class, function ($event) use ($test) {
  60. return $event->test->id === $test->id
  61. && $event->type === 'updated'
  62. && $event->test->name === '更新后的数据'
  63. && $event->test->status === 2;
  64. });
  65. }
  66. /**
  67. * 测试软删除事件
  68. */
  69. public function test_deleted_event(): void
  70. {
  71. Event::fake();
  72. // 创建测试数据
  73. $test = $this->service->create([
  74. 'name' => '待删除数据',
  75. 'code' => 'TEST003',
  76. 'status' => 1
  77. ]);
  78. // 软删除数据
  79. $this->service->delete($test);
  80. // 断言事件被触发
  81. Event::assertDispatched(TestEvent::class, function ($event) use ($test) {
  82. return $event->test->id === $test->id
  83. && $event->type === 'deleted'
  84. && $event->test->name === '待删除数据'
  85. && $event->test->trashed();
  86. });
  87. }
  88. /**
  89. * 测试恢复事件
  90. */
  91. public function test_restored_event(): void
  92. {
  93. Event::fake();
  94. // 创建并软删除测试数据
  95. $test = $this->service->create([
  96. 'name' => '待恢复数据',
  97. 'code' => 'TEST004',
  98. 'status' => 1
  99. ]);
  100. $this->service->delete($test);
  101. // 恢复数据
  102. $this->service->restore($test);
  103. // 断言事件被触发
  104. Event::assertDispatched(TestEvent::class, function ($event) use ($test) {
  105. return $event->test->id === $test->id
  106. && $event->type === 'restored'
  107. && $event->test->name === '待恢复数据'
  108. && !$event->test->trashed();
  109. });
  110. }
  111. /**
  112. * 测试强制删除事件
  113. */
  114. public function test_force_deleted_event(): void
  115. {
  116. Event::fake();
  117. // 创建测试数据
  118. $test = $this->service->create([
  119. 'name' => '待强制删除数据',
  120. 'code' => 'TEST005',
  121. 'status' => 1
  122. ]);
  123. // 强制删除数据
  124. $this->service->forceDelete($test);
  125. // 断言事件被触发
  126. Event::assertDispatched(TestEvent::class, function ($event) use ($test) {
  127. return $event->test->id === $test->id
  128. && $event->type === 'force_deleted'
  129. && $event->test->name === '待强制删除数据';
  130. });
  131. }
  132. /**
  133. * 测试事件未被触发
  134. */
  135. public function test_event_not_dispatched(): void
  136. {
  137. Event::fake();
  138. // 断言事件未被触发
  139. Event::assertNotDispatched(TestEvent::class);
  140. }
  141. }