Server : nginx/1.20.1
System : Linux iZ2ze9ojcl78uluczwag69Z 4.18.0-240.22.1.el8_3.x86_64 #1 SMP Thu Apr 8 19:01:30 UTC 2021 x86_64
User : www ( 1000)
PHP Version : 7.3.28
Disable Function : passthru,exec,system,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
Directory :  /www/wwwroot/0531yanglao.com/vendor/topthink/framework/tests/
Upload File :
Current Directory [ Writeable ] Root Directory [ Writeable ]


Current File : /www/wwwroot/0531yanglao.com/vendor/topthink/framework/tests/FilesystemTest.php
<?php

namespace think\tests;

use League\Flysystem\Adapter\NullAdapter;
use League\Flysystem\AdapterInterface;
use Mockery as m;
use Mockery\MockInterface;
use org\bovigo\vfs\vfsStream;
use org\bovigo\vfs\vfsStreamDirectory;
use PHPUnit\Framework\TestCase;
use think\App;
use think\Cache;
use think\cache\driver\File;
use think\Config;
use think\Container;
use think\Filesystem;
use think\filesystem\Driver;
use think\filesystem\driver\Local;

class FilesystemTest extends TestCase
{
    /** @var App|MockInterface */
    protected $app;

    /** @var Filesystem */
    protected $filesystem;

    /** @var Config|MockInterface */
    protected $config;

    /** @var vfsStreamDirectory */
    protected $root;

    protected function setUp()
    {
        $this->app = m::mock(App::class)->makePartial();
        Container::setInstance($this->app);
        $this->app->shouldReceive('make')->with(App::class)->andReturn($this->app);
        $this->config = m::mock(Config::class);
        $this->config->shouldReceive('get')->with('filesystem.default', null)->andReturn('local');
        $this->app->shouldReceive('get')->with('config')->andReturn($this->config);
        $this->filesystem = new Filesystem($this->app);

        $this->root = vfsStream::setup('rootDir');
    }

    protected function tearDown(): void
    {
        m::close();
    }

    public function testDisk()
    {
        $this->config->shouldReceive('get')->with('filesystem.disks.local', null)->andReturn([
            'type' => 'local',
            'root' => $this->root->url(),
        ]);

        $this->config->shouldReceive('get')->with('filesystem.disks.foo', null)->andReturn([
            'type' => 'local',
            'root' => $this->root->url(),
        ]);

        $this->assertInstanceOf(Local::class, $this->filesystem->disk());

        $this->assertInstanceOf(Local::class, $this->filesystem->disk('foo'));
    }

    public function testCache()
    {
        $this->config->shouldReceive('get')->with('filesystem.disks.local', null)->andReturn([
            'type'  => 'local',
            'root'  => $this->root->url(),
            'cache' => true,
        ]);

        $this->assertInstanceOf(Local::class, $this->filesystem->disk());

        $this->config->shouldReceive('get')->with('filesystem.disks.cache', null)->andReturn([
            'type'  => NullDriver::class,
            'root'  => $this->root->url(),
            'cache' => [
                'store' => 'flysystem',
            ],
        ]);

        $cache = m::mock(Cache::class);

        $cacheDriver = m::mock(File::class);

        $cache->shouldReceive('store')->once()->with('flysystem')->andReturn($cacheDriver);

        $this->app->shouldReceive('make')->with(Cache::class)->andReturn($cache);

        $cacheDriver->shouldReceive('get')->with('flysystem')->once()->andReturn(null);

        $cacheDriver->shouldReceive('set')->withAnyArgs();

        $this->filesystem->disk('cache')->put('test.txt', 'aa');
    }

    public function testPutFile()
    {
        $root = vfsStream::setup('rootDir', null, [
            'foo.jpg' => 'hello',
        ]);

        $this->config->shouldReceive('get')->with('filesystem.disks.local', null)->andReturn([
            'type'  => NullDriver::class,
            'root'  => $root->url(),
            'cache' => true,
        ]);

        $file = m::mock(\think\File::class);

        $file->shouldReceive('hashName')->with(null)->once()->andReturn('foo.jpg');

        $file->shouldReceive('getRealPath')->once()->andReturn($root->getChild('foo.jpg')->url());

        $this->filesystem->putFile('test', $file);
    }
}

class NullDriver extends Driver
{
    protected function createAdapter(): AdapterInterface
    {
        return new NullAdapter();
    }
}