|
|
- <?php
- namespace p3k\HTTP\Tests;
-
- use p3k\HTTP\Pinnable;
- use p3k\HTTP\Transport;
-
- // Answers from a table of canned responses and records every request it
- // was asked to make, and what it was pinned to at the time.
- class RecordingTransport implements Transport, Pinnable {
-
- public $requests = [];
- public $max_redirects = null;
- private $pinned = null;
- private $responses;
-
- /** @param array $responses url => [code, headers string, body] */
- public function __construct(array $responses) {
- $this->responses = $responses;
- }
-
- public function pin_addresses($resolve) { $this->pinned = $resolve; }
- public function set_timeout($timeout) {}
- public function set_max_redirects($max) { $this->max_redirects = $max; }
-
- public function get($url, $headers=[]) { return $this->answer('GET', $url, false, $headers); }
- public function post($url, $body, $headers=[]) { return $this->answer('POST', $url, $body, $headers); }
- public function put($url, $body, $headers=[]) { return $this->answer('PUT', $url, $body, $headers); }
- public function head($url, $headers=[]) { return $this->answer('HEAD', $url, false, $headers); }
-
- private function answer($method, $url, $body, $headers) {
- $this->requests[] = ['method' => $method, 'url' => $url, 'body' => $body, 'headers' => $headers, 'pinned' => $this->pinned];
- list($code, $header, $responseBody) = $this->responses[$url] ?? [404, '', 'not found'];
- return [
- 'code' => $code,
- 'header' => "HTTP/1.1 $code X\r\n" . $header,
- 'body' => $responseBody,
- 'error' => '',
- 'error_description' => '',
- 'url' => $url,
- 'debug' => '',
- ];
- }
- }
|