123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346 |
- <?php
- /*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
- namespace Symfony\Component\HttpFoundation\Tests\File;
- use PHPUnit\Framework\TestCase;
- use Symfony\Component\HttpFoundation\File\Exception\CannotWriteFileException;
- use Symfony\Component\HttpFoundation\File\Exception\ExtensionFileException;
- use Symfony\Component\HttpFoundation\File\Exception\FileException;
- use Symfony\Component\HttpFoundation\File\Exception\FormSizeFileException;
- use Symfony\Component\HttpFoundation\File\Exception\IniSizeFileException;
- use Symfony\Component\HttpFoundation\File\Exception\NoFileException;
- use Symfony\Component\HttpFoundation\File\Exception\NoTmpDirFileException;
- use Symfony\Component\HttpFoundation\File\Exception\PartialFileException;
- use Symfony\Component\HttpFoundation\File\UploadedFile;
- class UploadedFileTest extends TestCase
- {
- protected function setUp()
- {
- if (!ini_get('file_uploads')) {
- $this->markTestSkipped('file_uploads is disabled in php.ini');
- }
- }
- public function testConstructWhenFileNotExists()
- {
- $this->{method_exists($this, $_ = 'expectException') ? $_ : 'setExpectedException'}('Symfony\Component\HttpFoundation\File\Exception\FileNotFoundException');
- new UploadedFile(
- __DIR__.'/Fixtures/not_here',
- 'original.gif',
- null
- );
- }
- public function testFileUploadsWithNoMimeType()
- {
- $file = new UploadedFile(
- __DIR__.'/Fixtures/test.gif',
- 'original.gif',
- null,
- UPLOAD_ERR_OK
- );
- $this->assertEquals('application/octet-stream', $file->getClientMimeType());
- if (\extension_loaded('fileinfo')) {
- $this->assertEquals('image/gif', $file->getMimeType());
- }
- }
- public function testFileUploadsWithUnknownMimeType()
- {
- $file = new UploadedFile(
- __DIR__.'/Fixtures/.unknownextension',
- 'original.gif',
- null,
- UPLOAD_ERR_OK
- );
- $this->assertEquals('application/octet-stream', $file->getClientMimeType());
- }
- public function testGuessClientExtension()
- {
- $file = new UploadedFile(
- __DIR__.'/Fixtures/test.gif',
- 'original.gif',
- 'image/gif',
- null
- );
- $this->assertEquals('gif', $file->guessClientExtension());
- }
- public function testGuessClientExtensionWithIncorrectMimeType()
- {
- $file = new UploadedFile(
- __DIR__.'/Fixtures/test.gif',
- 'original.gif',
- 'image/jpeg',
- null
- );
- $this->assertEquals('jpeg', $file->guessClientExtension());
- }
- public function testErrorIsOkByDefault()
- {
- $file = new UploadedFile(
- __DIR__.'/Fixtures/test.gif',
- 'original.gif',
- 'image/gif',
- null
- );
- $this->assertEquals(UPLOAD_ERR_OK, $file->getError());
- }
- public function testGetClientOriginalName()
- {
- $file = new UploadedFile(
- __DIR__.'/Fixtures/test.gif',
- 'original.gif',
- 'image/gif',
- null
- );
- $this->assertEquals('original.gif', $file->getClientOriginalName());
- }
- public function testGetClientOriginalExtension()
- {
- $file = new UploadedFile(
- __DIR__.'/Fixtures/test.gif',
- 'original.gif',
- 'image/gif',
- null
- );
- $this->assertEquals('gif', $file->getClientOriginalExtension());
- }
- /**
- * @expectedException \Symfony\Component\HttpFoundation\File\Exception\FileException
- */
- public function testMoveLocalFileIsNotAllowed()
- {
- $file = new UploadedFile(
- __DIR__.'/Fixtures/test.gif',
- 'original.gif',
- 'image/gif',
- UPLOAD_ERR_OK
- );
- $movedFile = $file->move(__DIR__.'/Fixtures/directory');
- }
- public function failedUploadedFile()
- {
- foreach ([UPLOAD_ERR_INI_SIZE, UPLOAD_ERR_FORM_SIZE, UPLOAD_ERR_PARTIAL, UPLOAD_ERR_NO_FILE, UPLOAD_ERR_CANT_WRITE, UPLOAD_ERR_NO_TMP_DIR, UPLOAD_ERR_EXTENSION, -1] as $error) {
- yield [new UploadedFile(
- __DIR__.'/Fixtures/test.gif',
- 'original.gif',
- 'image/gif',
- $error
- )];
- }
- }
- /**
- * @dataProvider failedUploadedFile
- */
- public function testMoveFailed(UploadedFile $file)
- {
- switch ($file->getError()) {
- case UPLOAD_ERR_INI_SIZE:
- $exceptionClass = IniSizeFileException::class;
- break;
- case UPLOAD_ERR_FORM_SIZE:
- $exceptionClass = FormSizeFileException::class;
- break;
- case UPLOAD_ERR_PARTIAL:
- $exceptionClass = PartialFileException::class;
- break;
- case UPLOAD_ERR_NO_FILE:
- $exceptionClass = NoFileException::class;
- break;
- case UPLOAD_ERR_CANT_WRITE:
- $exceptionClass = CannotWriteFileException::class;
- break;
- case UPLOAD_ERR_NO_TMP_DIR:
- $exceptionClass = NoTmpDirFileException::class;
- break;
- case UPLOAD_ERR_EXTENSION:
- $exceptionClass = ExtensionFileException::class;
- break;
- default:
- $exceptionClass = FileException::class;
- }
- $this->expectException($exceptionClass);
- $file->move(__DIR__.'/Fixtures/directory');
- }
- public function testMoveLocalFileIsAllowedInTestMode()
- {
- $path = __DIR__.'/Fixtures/test.copy.gif';
- $targetDir = __DIR__.'/Fixtures/directory';
- $targetPath = $targetDir.'/test.copy.gif';
- @unlink($path);
- @unlink($targetPath);
- copy(__DIR__.'/Fixtures/test.gif', $path);
- $file = new UploadedFile(
- $path,
- 'original.gif',
- 'image/gif',
- UPLOAD_ERR_OK,
- true
- );
- $movedFile = $file->move(__DIR__.'/Fixtures/directory');
- $this->assertFileExists($targetPath);
- $this->assertFileNotExists($path);
- $this->assertEquals(realpath($targetPath), $movedFile->getRealPath());
- @unlink($targetPath);
- }
- public function testGetClientOriginalNameSanitizeFilename()
- {
- $file = new UploadedFile(
- __DIR__.'/Fixtures/test.gif',
- '../../original.gif',
- 'image/gif'
- );
- $this->assertEquals('original.gif', $file->getClientOriginalName());
- }
- public function testGetSize()
- {
- $file = new UploadedFile(
- __DIR__.'/Fixtures/test.gif',
- 'original.gif',
- 'image/gif'
- );
- $this->assertEquals(filesize(__DIR__.'/Fixtures/test.gif'), $file->getSize());
- $file = new UploadedFile(
- __DIR__.'/Fixtures/test',
- 'original.gif',
- 'image/gif'
- );
- $this->assertEquals(filesize(__DIR__.'/Fixtures/test'), $file->getSize());
- }
- /**
- * @group legacy
- * @expectedDeprecation Passing a size as 4th argument to the constructor of "Symfony\Component\HttpFoundation\File\UploadedFile" is deprecated since Symfony 4.1.
- */
- public function testConstructDeprecatedSize()
- {
- $file = new UploadedFile(
- __DIR__.'/Fixtures/test.gif',
- 'original.gif',
- 'image/gif',
- filesize(__DIR__.'/Fixtures/test.gif'),
- UPLOAD_ERR_OK,
- false
- );
- $this->assertEquals(filesize(__DIR__.'/Fixtures/test.gif'), $file->getSize());
- }
- /**
- * @group legacy
- * @expectedDeprecation Passing a size as 4th argument to the constructor of "Symfony\Component\HttpFoundation\File\UploadedFile" is deprecated since Symfony 4.1.
- */
- public function testConstructDeprecatedSizeWhenPassingOnlyThe4Needed()
- {
- $file = new UploadedFile(
- __DIR__.'/Fixtures/test.gif',
- 'original.gif',
- 'image/gif',
- filesize(__DIR__.'/Fixtures/test.gif')
- );
- $this->assertEquals(filesize(__DIR__.'/Fixtures/test.gif'), $file->getSize());
- }
- public function testGetExtension()
- {
- $file = new UploadedFile(
- __DIR__.'/Fixtures/test.gif',
- 'original.gif'
- );
- $this->assertEquals('gif', $file->getExtension());
- }
- public function testIsValid()
- {
- $file = new UploadedFile(
- __DIR__.'/Fixtures/test.gif',
- 'original.gif',
- null,
- UPLOAD_ERR_OK,
- true
- );
- $this->assertTrue($file->isValid());
- }
- /**
- * @dataProvider uploadedFileErrorProvider
- */
- public function testIsInvalidOnUploadError($error)
- {
- $file = new UploadedFile(
- __DIR__.'/Fixtures/test.gif',
- 'original.gif',
- null,
- $error
- );
- $this->assertFalse($file->isValid());
- }
- public function uploadedFileErrorProvider()
- {
- return [
- [UPLOAD_ERR_INI_SIZE],
- [UPLOAD_ERR_FORM_SIZE],
- [UPLOAD_ERR_PARTIAL],
- [UPLOAD_ERR_NO_TMP_DIR],
- [UPLOAD_ERR_EXTENSION],
- ];
- }
- public function testIsInvalidIfNotHttpUpload()
- {
- $file = new UploadedFile(
- __DIR__.'/Fixtures/test.gif',
- 'original.gif',
- null,
- UPLOAD_ERR_OK
- );
- $this->assertFalse($file->isValid());
- }
- }
|