From 93f4c66035dd5963384cdc0e3305ac15ce25a602 Mon Sep 17 00:00:00 2001 From: Mark Story Date: Sun, 25 Apr 2010 22:20:05 -0700 Subject: [PATCH] Adding tests for CakeRequest's ability to munge through the FILES array. Fixing issue where files would be in the wrong place. --- cake/libs/cake_request.php | 6 +- cake/tests/cases/libs/cake_request.test.php | 253 ++++++++++++++++++++ 2 files changed, 256 insertions(+), 3 deletions(-) diff --git a/cake/libs/cake_request.php b/cake/libs/cake_request.php index a2724a03b..32b503c21 100644 --- a/cake/libs/cake_request.php +++ b/cake/libs/cake_request.php @@ -120,14 +120,14 @@ class CakeRequest { foreach ($fields as $field => $value) { if (is_array($value)) { foreach ($value as $k => $v) { - $this->params['data'][$model][$field][$k][$key] = $v; + $this->data[$model][$field][$k][$key] = $v; } } else { - $this->params['data'][$model][$field][$key] = $value; + $this->data[$model][$field][$key] = $value; } } } else { - $this->params['data'][$model][$key] = $fields; + $this->data[$model][$key] = $fields; } } } diff --git a/cake/tests/cases/libs/cake_request.test.php b/cake/tests/cases/libs/cake_request.test.php index 914cfa031..acc95ec58 100644 --- a/cake/tests/cases/libs/cake_request.test.php +++ b/cake/tests/cases/libs/cake_request.test.php @@ -58,6 +58,255 @@ class CakeRequestTestCase extends CakeTestCase { $this->assertEqual($request->params['form'], $_POST); } +/** + * test parsing of FILES array + * + * @return void + */ + function testFILESParsing() { + $_FILES = array('data' => array('name' => array( + 'File' => array( + array('data' => 'cake_mssql_patch.patch'), + array('data' => 'controller.diff'), + array('data' => ''), + array('data' => ''), + ), + 'Post' => array('attachment' => 'jquery-1.2.1.js'), + ), + 'type' => array( + 'File' => array( + array('data' => ''), + array('data' => ''), + array('data' => ''), + array('data' => ''), + ), + 'Post' => array('attachment' => 'application/x-javascript'), + ), + 'tmp_name' => array( + 'File' => array( + array('data' => '/private/var/tmp/phpy05Ywj'), + array('data' => '/private/var/tmp/php7MBztY'), + array('data' => ''), + array('data' => ''), + ), + 'Post' => array('attachment' => '/private/var/tmp/phpEwlrIo'), + ), + 'error' => array( + 'File' => array( + array('data' => 0), + array('data' => 0), + array('data' => 4), + array('data' => 4) + ), + 'Post' => array('attachment' => 0) + ), + 'size' => array( + 'File' => array( + array('data' => 6271), + array('data' => 350), + array('data' => 0), + array('data' => 0), + ), + 'Post' => array('attachment' => 80469) + ), + )); + + $request = new CakeRequest(); + $expected = array( + 'File' => array( + array('data' => array( + 'name' => 'cake_mssql_patch.patch', + 'type' => '', + 'tmp_name' => '/private/var/tmp/phpy05Ywj', + 'error' => 0, + 'size' => 6271, + )), + array( + 'data' => array( + 'name' => 'controller.diff', + 'type' => '', + 'tmp_name' => '/private/var/tmp/php7MBztY', + 'error' => 0, + 'size' => 350, + )), + array('data' => array( + 'name' => '', + 'type' => '', + 'tmp_name' => '', + 'error' => 4, + 'size' => 0, + )), + array('data' => array( + 'name' => '', + 'type' => '', + 'tmp_name' => '', + 'error' => 4, + 'size' => 0, + )), + ), + 'Post' => array('attachment' => array( + 'name' => 'jquery-1.2.1.js', + 'type' => 'application/x-javascript', + 'tmp_name' => '/private/var/tmp/phpEwlrIo', + 'error' => 0, + 'size' => 80469, + )) + ); + $this->assertEqual($request->data, $expected); + + $_FILES = array( + 'data' => array( + 'name' => array( + 'Document' => array( + 1 => array( + 'birth_cert' => 'born on.txt', + 'passport' => 'passport.txt', + 'drivers_license' => 'ugly pic.jpg' + ), + 2 => array( + 'birth_cert' => 'aunt betty.txt', + 'passport' => 'betty-passport.txt', + 'drivers_license' => 'betty-photo.jpg' + ), + ), + ), + 'type' => array( + 'Document' => array( + 1 => array( + 'birth_cert' => 'application/octet-stream', + 'passport' => 'application/octet-stream', + 'drivers_license' => 'application/octet-stream', + ), + 2 => array( + 'birth_cert' => 'application/octet-stream', + 'passport' => 'application/octet-stream', + 'drivers_license' => 'application/octet-stream', + ) + ) + ), + 'tmp_name' => array( + 'Document' => array( + 1 => array( + 'birth_cert' => '/private/var/tmp/phpbsUWfH', + 'passport' => '/private/var/tmp/php7f5zLt', + 'drivers_license' => '/private/var/tmp/phpMXpZgT', + ), + 2 => array( + 'birth_cert' => '/private/var/tmp/php5kHZt0', + 'passport' => '/private/var/tmp/phpnYkOuM', + 'drivers_license' => '/private/var/tmp/php9Rq0P3', + ) + ) + ), + 'error' => array( + 'Document' => array( + 1 => array( + 'birth_cert' => 0, + 'passport' => 0, + 'drivers_license' => 0, + ), + 2 => array( + 'birth_cert' => 0, + 'passport' => 0, + 'drivers_license' => 0, + ) + ) + ), + 'size' => array( + 'Document' => array( + 1 => array( + 'birth_cert' => 123, + 'passport' => 458, + 'drivers_license' => 875, + ), + 2 => array( + 'birth_cert' => 876, + 'passport' => 976, + 'drivers_license' => 9783, + ) + ) + ) + ) + ); + + $request = new CakeRequest(); + $expected = array( + 'Document' => array( + 1 => array( + 'birth_cert' => array( + 'name' => 'born on.txt', + 'tmp_name' => '/private/var/tmp/phpbsUWfH', + 'error' => 0, + 'size' => 123, + 'type' => 'application/octet-stream', + ), + 'passport' => array( + 'name' => 'passport.txt', + 'tmp_name' => '/private/var/tmp/php7f5zLt', + 'error' => 0, + 'size' => 458, + 'type' => 'application/octet-stream', + ), + 'drivers_license' => array( + 'name' => 'ugly pic.jpg', + 'tmp_name' => '/private/var/tmp/phpMXpZgT', + 'error' => 0, + 'size' => 875, + 'type' => 'application/octet-stream', + ), + ), + 2 => array( + 'birth_cert' => array( + 'name' => 'aunt betty.txt', + 'tmp_name' => '/private/var/tmp/php5kHZt0', + 'error' => 0, + 'size' => 876, + 'type' => 'application/octet-stream', + ), + 'passport' => array( + 'name' => 'betty-passport.txt', + 'tmp_name' => '/private/var/tmp/phpnYkOuM', + 'error' => 0, + 'size' => 976, + 'type' => 'application/octet-stream', + ), + 'drivers_license' => array( + 'name' => 'betty-photo.jpg', + 'tmp_name' => '/private/var/tmp/php9Rq0P3', + 'error' => 0, + 'size' => 9783, + 'type' => 'application/octet-stream', + ), + ), + ) + ); + $this->assertEqual($request->data, $expected); + + + $_FILES = array( + 'data' => array( + 'name' => array('birth_cert' => 'born on.txt'), + 'type' => array('birth_cert' => 'application/octet-stream'), + 'tmp_name' => array('birth_cert' => '/private/var/tmp/phpbsUWfH'), + 'error' => array('birth_cert' => 0), + 'size' => array('birth_cert' => 123) + ) + ); + + $request = new CakeRequest(); + $expected = array( + 'birth_cert' => array( + 'name' => 'born on.txt', + 'type' => 'application/octet-stream', + 'tmp_name' => '/private/var/tmp/phpbsUWfH', + 'error' => 0, + 'size' => 123 + ) + ); + + $this->assertEqual($request->data, $expected); + } + /** * test method overrides coming in from POST data. * @@ -71,6 +320,10 @@ class CakeRequestTestCase extends CakeTestCase { $_POST = array('_method' => 'DELETE'); $request = new CakeRequest(); $this->assertEqual(env('REQUEST_METHOD'), 'DELETE'); + + $_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE'] = 'PUT'; + $request = new CakeRequest(); + $this->assertEqual(env('REQUEST_METHOD'), 'PUT'); } /**