122 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			122 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| namespace Unit;
 | |
| 
 | |
| 
 | |
| use Flow\File;
 | |
| use Flow\FustyRequest;
 | |
| use Flow\Config;
 | |
| use org\bovigo\vfs\vfsStreamWrapper;
 | |
| use org\bovigo\vfs\vfsStreamDirectory;
 | |
| use org\bovigo\vfs\vfsStream;
 | |
| 
 | |
| /**
 | |
|  * FustyRequest unit tests
 | |
|  *
 | |
|  * @coversDefaultClass \Flow\FustyRequest
 | |
|  *
 | |
|  * @package Unit
 | |
|  */
 | |
| class FustyRequestTest extends FlowUnitCase
 | |
| {
 | |
| 	/**
 | |
| 	 * Virtual file system
 | |
| 	 *
 | |
| 	 * @var vfsStreamDirectory
 | |
| 	 */
 | |
| 	protected $vfs;
 | |
| 
 | |
|     protected function setUp()
 | |
|     {
 | |
| 	    parent::setUp();
 | |
| 
 | |
|         vfsStreamWrapper::register();
 | |
|         $this->vfs = new vfsStreamDirectory('chunks');
 | |
|         vfsStreamWrapper::setRoot($this->vfs);
 | |
|     }
 | |
| 
 | |
| 	/**
 | |
| 	 * @covers ::__construct
 | |
| 	 * @covers ::isFustyFlowRequest
 | |
| 	 */
 | |
|     public function testFustyRequest_construct()
 | |
|     {
 | |
| 	    $firstChunk = vfsStream::newFile('temp_file');
 | |
| 	    $firstChunk->setContent('1234567890');
 | |
| 	    $this->vfs->addChild($firstChunk);
 | |
| 
 | |
| 	    $fileInfo = new \ArrayObject(array(
 | |
| 		    'size' => 10,
 | |
| 		    'error' => UPLOAD_ERR_OK,
 | |
| 		    'tmp_name' => $firstChunk->url()
 | |
| 	    ));
 | |
| 
 | |
| 	    $request =  new \ArrayObject(array(
 | |
| 		    'flowIdentifier' => '13632-prettifyjs',
 | |
| 		    'flowFilename' => 'prettify.js',
 | |
| 		    'flowRelativePath' => 'home/prettify.js'
 | |
| 	    ));
 | |
| 
 | |
| 	    $fustyRequest = new FustyRequest($request, $fileInfo);
 | |
| 
 | |
| 	    $this->assertSame('prettify.js', $fustyRequest->getFileName());
 | |
| 	    $this->assertSame('13632-prettifyjs', $fustyRequest->getIdentifier());
 | |
| 	    $this->assertSame('home/prettify.js', $fustyRequest->getRelativePath());
 | |
| 	    $this->assertSame(1, $fustyRequest->getCurrentChunkNumber());
 | |
| 	    $this->assertTrue($fustyRequest->isFustyFlowRequest());
 | |
| 	    $this->assertSame(10, $fustyRequest->getTotalSize());
 | |
| 	    $this->assertSame(10, $fustyRequest->getDefaultChunkSize());
 | |
| 	    $this->assertSame(10, $fustyRequest->getCurrentChunkSize());
 | |
| 	    $this->assertSame(1, $fustyRequest->getTotalChunks());
 | |
|     }
 | |
| 
 | |
| 	/**
 | |
| 	 */
 | |
| 	public function testFustyRequest_ValidateUpload()
 | |
| 	{
 | |
| 		//// Setup test
 | |
| 
 | |
| 		$firstChunk = vfsStream::newFile('temp_file');
 | |
| 		$firstChunk->setContent('1234567890');
 | |
| 		$this->vfs->addChild($firstChunk);
 | |
| 
 | |
| 		$fileInfo = new \ArrayObject(array(
 | |
| 			'size' => 10,
 | |
| 			'error' => UPLOAD_ERR_OK,
 | |
| 			'tmp_name' => $firstChunk->url()
 | |
| 		));
 | |
| 
 | |
| 		$request =  new \ArrayObject(array(
 | |
| 			'flowIdentifier' => '13632-prettifyjs',
 | |
| 			'flowFilename' => 'prettify.js',
 | |
| 			'flowRelativePath' => 'home/prettify.js'
 | |
| 		));
 | |
| 
 | |
| 		$fustyRequest = new FustyRequest($request, $fileInfo);
 | |
| 
 | |
| 		$config = new Config();
 | |
| 		$config->setTempDir($this->vfs->url());
 | |
| 
 | |
| 		/** @var File $file */
 | |
| 		$file = $this->getMock('Flow\File', array('_move_uploaded_file'), array($config, $fustyRequest));
 | |
| 
 | |
| 		/** @noinspection PhpUndefinedMethodInspection */
 | |
| 		$file->expects($this->once())
 | |
| 		     ->method('_move_uploaded_file')
 | |
| 		     ->will($this->returnCallback(function ($filename, $destination) {
 | |
| 			     return rename($filename, $destination);
 | |
| 		     }));
 | |
| 
 | |
| 		//// Actual test
 | |
| 
 | |
| 		$this->assertTrue($file->validateChunk());
 | |
| 		$this->assertFalse($file->validateFile());
 | |
| 
 | |
| 		$this->assertTrue($file->saveChunk());
 | |
| 		$this->assertTrue($file->validateFile());
 | |
| 		$path = $this->vfs->url() . DIRECTORY_SEPARATOR . 'new';
 | |
| 		$this->assertTrue($file->save($path));
 | |
| 		$this->assertEquals(10, filesize($path));
 | |
| 	}
 | |
| }
 |