256 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			PHP
		
	
	
		
		
			
		
	
	
			256 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			PHP
		
	
	
|  | <?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')); | ||
|  |     } | ||
|  | } |