/vendor/guzzlehttp/psr7/tests/UploadedFileTest.php
https://gitlab.com/ealexis.t/trends · PHP · 280 lines · 205 code · 45 blank · 30 comment · 2 complexity · a5fe51d7370e52be2da9f2bbed3348fa MD5 · raw file
- <?php
- namespace GuzzleHttp\Tests\Psr7;
- use ReflectionProperty;
- use GuzzleHttp\Psr7\Stream;
- use GuzzleHttp\Psr7\UploadedFile;
- /**
- * @covers GuzzleHttp\Psr7\UploadedFile
- */
- class UploadedFileTest extends \PHPUnit_Framework_TestCase
- {
- protected $cleanup;
- public function setUp()
- {
- $this->cleanup = [];
- }
- public function tearDown()
- {
- foreach ($this->cleanup as $file) {
- if (is_scalar($file) && file_exists($file)) {
- unlink($file);
- }
- }
- }
- public function invalidStreams()
- {
- return [
- 'null' => [null],
- 'true' => [true],
- 'false' => [false],
- 'int' => [1],
- 'float' => [1.1],
- 'array' => [['filename']],
- 'object' => [(object) ['filename']],
- ];
- }
- /**
- * @dataProvider invalidStreams
- */
- public function testRaisesExceptionOnInvalidStreamOrFile($streamOrFile)
- {
- $this->setExpectedException('InvalidArgumentException');
- new UploadedFile($streamOrFile, 0, UPLOAD_ERR_OK);
- }
- public function invalidSizes()
- {
- return [
- 'null' => [null],
- 'float' => [1.1],
- 'array' => [[1]],
- 'object' => [(object) [1]],
- ];
- }
- /**
- * @dataProvider invalidSizes
- */
- public function testRaisesExceptionOnInvalidSize($size)
- {
- $this->setExpectedException('InvalidArgumentException', 'size');
- new UploadedFile(fopen('php://temp', 'wb+'), $size, UPLOAD_ERR_OK);
- }
- public function invalidErrorStatuses()
- {
- return [
- 'null' => [null],
- 'true' => [true],
- 'false' => [false],
- 'float' => [1.1],
- 'string' => ['1'],
- 'array' => [[1]],
- 'object' => [(object) [1]],
- 'negative' => [-1],
- 'too-big' => [9],
- ];
- }
- /**
- * @dataProvider invalidErrorStatuses
- */
- public function testRaisesExceptionOnInvalidErrorStatus($status)
- {
- $this->setExpectedException('InvalidArgumentException', 'status');
- new UploadedFile(fopen('php://temp', 'wb+'), 0, $status);
- }
- public function invalidFilenamesAndMediaTypes()
- {
- return [
- 'true' => [true],
- 'false' => [false],
- 'int' => [1],
- 'float' => [1.1],
- 'array' => [['string']],
- 'object' => [(object) ['string']],
- ];
- }
- /**
- * @dataProvider invalidFilenamesAndMediaTypes
- */
- public function testRaisesExceptionOnInvalidClientFilename($filename)
- {
- $this->setExpectedException('InvalidArgumentException', 'filename');
- new UploadedFile(fopen('php://temp', 'wb+'), 0, UPLOAD_ERR_OK, $filename);
- }
- /**
- * @dataProvider invalidFilenamesAndMediaTypes
- */
- public function testRaisesExceptionOnInvalidClientMediaType($mediaType)
- {
- $this->setExpectedException('InvalidArgumentException', 'media type');
- new UploadedFile(fopen('php://temp', 'wb+'), 0, UPLOAD_ERR_OK, 'foobar.baz', $mediaType);
- }
- public function testGetStreamReturnsOriginalStreamObject()
- {
- $stream = new Stream(fopen('php://temp', 'r'));
- $upload = new UploadedFile($stream, 0, UPLOAD_ERR_OK);
- $this->assertSame($stream, $upload->getStream());
- }
- public function testGetStreamReturnsWrappedPhpStream()
- {
- $stream = fopen('php://temp', 'wb+');
- $upload = new UploadedFile($stream, 0, UPLOAD_ERR_OK);
- $uploadStream = $upload->getStream()->detach();
- $this->assertSame($stream, $uploadStream);
- }
- public function testGetStreamReturnsStreamForFile()
- {
- $this->cleanup[] = $stream = tempnam(sys_get_temp_dir(), 'stream_file');
- $upload = new UploadedFile($stream, 0, UPLOAD_ERR_OK);
- $uploadStream = $upload->getStream();
- $r = new ReflectionProperty($uploadStream, 'filename');
- $r->setAccessible(true);
- $this->assertSame($stream, $r->getValue($uploadStream));
- }
- public function testSuccessful()
- {
- $stream = \GuzzleHttp\Psr7\stream_for('Foo bar!');
- $upload = new UploadedFile($stream, $stream->getSize(), UPLOAD_ERR_OK, 'filename.txt', 'text/plain');
- $this->assertEquals($stream->getSize(), $upload->getSize());
- $this->assertEquals('filename.txt', $upload->getClientFilename());
- $this->assertEquals('text/plain', $upload->getClientMediaType());
- $this->cleanup[] = $to = tempnam(sys_get_temp_dir(), 'successful');
- $upload->moveTo($to);
- $this->assertFileExists($to);
- $this->assertEquals($stream->__toString(), file_get_contents($to));
- }
- public function invalidMovePaths()
- {
- return [
- 'null' => [null],
- 'true' => [true],
- 'false' => [false],
- 'int' => [1],
- 'float' => [1.1],
- 'empty' => [''],
- 'array' => [['filename']],
- 'object' => [(object) ['filename']],
- ];
- }
- /**
- * @dataProvider invalidMovePaths
- */
- public function testMoveRaisesExceptionForInvalidPath($path)
- {
- $stream = \GuzzleHttp\Psr7\stream_for('Foo bar!');
- $upload = new UploadedFile($stream, 0, UPLOAD_ERR_OK);
- $this->cleanup[] = $path;
- $this->setExpectedException('InvalidArgumentException', 'path');
- $upload->moveTo($path);
- }
- public function testMoveCannotBeCalledMoreThanOnce()
- {
- $stream = \GuzzleHttp\Psr7\stream_for('Foo bar!');
- $upload = new UploadedFile($stream, 0, UPLOAD_ERR_OK);
- $this->cleanup[] = $to = tempnam(sys_get_temp_dir(), 'diac');
- $upload->moveTo($to);
- $this->assertTrue(file_exists($to));
- $this->setExpectedException('RuntimeException', 'moved');
- $upload->moveTo($to);
- }
- public function testCannotRetrieveStreamAfterMove()
- {
- $stream = \GuzzleHttp\Psr7\stream_for('Foo bar!');
- $upload = new UploadedFile($stream, 0, UPLOAD_ERR_OK);
- $this->cleanup[] = $to = tempnam(sys_get_temp_dir(), 'diac');
- $upload->moveTo($to);
- $this->assertFileExists($to);
- $this->setExpectedException('RuntimeException', 'moved');
- $upload->getStream();
- }
- public function nonOkErrorStatus()
- {
- return [
- 'UPLOAD_ERR_INI_SIZE' => [ UPLOAD_ERR_INI_SIZE ],
- 'UPLOAD_ERR_FORM_SIZE' => [ UPLOAD_ERR_FORM_SIZE ],
- 'UPLOAD_ERR_PARTIAL' => [ UPLOAD_ERR_PARTIAL ],
- 'UPLOAD_ERR_NO_FILE' => [ UPLOAD_ERR_NO_FILE ],
- 'UPLOAD_ERR_NO_TMP_DIR' => [ UPLOAD_ERR_NO_TMP_DIR ],
- 'UPLOAD_ERR_CANT_WRITE' => [ UPLOAD_ERR_CANT_WRITE ],
- 'UPLOAD_ERR_EXTENSION' => [ UPLOAD_ERR_EXTENSION ],
- ];
- }
- /**
- * @dataProvider nonOkErrorStatus
- */
- public function testConstructorDoesNotRaiseExceptionForInvalidStreamWhenErrorStatusPresent($status)
- {
- $uploadedFile = new UploadedFile('not ok', 0, $status);
- $this->assertSame($status, $uploadedFile->getError());
- }
- /**
- * @dataProvider nonOkErrorStatus
- */
- public function testMoveToRaisesExceptionWhenErrorStatusPresent($status)
- {
- $uploadedFile = new UploadedFile('not ok', 0, $status);
- $this->setExpectedException('RuntimeException', 'upload error');
- $uploadedFile->moveTo(__DIR__ . '/' . uniqid());
- }
- /**
- * @dataProvider nonOkErrorStatus
- */
- public function testGetStreamRaisesExceptionWhenErrorStatusPresent($status)
- {
- $uploadedFile = new UploadedFile('not ok', 0, $status);
- $this->setExpectedException('RuntimeException', 'upload error');
- $stream = $uploadedFile->getStream();
- }
- public function testMoveToCreatesStreamIfOnlyAFilenameWasProvided()
- {
- $this->cleanup[] = $from = tempnam(sys_get_temp_dir(), 'copy_from');
- $this->cleanup[] = $to = tempnam(sys_get_temp_dir(), 'copy_to');
- copy(__FILE__, $from);
- $uploadedFile = new UploadedFile($from, 100, UPLOAD_ERR_OK, basename($from), 'text/plain');
- $uploadedFile->moveTo($to);
- $this->assertFileEquals(__FILE__, $to);
- }
- }