256 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			256 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
| <?php
 | |
| 
 | |
| use League\Flysystem\Cached\Storage\Memory;
 | |
| use League\Flysystem\Util;
 | |
| use PHPUnit\Framework\TestCase;
 | |
| 
 | |
| class MemoryCacheTests extends TestCase
 | |
| {
 | |
|     public function testAutosave()
 | |
|     {
 | |
|         $cache = new Memory();
 | |
|         $cache->setAutosave(true);
 | |
|         $this->assertTrue($cache->getAutosave());
 | |
|         $cache->setAutosave(false);
 | |
|         $this->assertFalse($cache->getAutosave());
 | |
|     }
 | |
| 
 | |
|     public function testCacheMiss()
 | |
|     {
 | |
|         $cache = new Memory();
 | |
|         $cache->storeMiss('path.txt');
 | |
|         $this->assertFalse($cache->has('path.txt'));
 | |
|     }
 | |
| 
 | |
|     public function testIsComplete()
 | |
|     {
 | |
|         $cache = new Memory();
 | |
|         $this->assertFalse($cache->isComplete('dirname', false));
 | |
|         $cache->setComplete('dirname', false);
 | |
|         $this->assertFalse($cache->isComplete('dirname', true));
 | |
|         $cache->setComplete('dirname', true);
 | |
|         $this->assertTrue($cache->isComplete('dirname', true));
 | |
|     }
 | |
| 
 | |
|     public function testCleanContents()
 | |
|     {
 | |
|         $cache = new Memory();
 | |
|         $input = [[
 | |
|             'path'       => 'path.txt',
 | |
|             'visibility' => 'public',
 | |
|             'invalid'    => 'thing',
 | |
|         ]];
 | |
| 
 | |
|         $expected = [[
 | |
|             'path'       => 'path.txt',
 | |
|             'visibility' => 'public',
 | |
|         ]];
 | |
| 
 | |
|         $output = $cache->cleanContents($input);
 | |
|         $this->assertEquals($expected, $output);
 | |
|     }
 | |
| 
 | |
|     public function testGetForStorage()
 | |
|     {
 | |
|         $cache = new Memory();
 | |
|         $input = [[
 | |
|             'path'       => 'path.txt',
 | |
|             'visibility' => 'public',
 | |
|             'type'       => 'file',
 | |
|         ]];
 | |
| 
 | |
|         $cache->storeContents('', $input, true);
 | |
|         $contents = $cache->listContents('', true);
 | |
|         $cached = [];
 | |
|         foreach ($contents as $item) {
 | |
|             $cached[$item['path']] = $item;
 | |
|         }
 | |
| 
 | |
|         $this->assertEquals(json_encode([$cached, ['' => 'recursive']]), $cache->getForStorage());
 | |
|     }
 | |
| 
 | |
|     public function testParentCompleteIsUsedDuringHas()
 | |
|     {
 | |
|         $cache = new Memory();
 | |
|         $cache->setComplete('dirname', false);
 | |
|         $this->assertFalse($cache->has('dirname/path.txt'));
 | |
|     }
 | |
| 
 | |
|     public function testFlush()
 | |
|     {
 | |
|         $cache = new Memory();
 | |
|         $cache->setComplete('dirname', true);
 | |
|         $cache->updateObject('path.txt', [
 | |
|             'path'       => 'path.txt',
 | |
|             'visibility' => 'public',
 | |
|         ]);
 | |
|         $cache->flush();
 | |
|         $this->assertFalse($cache->isComplete('dirname', true));
 | |
|         $this->assertNull($cache->has('path.txt'));
 | |
|     }
 | |
| 
 | |
|     public function testSetFromStorage()
 | |
|     {
 | |
|         $cache = new Memory();
 | |
|         $json = [[
 | |
|             'path.txt' => ['path' => 'path.txt', 'type' => 'file'],
 | |
|         ], ['dirname' => 'recursive']];
 | |
|         $jsonString = json_encode($json);
 | |
|         $cache->setFromStorage($jsonString);
 | |
|         $this->assertTrue($cache->has('path.txt'));
 | |
|         $this->assertTrue($cache->isComplete('dirname', true));
 | |
|     }
 | |
| 
 | |
|     public function testGetMetadataFail()
 | |
|     {
 | |
|         $cache = new Memory();
 | |
|         $this->assertFalse($cache->getMetadata('path.txt'));
 | |
|     }
 | |
| 
 | |
|     public function metaGetterProvider()
 | |
|     {
 | |
|         return [
 | |
|             ['getTimestamp', 'timestamp', 12344],
 | |
|             ['getMimetype', 'mimetype', 'text/plain'],
 | |
|             ['getSize', 'size', 12],
 | |
|             ['getVisibility', 'visibility', 'private'],
 | |
|             ['read', 'contents', '__contents__'],
 | |
|         ];
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @dataProvider metaGetterProvider
 | |
|      *
 | |
|      * @param $method
 | |
|      * @param $key
 | |
|      * @param $value
 | |
|      */
 | |
|     public function testMetaGetters($method, $key, $value)
 | |
|     {
 | |
|         $cache = new Memory();
 | |
|         $this->assertFalse($cache->{$method}('path.txt'));
 | |
|         $cache->updateObject('path.txt', $object = [
 | |
|                 'path' => 'path.txt',
 | |
|                 'type' => 'file',
 | |
|                 $key   => $value,
 | |
|             ] + Util::pathinfo('path.txt'), true);
 | |
|         $this->assertEquals($object, $cache->{$method}('path.txt'));
 | |
|         $this->assertEquals($object, $cache->getMetadata('path.txt'));
 | |
|     }
 | |
| 
 | |
|     public function testGetDerivedMimetype()
 | |
|     {
 | |
|         $cache = new Memory();
 | |
|         $cache->updateObject('path.txt', [
 | |
|             'contents' => 'something',
 | |
|         ]);
 | |
|         $response = $cache->getMimetype('path.txt');
 | |
|         $this->assertEquals('text/plain', $response['mimetype']);
 | |
|     }
 | |
| 
 | |
|     public function testCopyFail()
 | |
|     {
 | |
|         $cache = new Memory();
 | |
|         $cache->copy('one', 'two');
 | |
|         $this->assertNull($cache->has('two'));
 | |
|         $this->assertNull($cache->load());
 | |
|     }
 | |
| 
 | |
|     public function testStoreContents()
 | |
|     {
 | |
|         $cache = new Memory();
 | |
|         $cache->storeContents('dirname', [
 | |
|             ['path' => 'dirname', 'type' => 'dir'],
 | |
|             ['path' => 'dirname/nested', 'type' => 'dir'],
 | |
|             ['path' => 'dirname/nested/deep', 'type' => 'dir'],
 | |
|             ['path' => 'other/nested/deep', 'type' => 'dir'],
 | |
|         ], true);
 | |
| 
 | |
|         $this->isTrue($cache->isComplete('other/nested', true));
 | |
|     }
 | |
| 
 | |
|     public function testDelete()
 | |
|     {
 | |
|         $cache = new Memory();
 | |
|         $cache->updateObject('path.txt', ['type' => 'file']);
 | |
|         $this->assertTrue($cache->has('path.txt'));
 | |
|         $cache->delete('path.txt');
 | |
|         $this->assertFalse($cache->has('path.txt'));
 | |
|     }
 | |
| 
 | |
|     public function testDeleteDir()
 | |
|     {
 | |
|         $cache = new Memory();
 | |
|         $cache->storeContents('dirname', [
 | |
|             ['path' => 'dirname/path.txt', 'type' => 'file'],
 | |
|         ]);
 | |
|         $this->assertTrue($cache->isComplete('dirname', false));
 | |
|         $this->assertTrue($cache->has('dirname/path.txt'));
 | |
|         $cache->deleteDir('dirname');
 | |
|         $this->assertFalse($cache->isComplete('dirname', false));
 | |
|         $this->assertNull($cache->has('dirname/path.txt'));
 | |
|     }
 | |
| 
 | |
|     public function testReadStream()
 | |
|     {
 | |
|         $cache = new Memory();
 | |
|         $this->assertFalse($cache->readStream('path.txt'));
 | |
|     }
 | |
| 
 | |
|     public function testRename()
 | |
|     {
 | |
|         $cache = new Memory();
 | |
|         $cache->updateObject('path.txt', ['type' => 'file']);
 | |
|         $cache->rename('path.txt', 'newpath.txt');
 | |
|         $this->assertTrue($cache->has('newpath.txt'));
 | |
|     }
 | |
| 
 | |
|     public function testCopy()
 | |
|     {
 | |
|         $cache = new Memory();
 | |
|         $cache->updateObject('path.txt', ['type' => 'file']);
 | |
|         $cache->copy('path.txt', 'newpath.txt');
 | |
|         $this->assertTrue($cache->has('newpath.txt'));
 | |
|     }
 | |
| 
 | |
|     public function testComplextListContents()
 | |
|     {
 | |
|         $cache = new Memory();
 | |
|         $cache->storeContents('', [
 | |
|             ['path' => 'dirname', 'type' => 'dir'],
 | |
|             ['path' => 'dirname/file.txt', 'type' => 'file'],
 | |
|             ['path' => 'other', 'type' => 'dir'],
 | |
|             ['path' => 'other/file.txt', 'type' => 'file'],
 | |
|             ['path' => 'other/nested/file.txt', 'type' => 'file'],
 | |
|         ]);
 | |
| 
 | |
|         $this->assertCount(3, $cache->listContents('other', true));
 | |
|     }
 | |
| 
 | |
|     public function testComplextListContentsWithDeletedFile()
 | |
|     {
 | |
|         $cache = new Memory();
 | |
|         $cache->storeContents('', [
 | |
|             ['path' => 'dirname', 'type' => 'dir'],
 | |
|             ['path' => 'dirname/file.txt', 'type' => 'file'],
 | |
|             ['path' => 'other', 'type' => 'dir'],
 | |
|             ['path' => 'other/file.txt', 'type' => 'file'],
 | |
|             ['path' => 'other/another_file.txt', 'type' => 'file'],
 | |
|         ]);
 | |
| 
 | |
|         $cache->delete('other/another_file.txt');
 | |
|         $this->assertCount(4, $cache->listContents('', true));
 | |
|     }
 | |
| 
 | |
|     public function testCacheMissIfContentsIsFalse()
 | |
|     {
 | |
|         $cache = new Memory();
 | |
|         $cache->updateObject('path.txt', [
 | |
|             'path'     => 'path.txt',
 | |
|             'contents' => false,
 | |
|         ], true);
 | |
| 
 | |
|         $this->assertFalse($cache->read('path.txt'));
 | |
|     }
 | |
| }
 |