FileUploadTest.php 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. <?php
  2. use Encore\Admin\Auth\Database\Administrator;
  3. use Illuminate\Support\Facades\File;
  4. use Tests\Models\File as FileModel;
  5. class FileUploadTest extends TestCase
  6. {
  7. public function setUp()
  8. {
  9. parent::setUp();
  10. $this->be(Administrator::first(), 'admin');
  11. }
  12. public function testFileUploadPage()
  13. {
  14. $this->visit('admin/files/create')
  15. ->see('Upload file')
  16. ->seeInElement('h3[class=box-title]', 'Create')
  17. ->seeElement('input[name=file1]')
  18. ->seeElement('input[name=file2]')
  19. ->seeElement('input[name=file3]')
  20. ->seeElement('input[name=file4]')
  21. ->seeElement('input[name=file5]')
  22. ->seeElement('input[name=file6]')
  23. // ->seeInElement('a[href="/admin/files"]', 'List')
  24. ->seeInElement('button[type=reset]', 'Reset')
  25. ->seeInElement('button[type=submit]', 'Submit');
  26. }
  27. protected function uploadFiles()
  28. {
  29. return $this->visit('admin/files/create')
  30. ->attach(__DIR__.'/AuthTest.php', 'file1')
  31. ->attach(__DIR__.'/InstallTest.php', 'file2')
  32. ->attach(__DIR__.'/IndexTest.php', 'file3')
  33. ->attach(__DIR__.'/LaravelTest.php', 'file4')
  34. ->attach(__DIR__.'/routes.php', 'file5')
  35. ->attach(__DIR__.'/migrations/2016_11_22_093148_create_test_tables.php', 'file6')
  36. ->press('Submit');
  37. }
  38. public function testUploadFile()
  39. {
  40. File::cleanDirectory(public_path('uploads/files'));
  41. $this->uploadFiles()
  42. ->seePageIs('admin/files');
  43. $this->assertEquals(FileModel::count(), 1);
  44. $where = [
  45. 'file1' => 'files/AuthTest.php',
  46. 'file2' => 'files/InstallTest.php',
  47. 'file3' => 'files/IndexTest.php',
  48. 'file4' => 'files/LaravelTest.php',
  49. 'file5' => 'files/routes.php',
  50. 'file6' => 'files/2016_11_22_093148_create_test_tables.php',
  51. ];
  52. $this->seeInDatabase('test_files', $where);
  53. $files = FileModel::first()->toArray();
  54. foreach (range(1, 6) as $index) {
  55. $this->assertFileExists(public_path('uploads/'.$files['file'.$index]));
  56. }
  57. File::cleanDirectory(public_path('uploads/files'));
  58. }
  59. public function testUpdateFile()
  60. {
  61. File::cleanDirectory(public_path('uploads/files'));
  62. $this->uploadFiles();
  63. $old = FileModel::first();
  64. $this->visit('admin/files/1/edit')
  65. ->see('ID')
  66. ->see('Created At')
  67. ->see('Updated At')
  68. ->seeElement('input[name=file1]')
  69. ->seeElement('input[name=file2]')
  70. ->seeElement('input[name=file3]')
  71. ->seeElement('input[name=file4]')
  72. ->seeElement('input[name=file5]')
  73. ->seeElement('input[name=file6]')
  74. // ->seeInElement('a[href="/admin/files"]', 'List')
  75. ->seeInElement('button[type=reset]', 'Reset')
  76. ->seeInElement('button[type=submit]', 'Submit');
  77. $this->attach(__DIR__.'/RolesTest.php', 'file3')
  78. ->attach(__DIR__.'/MenuTest.php', 'file4')
  79. ->attach(__DIR__.'/TestCase.php', 'file5')
  80. ->press('Submit');
  81. $new = FileModel::first();
  82. $this->assertEquals($old->id, $new->id);
  83. $this->assertEquals($old->file1, $new->file1);
  84. $this->assertEquals($old->file2, $new->file2);
  85. $this->assertEquals($old->file6, $new->file6);
  86. $this->assertNotEquals($old->file3, $new->file3);
  87. $this->assertNotEquals($old->file4, $new->file4);
  88. $this->assertNotEquals($old->file5, $new->file5);
  89. File::cleanDirectory(public_path('uploads/files'));
  90. }
  91. public function testDeleteFiles()
  92. {
  93. File::cleanDirectory(public_path('uploads/files'));
  94. $this->uploadFiles();
  95. $this->visit('admin/files')
  96. ->seeInElement('td', 1);
  97. $files = FileModel::first()->toArray();
  98. $this->delete('admin/files/1')
  99. ->dontSeeInDatabase('test_files', ['id' => 1]);
  100. foreach (range(1, 6) as $index) {
  101. $this->assertFileNotExists(public_path('uploads/'.$files['file'.$index]));
  102. }
  103. $this->visit('admin/files')
  104. ->seeInElement('td', 'svg');
  105. }
  106. public function testBatchDelete()
  107. {
  108. File::cleanDirectory(public_path('uploads/files'));
  109. $this->uploadFiles();
  110. $this->uploadFiles();
  111. $this->uploadFiles();
  112. $this->visit('admin/files')
  113. ->seeInElement('td', 1)
  114. ->seeInElement('td', 2)
  115. ->seeInElement('td', 3);
  116. $fi = new FilesystemIterator(public_path('uploads/files'), FilesystemIterator::SKIP_DOTS);
  117. $this->assertEquals(iterator_count($fi), 18);
  118. $this->assertEquals(FileModel::count(), 3);
  119. $this->delete('admin/files/1,2,3');
  120. $this->assertEquals(FileModel::count(), 0);
  121. $this->visit('admin/files')
  122. ->seeInElement('td', 'svg');
  123. $this->assertEquals(iterator_count($fi), 0);
  124. }
  125. }