ソースを参照

Allow requestAction() to set environment values.

Use the environment extra key to provide environment/header value
overrides.

Refs #3566
mark_story 11 年 前
コミット
b0c0af006f

+ 4 - 1
src/Routing/RequestActionTrait.php

@@ -125,7 +125,10 @@ trait RequestActionTrait {
 		if (isset($extra['query'])) {
 			$params['query'] = $extra['query'];
 		}
-		unset($extra['post'], $extra['query']);
+		if (isset($extra['environment'])) {
+			$params['environment'] = $extra['environment'] + $_SERVER + $_ENV;
+		}
+		unset($extra['environment'], $extra['post'], $extra['query']);
 
 		$params['session'] = isset($extra['session']) ? $extra['session'] : new Session();
 

+ 19 - 2
tests/TestCase/Routing/RequestActionTraitTest.php

@@ -225,8 +225,7 @@ class RequestActionTraitTest extends TestCase {
 			array('post' => $_POST)
 		);
 		$result = json_decode($result, true);
-		$expected = $_POST;
-		$this->assertEquals($expected, $result);
+		$this->assertEquals($_POST, $result);
 	}
 
 /**
@@ -307,6 +306,24 @@ class RequestActionTraitTest extends TestCase {
 	}
 
 /**
+ * Test that environment overrides can be set.
+ *
+ * @return void
+ */
+	public function testRequestActionEnvironment() {
+		$result = $this->object->requestAction('/request_action/params_pass');
+		$result = json_decode($result, true);
+		$this->assertEquals('', $result['contentType'], 'Original content type not found.');
+
+		$result = $this->object->requestAction(
+			'/request_action/params_pass',
+			['environment' => ['CONTENT_TYPE' => 'application/json']]
+		);
+		$result = json_decode($result, true);
+		$this->assertEquals('application/json', $result['contentType']);
+	}
+
+/**
  * Tests that it is possible to transmit the session for the request
  *
  * @return void

+ 2 - 1
tests/test_app/TestApp/Controller/RequestActionController.php

@@ -104,7 +104,8 @@ class RequestActionController extends AppController {
 		$this->response->body(json_encode([
 			'params' => $this->request->params,
 			'query' => $this->request->query,
-			'url' => $this->request->url
+			'url' => $this->request->url,
+			'contentType' => $this->request->env('CONTENT_TYPE'),
 		]));
 	}