-
Notifications
You must be signed in to change notification settings - Fork 581
Expand file tree
/
Copy pathHolodeck.php
More file actions
80 lines (63 loc) · 2.43 KB
/
Holodeck.php
File metadata and controls
80 lines (63 loc) · 2.43 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
<?php
namespace Twilio\Tests;
use Twilio\Http\Client;
use Twilio\Http\Response;
class Holodeck implements Client {
private $requests = [];
private $responses = [];
public function request(string $method, string $url,
array $params = [], array $data = [], array $headers = [],
string $user = null, string $password = null,
int $timeout = null): Response {
$this->requests[] = new Request($method, $url, $params, $data, $headers, $user, $password);
if (\count($this->responses) === 0) {
return new Response(404, null, null);
}
return \array_shift($this->responses);
}
public function mock(Response $response): void {
$this->responses[] = $response;
}
public function assertRequest(Request $request): void {
if ($this->hasRequest($request)) {
return;
}
$message = "Failed asserting that the following request exists: \n";
$message .= ' - ' . $this->printRequest($request);
$message .= "\n" . \str_repeat('-', 3) . "\n";
$message .= "Candidate Requests:\n";
foreach ($this->requests as $candidate) {
$message .= ' + ' . $this->printRequest($candidate) . "\n";
}
throw new \RuntimeException($message);
}
public function hasRequest(Request $request): bool {
foreach ($this->requests as $c) {
if (\strtolower($request->method) == \strtolower($c->method) &&
$request->url == $c->url &&
$request->params == $c->params &&
$request->data == $c->data) {
foreach ($request->headers as $h => $value) {
if ($c->headers[$h] != $value) {
return false;
}
}
return true;
}
}
return false;
}
protected function printRequest(Request $request): string {
$url = $request->url;
if ($request->params) {
$url .= '?' . \http_build_query($request->params);
}
$data = $request->data
? '-d ' . \http_build_query($request->data)
: '';
$headers = $request->headers
? '-h ' . \http_build_query($request->headers, null, ' ')
: '';
return \implode(' ', [\strtoupper($request->method), $url, $data, $headers]);
}
}