TestHookTest.php 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. <?php
  2. namespace App\Module\Game\Tests;
  3. use App\Module\Game\Hooks\TestHook;
  4. use App\Module\Game\Models\Test;
  5. use Illuminate\Foundation\Testing\DatabaseTransactions;
  6. use Tests\TestCase;
  7. class TestHookTest extends TestCase
  8. {
  9. use DatabaseTransactions;
  10. protected TestHook $hook;
  11. public function setUp(): void
  12. {
  13. parent::setUp();
  14. $this->hook = app(TestHook::class);
  15. }
  16. /**
  17. * 测试创建并通知
  18. *
  19. * @return void
  20. */
  21. public function test_create_and_notify(): void
  22. {
  23. $data = [
  24. 'name' => '测试数据',
  25. 'code' => 'TEST001',
  26. 'description' => '测试描述'
  27. ];
  28. $result = $this->hook->createAndNotify($data);
  29. $this->assertIsArray($result);
  30. $this->assertEquals('测试数据创建成功', $result['title']);
  31. $this->assertStringContainsString($data['name'], $result['content']);
  32. $this->assertStringContainsString($data['code'], $result['content']);
  33. $this->assertArrayHasKey('test_id', $result['data']);
  34. $this->assertEquals($data['name'], $result['data']['name']);
  35. $this->assertEquals($data['code'], $result['data']['code']);
  36. // 验证数据是否真的创建了
  37. $test = Test::find($result['data']['test_id']);
  38. $this->assertNotNull($test);
  39. $this->assertEquals($data['name'], $test->name);
  40. $this->assertEquals($data['code'], $test->code);
  41. }
  42. /**
  43. * 测试更新并通知
  44. *
  45. * @return void
  46. */
  47. public function test_update_and_notify(): void
  48. {
  49. // 创建测试数据
  50. $test = Test::factory()->create();
  51. $data = [
  52. 'name' => '更新数据',
  53. 'code' => 'TEST002'
  54. ];
  55. $result = $this->hook->updateAndNotify($test->id, $data);
  56. $this->assertIsArray($result);
  57. $this->assertEquals('测试数据更新成功', $result['title']);
  58. $this->assertStringContainsString($data['name'], $result['content']);
  59. $this->assertStringContainsString($data['code'], $result['content']);
  60. $this->assertEquals($test->id, $result['data']['test_id']);
  61. $this->assertEquals($data['name'], $result['data']['name']);
  62. $this->assertEquals($data['code'], $result['data']['code']);
  63. // 验证数据是否真的更新了
  64. $test->refresh();
  65. $this->assertEquals($data['name'], $test->name);
  66. $this->assertEquals($data['code'], $test->code);
  67. }
  68. /**
  69. * 测试更新不存在的数据
  70. *
  71. * @return void
  72. */
  73. public function test_update_non_existent(): void
  74. {
  75. $result = $this->hook->updateAndNotify(999, [
  76. 'name' => '更新数据',
  77. 'code' => 'TEST002'
  78. ]);
  79. $this->assertNull($result);
  80. }
  81. /**
  82. * 测试删除并通知
  83. *
  84. * @return void
  85. */
  86. public function test_delete_and_notify(): void
  87. {
  88. // 创建测试数据
  89. $test = Test::factory()->create();
  90. $result = $this->hook->deleteAndNotify($test->id);
  91. $this->assertIsArray($result);
  92. $this->assertEquals('测试数据删除成功', $result['title']);
  93. $this->assertStringContainsString($test->name, $result['content']);
  94. $this->assertStringContainsString($test->code, $result['content']);
  95. $this->assertEquals($test->id, $result['data']['test_id']);
  96. $this->assertEquals($test->name, $result['data']['name']);
  97. $this->assertEquals($test->code, $result['data']['code']);
  98. // 验证数据是否真的删除了
  99. $this->assertNull(Test::find($test->id));
  100. }
  101. /**
  102. * 测试删除不存在的数据
  103. *
  104. * @return void
  105. */
  106. public function test_delete_non_existent(): void
  107. {
  108. $result = $this->hook->deleteAndNotify(999);
  109. $this->assertNull($result);
  110. }
  111. }