| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241 | <?phpuse Encore\Admin\Auth\Database\Administrator;use Illuminate\Support\Facades\File;use Tests\Models\Image;use Tests\Models\MultipleImage;class ImageUploadTest extends TestCase{    public function setUp()    {        parent::setUp();        $this->be(Administrator::first(), 'admin');    }    public function testDisableFilter()    {        $this->visit('admin/images')            ->dontSeeElement('input[name=id]');    }    public function testImageUploadPage()    {        $this->visit('admin/images/create')            ->see('Upload image')            ->seeInElement('h3[class=box-title]', 'Create')            ->seeElement('input[name=image1]')            ->seeElement('input[name=image2]')            ->seeElement('input[name=image3]')            ->seeElement('input[name=image4]')            ->seeElement('input[name=image5]')            ->seeElement('input[name=image6]')            ->seeInElement('button[type=reset]', 'Reset')            ->seeInElement('button[type=submit]', 'Submit');    }    protected function uploadImages()    {        return $this->visit('admin/images/create')            ->attach(__DIR__.'/assets/test.jpg', 'image1')            ->attach(__DIR__.'/assets/test.jpg', 'image2')            ->attach(__DIR__.'/assets/test.jpg', 'image3')            ->attach(__DIR__.'/assets/test.jpg', 'image4')            ->attach(__DIR__.'/assets/test.jpg', 'image5')            ->attach(__DIR__.'/assets/test.jpg', 'image6')            ->press('Submit');    }    public function testUploadImage()    {        File::cleanDirectory(public_path('uploads/images'));        $this->uploadImages()            ->seePageIs('admin/images');        $this->assertEquals(Image::count(), 1);        $this->seeInDatabase('test_images', ['image4' => 'images/renamed.jpeg']);        $images = Image::first()->toArray();        foreach (range(1, 6) as $index) {            $this->assertFileExists(public_path('uploads/'.$images['image'.$index]));        }        $this->assertFileExists(public_path('uploads/images/asdasdasdasdasd.jpeg'));        File::cleanDirectory(public_path('uploads/images'));    }    public function testRemoveImage()    {        File::cleanDirectory(public_path('uploads/images'));        $this->uploadImages();        $this->assertEquals($this->fileCountInImageDir(), 6);    }    public function testUpdateImage()    {        File::cleanDirectory(public_path('uploads/images'));        $this->uploadImages();        $old = Image::first();        $this->visit('admin/images/1/edit')            ->see('ID')            ->see('Created At')            ->see('Updated At')            ->seeElement('input[name=image1]')            ->seeElement('input[name=image2]')            ->seeElement('input[name=image3]')            ->seeElement('input[name=image4]')            ->seeElement('input[name=image5]')            ->seeElement('input[name=image6]')            ->seeInElement('button[type=reset]', 'Reset')            ->seeInElement('button[type=submit]', 'Submit');        $this->attach(__DIR__.'/assets/test.jpg', 'image3')            ->attach(__DIR__.'/assets/test.jpg', 'image4')            ->attach(__DIR__.'/assets/test.jpg', 'image5')            ->press('Submit');        $new = Image::first();        $this->assertEquals($old->id, $new->id);        $this->assertEquals($old->image1, $new->image1);        $this->assertEquals($old->image2, $new->image2);        $this->assertEquals($old->image6, $new->image6);        $this->assertNotEquals($old->image3, $new->image3);        $this->assertNotEquals($old->image4, $new->image4);        $this->assertNotEquals($old->image5, $new->image5);        File::cleanDirectory(public_path('uploads/images'));    }    public function testDeleteImages()    {        File::cleanDirectory(public_path('uploads/images'));        $this->uploadImages();        $this->visit('admin/images')            ->seeInElement('td', 1);        $images = Image::first()->toArray();        $this->delete('admin/images/1')            ->dontSeeInDatabase('test_images', ['id' => 1]);        foreach (range(1, 6) as $index) {            $this->assertFileNotExists(public_path('uploads/'.$images['image'.$index]));        }        $this->visit('admin/images')            ->dontSeeInElement('td', 1);    }    public function testBatchDelete()    {        File::cleanDirectory(public_path('uploads/images'));        $this->uploadImages();        $this->uploadImages();        $this->uploadImages();        $this->visit('admin/images')            ->seeInElement('td', 1)            ->seeInElement('td', 2)            ->seeInElement('td', 3);        $this->assertEquals($this->fileCountInImageDir(), 18);        $this->assertEquals(Image::count(), 3);        $this->delete('admin/images/1,2,3');        $this->assertEquals(Image::count(), 0);        $this->visit('admin/images')            ->dontSeeInElement('td', 1)            ->dontSeeInElement('td', 2)            ->dontSeeInElement('td', 3);        $this->assertEquals($this->fileCountInImageDir(), 0);    }    public function testUploadMultipleImage()    {        File::cleanDirectory(public_path('uploads/images'));        $this->visit('admin/multiple-images/create')            ->seeElement('input[type=file][name="pictures[]"][multiple=1]');        $path = __DIR__.'/assets/test.jpg';        $file = new \Illuminate\Http\UploadedFile(            $path, 'test.jpg', 'image/jpeg', filesize($path), null, true        );        $size = rand(10, 20);        $files = ['pictures' => array_pad([], $size, $file)];        $this->call(            'POST', // $method            '/admin/multiple-images', // $action            [], // $parameters            [],            $files        );        $this->assertResponseStatus(302);        $this->assertRedirectedTo('/admin/multiple-images');        $this->assertEquals($this->fileCountInImageDir(), $size);        $pictures = MultipleImage::first()->pictures;        $this->assertCount($size, $pictures);        foreach ($pictures as $picture) {            $this->assertFileExists(public_path('uploads/'.$picture));        }    }    public function testRemoveMultipleFiles()    {        File::cleanDirectory(public_path('uploads/images'));        // upload files        $path = __DIR__.'/assets/test.jpg';        $file = new \Illuminate\Http\UploadedFile(            $path, 'test.jpg', 'image/jpeg', filesize($path), null, true        );        $size = rand(10, 20);        $files = ['pictures' => array_pad([], $size, $file)];        $this->call(            'POST', // $method            '/admin/multiple-images', // $action            [], // $parameters            [],            $files        );        $this->assertEquals($this->fileCountInImageDir(), $size);    }    protected function fileCountInImageDir($dir = 'uploads/images')    {        $file = new FilesystemIterator(public_path($dir), FilesystemIterator::SKIP_DOTS);        return iterator_count($file);    }}
 |