SystemMediaControllerTest.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. <?php
  2. namespace Tests\Feature;
  3. use App\Http\Controllers\Controller;
  4. use App\Models\SystemMedia;
  5. use App\Models\SystemMediaCategory;
  6. use Illuminate\Http\UploadedFile;
  7. use Tests\AdminTestCase;
  8. use Illuminate\Foundation\Testing\WithFaker;
  9. use Illuminate\Foundation\Testing\RefreshDatabase;
  10. use Tests\Traits\RequestActions;
  11. class SystemMediaControllerTest extends AdminTestCase
  12. {
  13. use RequestActions;
  14. use RefreshDatabase;
  15. protected $resourceName = 'system-media';
  16. protected function setUp(): void
  17. {
  18. parent::setUp();
  19. $this->login();
  20. }
  21. public function testDestroy()
  22. {
  23. $categoryId = factory(SystemMediaCategory::class)->create()->id;
  24. $file = UploadedFile::fake()->image('avatar.jpg', 200, 200);
  25. $this->storeResource(
  26. [
  27. 'file' => $file,
  28. Controller::UPLOAD_FOLDER_FIELD => 'tests',
  29. ],
  30. 'system-media-categories.system-media',
  31. ['id' => $categoryId]
  32. );
  33. $mediaId1 = $this->getLastInsertId('system_media');
  34. $path = Controller::UPLOAD_FOLDER_PREFIX.'/tests/'.md5_file($file).'.jpg';
  35. $this->assertTrue($this->storage->exists($path));
  36. // 复制一条记录
  37. $mediaId2 = factory(SystemMedia::class)
  38. ->create(tap(SystemMedia::first())->addHidden(['id'])->toArray())
  39. ->id;
  40. $res = $this->destroyResource($mediaId1);
  41. $res->assertStatus(204);
  42. // 有重复文件记录,所以不需要删除物理文件
  43. $this->assertTrue($this->storage->exists($path));
  44. $this->assertDatabaseMissing('system_media', [
  45. 'id' => $mediaId1,
  46. ]);
  47. $res = $this->destroyResource($mediaId2);
  48. $res->assertStatus(204);
  49. // 没有重复文件记录,删除物理文件
  50. $this->assertNotTrue($this->storage->exists($path));
  51. $this->assertDatabaseMissing('system_media', [
  52. 'id' => $mediaId2,
  53. ]);
  54. }
  55. public function testEdit()
  56. {
  57. $media = factory(SystemMedia::class)->create();
  58. $id = $media->id;
  59. $res = $this->editResource($id);
  60. $res->assertStatus(200)
  61. ->assertJsonFragment([
  62. 'id' => $id,
  63. 'category_id' => 0,
  64. ]);
  65. }
  66. public function testUpdate()
  67. {
  68. $categoryId = factory(SystemMediaCategory::class)->create()->id;
  69. $mediaId = factory(SystemMedia::class)->create()->id;
  70. // category_id exists
  71. $res = $this->updateResource($mediaId, [
  72. 'category_id' => 999,
  73. ]);
  74. $res->assertJsonValidationErrors(['category_id']);
  75. $res = $this->updateResource($mediaId, [
  76. 'category_id' => $categoryId,
  77. ]);
  78. $res->assertStatus(201);
  79. $this->assertDatabaseHas('system_media', [
  80. 'id' => $mediaId,
  81. 'category_id' => $categoryId,
  82. ]);
  83. }
  84. public function testBatchUpdate()
  85. {
  86. $categoryId = factory(SystemMediaCategory::class)->create()->id;
  87. $mediaIds = factory(SystemMedia::class, 2)->create()->pluck('id')->toArray();
  88. $res = $this->put(route('admin.system-media.batch.update'), [
  89. 'category_id' => $categoryId,
  90. 'id' => $mediaIds,
  91. ]);
  92. $res->assertStatus(201);
  93. $this->assertDatabaseHas('system_media', [
  94. 'id' => $mediaIds[0],
  95. 'category_id' => $categoryId,
  96. ]);
  97. $this->assertDatabaseHas('system_media', [
  98. 'id' => $mediaIds[1],
  99. 'category_id' => $categoryId,
  100. ]);
  101. }
  102. public function testBatchDestroy()
  103. {
  104. factory(SystemMedia::class, 2)->create();
  105. $res = $this->delete(route('admin.system-media.batch.destroy'), [
  106. 'id' => [1, 2],
  107. ]);
  108. $res->assertStatus(204);
  109. $this->assertDatabaseMissing('system_media', ['id' => 1]);
  110. $this->assertDatabaseMissing('system_media', ['id' => 2]);
  111. }
  112. }