PageRenderTime 25ms CodeModel.GetById 25ms RepoModel.GetById 0ms app.codeStats 0ms

/vendor/codeception/codeception/src/Codeception/Lib/Connector/ZF1.php

https://gitlab.com/merial/WETE_Ryhma3
PHP | 144 lines | 97 code | 24 blank | 23 comment | 5 complexity | 7e21f0b7235722ecf4bedf9884e5fe4c MD5 | raw file
  1. <?php
  2. namespace Codeception\Lib\Connector;
  3. use Symfony\Component\BrowserKit\Client;
  4. use Symfony\Component\BrowserKit\Response;
  5. use Symfony\Component\BrowserKit\Request as BrowserKitRequest;
  6. class ZF1 extends Client
  7. {
  8. use Shared\PhpSuperGlobalsConverter;
  9. /**
  10. * @var \Zend_Controller_Front
  11. */
  12. protected $front;
  13. /**
  14. * @var \Zend_Application
  15. */
  16. protected $bootstrap;
  17. /**
  18. * @var \Zend_Controller_Request_HttpTestCase
  19. */
  20. protected $zendRequest;
  21. public function setBootstrap($bootstrap)
  22. {
  23. $this->bootstrap = $bootstrap;
  24. $this->front = $this->bootstrap
  25. ->getBootstrap()
  26. ->getResource('frontcontroller');
  27. $this->front
  28. ->throwExceptions(true)
  29. ->returnResponse(false);
  30. }
  31. public function doRequest($request)
  32. {
  33. // redirector should not exit
  34. $redirector = \Zend_Controller_Action_HelperBroker::getStaticHelper('redirector');
  35. $redirector->setExit(false);
  36. // json helper should not exit
  37. $json = \Zend_Controller_Action_HelperBroker::getStaticHelper('json');
  38. $json->suppressExit = true;
  39. $zendRequest = new \Zend_Controller_Request_HttpTestCase();
  40. $zendRequest->setMethod($request->getMethod());
  41. $zendRequest->setCookies($request->getCookies());
  42. $zendRequest->setParams($request->getParameters());
  43. // Sf2's BrowserKit does not distinguish between GET, POST, PUT etc.,
  44. // so we set all parameters in ZF's request here to not break apps
  45. // relying on $request->getPost()
  46. $zendRequest->setPost($request->getParameters());
  47. $zendRequest->setRawBody($request->getContent());
  48. $uri = $request->getUri();
  49. $queryString = parse_url($uri, PHP_URL_QUERY);
  50. $requestUri = parse_url($uri, PHP_URL_PATH);
  51. if (!empty($queryString)) {
  52. $requestUri .= '?' . $queryString;
  53. }
  54. $zendRequest->setRequestUri($requestUri);
  55. $zendRequest->setHeaders($this->extractHeaders($request));
  56. $_FILES = $this->remapFiles($request->getFiles());
  57. $_SERVER = array_merge($_SERVER, $request->getServer());
  58. $zendResponse = new \Zend_Controller_Response_HttpTestCase;
  59. $this->front->setRequest($zendRequest)->setResponse($zendResponse);
  60. ob_start();
  61. try {
  62. $this->bootstrap->run();
  63. $_GET = $_POST = [];
  64. } catch (\Exception $e) {
  65. ob_end_clean();
  66. $_GET = $_POST = [];
  67. throw $e;
  68. }
  69. ob_end_clean();
  70. $this->zendRequest = $zendRequest;
  71. $response = new Response(
  72. $zendResponse->getBody(),
  73. $zendResponse->getHttpResponseCode(),
  74. $this->formatResponseHeaders($zendResponse)
  75. );
  76. return $response;
  77. }
  78. /**
  79. * Format up the ZF1 response headers into Symfony\Component\BrowserKit\Response headers format.
  80. *
  81. * @param \Zend_Controller_Response_Abstract $response The ZF1 Response Object.
  82. * @return array the clean key/value headers
  83. */
  84. private function formatResponseHeaders (\Zend_Controller_Response_Abstract $response) {
  85. $headers = array();
  86. foreach ($response->getHeaders() as $header) {
  87. $name = $header['name'];
  88. if (array_key_exists($name, $headers)) {
  89. if ($header['replace']) {
  90. $headers[$name] = $header['value'];
  91. }
  92. } else {
  93. $headers[$name] = $header['value'];
  94. }
  95. }
  96. return $headers;
  97. }
  98. /**
  99. * @return \Zend_Controller_Request_HttpTestCase
  100. */
  101. public function getZendRequest()
  102. {
  103. return $this->zendRequest;
  104. }
  105. private function extractHeaders(BrowserKitRequest $request)
  106. {
  107. $headers = [];
  108. $server = $request->getServer();
  109. $contentHeaders = array('Content-Length' => true, 'Content-Md5' => true, 'Content-Type' => true);
  110. foreach ($server as $header => $val) {
  111. $header = implode('-', array_map('ucfirst', explode('-', strtolower(str_replace('_', '-', $header)))));
  112. if (strpos($header, 'Http-') === 0) {
  113. $headers[substr($header, 5)] = $val;
  114. } elseif (isset($contentHeaders[$header])) {
  115. $headers[$header] = $val;
  116. }
  117. }
  118. return $headers;
  119. }
  120. }