FileBagTest

class FileBagTest extends TestCase

FileBagTest.

Methods

public testFileMustBeAnArrayOrUploadedFile() No description
public testShouldConvertsUploadedFiles() No description
public testShouldSetEmptyUploadedFilesToNull() No description
public testShouldRemoveEmptyUploadedFilesForMultiUpload() No description
public testShouldNotRemoveEmptyUploadedFilesForAssociativeArray() No description
public testShouldConvertUploadedFilesWithPhpBug() No description
public testShouldConvertNestedUploadedFilesWithPhpBug() No description
public testShouldNotConvertNestedUploadedFiles() No description
protected createTempFile() No description
protected setUp() No description
protected tearDown() No description

Details

at line 29

testFileMustBeAnArrayOrUploadedFile()

public testFileMustBeAnArrayOrUploadedFile()
at line 34

testShouldConvertsUploadedFiles()

public testShouldConvertsUploadedFiles()
at line 50

testShouldSetEmptyUploadedFilesToNull()

public testShouldSetEmptyUploadedFilesToNull()
at line 63

testShouldRemoveEmptyUploadedFilesForMultiUpload()

public testShouldRemoveEmptyUploadedFilesForMultiUpload()
at line 76

testShouldNotRemoveEmptyUploadedFilesForAssociativeArray()

public testShouldNotRemoveEmptyUploadedFilesForAssociativeArray()
at line 89

testShouldConvertUploadedFilesWithPhpBug()

public testShouldConvertUploadedFilesWithPhpBug()
at line 118

testShouldConvertNestedUploadedFilesWithPhpBug()

public testShouldConvertNestedUploadedFilesWithPhpBug()
at line 147

testShouldNotConvertNestedUploadedFiles()

public testShouldNotConvertNestedUploadedFiles()
at line 157

createTempFile()

protected createTempFile()
at line 165

setUp()

protected setUp()
at line 170

tearDown()

protected tearDown()

Source code

<?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;

use PHPUnit\Framework\TestCase;
use Symfony\Component\HttpFoundation\File\UploadedFile;
use Symfony\Component\HttpFoundation\FileBag;

/**
 * FileBagTest.
 *
 * @author Fabien Potencier <fabien@symfony.com>
 * @author Bulat Shakirzyanov <mallluhuct@gmail.com>
 */
class FileBagTest extends TestCase
{
    /**
     * @expectedException \InvalidArgumentException
     */
    public function testFileMustBeAnArrayOrUploadedFile()
    {
        new FileBag(array('file' => 'foo'));
    }

    public function testShouldConvertsUploadedFiles()
    {
        $tmpFile = $this->createTempFile();
        $file = new UploadedFile($tmpFile, basename($tmpFile), 'text/plain');

        $bag = new FileBag(array('file' => array(
            'name' => basename($tmpFile),
            'type' => 'text/plain',
            'tmp_name' => $tmpFile,
            'error' => 0,
            'size' => null,
        )));

        $this->assertEquals($file, $bag->get('file'));
    }

    public function testShouldSetEmptyUploadedFilesToNull()
    {
        $bag = new FileBag(array('file' => array(
            'name' => '',
            'type' => '',
            'tmp_name' => '',
            'error' => UPLOAD_ERR_NO_FILE,
            'size' => 0,
        )));

        $this->assertNull($bag->get('file'));
    }

    public function testShouldRemoveEmptyUploadedFilesForMultiUpload()
    {
        $bag = new FileBag(array('files' => array(
            'name' => array(''),
            'type' => array(''),
            'tmp_name' => array(''),
            'error' => array(UPLOAD_ERR_NO_FILE),
            'size' => array(0),
        )));

        $this->assertSame(array(), $bag->get('files'));
    }

    public function testShouldNotRemoveEmptyUploadedFilesForAssociativeArray()
    {
        $bag = new FileBag(array('files' => array(
            'name' => array('file1' => ''),
            'type' => array('file1' => ''),
            'tmp_name' => array('file1' => ''),
            'error' => array('file1' => UPLOAD_ERR_NO_FILE),
            'size' => array('file1' => 0),
        )));

        $this->assertSame(array('file1' => null), $bag->get('files'));
    }

    public function testShouldConvertUploadedFilesWithPhpBug()
    {
        $tmpFile = $this->createTempFile();
        $file = new UploadedFile($tmpFile, basename($tmpFile), 'text/plain');

        $bag = new FileBag(array(
            'child' => array(
                'name' => array(
                    'file' => basename($tmpFile),
                ),
                'type' => array(
                    'file' => 'text/plain',
                ),
                'tmp_name' => array(
                    'file' => $tmpFile,
                ),
                'error' => array(
                    'file' => 0,
                ),
                'size' => array(
                    'file' => null,
                ),
            ),
        ));

        $files = $bag->all();
        $this->assertEquals($file, $files['child']['file']);
    }

    public function testShouldConvertNestedUploadedFilesWithPhpBug()
    {
        $tmpFile = $this->createTempFile();
        $file = new UploadedFile($tmpFile, basename($tmpFile), 'text/plain');

        $bag = new FileBag(array(
            'child' => array(
                'name' => array(
                    'sub' => array('file' => basename($tmpFile)),
                ),
                'type' => array(
                    'sub' => array('file' => 'text/plain'),
                ),
                'tmp_name' => array(
                    'sub' => array('file' => $tmpFile),
                ),
                'error' => array(
                    'sub' => array('file' => 0),
                ),
                'size' => array(
                    'sub' => array('file' => null),
                ),
            ),
        ));

        $files = $bag->all();
        $this->assertEquals($file, $files['child']['sub']['file']);
    }

    public function testShouldNotConvertNestedUploadedFiles()
    {
        $tmpFile = $this->createTempFile();
        $file = new UploadedFile($tmpFile, basename($tmpFile), 'text/plain');
        $bag = new FileBag(array('image' => array('file' => $file)));

        $files = $bag->all();
        $this->assertEquals($file, $files['image']['file']);
    }

    protected function createTempFile()
    {
        $tempFile = tempnam(sys_get_temp_dir().'/form_test', 'FormTest');
        file_put_contents($tempFile, '1');

        return $tempFile;
    }

    protected function setUp()
    {
        mkdir(sys_get_temp_dir().'/form_test', 0777, true);
    }

    protected function tearDown()
    {
        foreach (glob(sys_get_temp_dir().'/form_test/*') as $file) {
            unlink($file);
        }

        rmdir(sys_get_temp_dir().'/form_test');
    }
}