diff --git a/lib/Cake/Test/Case/TestSuite/ControllerTestCaseTest.php b/lib/Cake/Test/Case/TestSuite/ControllerTestCaseTest.php index af124be1d64..cf6bbb85ad9 100644 --- a/lib/Cake/Test/Case/TestSuite/ControllerTestCaseTest.php +++ b/lib/Cake/Test/Case/TestSuite/ControllerTestCaseTest.php @@ -542,4 +542,23 @@ public function testComponentsSameRequestAndResponse() { $this->assertSame($this->Case->controller->request, $this->Case->controller->RequestHandler->request); } +/** + * Test that testAction() doesn't destroy data in GET & POST + * + * @return void + */ + public function testRestoreGetPost() { + $restored = array('new' => 'value'); + + $_GET = $restored; + $_POST = $restored; + + $this->Case->generate('TestsApps'); + $options = array('method' => 'get'); + $this->Case->testAction('/tests_apps/index', $options); + + $this->assertEquals($restored, $_GET); + $this->assertEquals($restored, $_POST); + } + } diff --git a/lib/Cake/TestSuite/ControllerTestCase.php b/lib/Cake/TestSuite/ControllerTestCase.php index c017942d3b2..ad279785f43 100644 --- a/lib/Cake/TestSuite/ControllerTestCase.php +++ b/lib/Cake/TestSuite/ControllerTestCase.php @@ -217,6 +217,8 @@ protected function _testAction($url = '', $options = array()) { 'return' => 'result' ), $options); + $restore = array('get' => $_GET, 'post' => $_POST); + $_SERVER['REQUEST_METHOD'] = strtoupper($options['method']); if (is_array($options['data'])) { if (strtoupper($options['method']) == 'GET') { @@ -272,6 +274,10 @@ protected function _testAction($url = '', $options = array()) { } $this->__dirtyController = true; $this->headers = $Dispatch->response->header(); + + $_GET = $restore['get']; + $_POST = $restore['post']; + return $this->{$options['return']}; }