%PDF- %PDF-
Direktori : /var/www/html/hr/api/vendor/laravel/framework/src/Illuminate/Http/Client/ |
Current File : /var/www/html/hr/api/vendor/laravel/framework/src/Illuminate/Http/Client/Factory.php |
<?php namespace Illuminate\Http\Client; use Closure; use function GuzzleHttp\Promise\promise_for; use GuzzleHttp\Psr7\Response as Psr7Response; use Illuminate\Support\Str; use Illuminate\Support\Traits\Macroable; use PHPUnit\Framework\Assert as PHPUnit; class Factory { use Macroable { __call as macroCall; } /** * The stub callables that will handle requests. * * @var \Illuminate\Support\Collection */ protected $stubCallbacks; /** * Indicates if the factory is recording requests and responses. * * @var bool */ protected $recording = false; /** * The recorded response array. * * @var array */ protected $recorded = []; /** * All created response sequences. * * @var array */ protected $responseSequences = []; /** * Create a new factory instance. * * @return void */ public function __construct() { $this->stubCallbacks = collect(); } /** * Create a new response instance for use during stubbing. * * @param array|string $body * @param int $status * @param array $headers * @return \GuzzleHttp\Promise\PromiseInterface */ public static function response($body = null, $status = 200, $headers = []) { if (is_array($body)) { $body = json_encode($body); $headers['Content-Type'] = 'application/json'; } return promise_for(new Psr7Response($status, $headers, $body)); } /** * Get an invokable object that returns a sequence of responses in order for use during stubbing. * * @param array $responses * @return \Illuminate\Http\Client\ResponseSequence */ public function sequence(array $responses = []) { return $this->responseSequences[] = new ResponseSequence($responses); } /** * Register a stub callable that will intercept requests and be able to return stub responses. * * @param callable|array $callback * @return $this */ public function fake($callback = null) { $this->record(); if (is_null($callback)) { $callback = function () { return static::response(); }; } if (is_array($callback)) { foreach ($callback as $url => $callable) { $this->stubUrl($url, $callable); } return $this; } $this->stubCallbacks = $this->stubCallbacks->merge(collect([ $callback instanceof Closure ? $callback : function () use ($callback) { return $callback; }, ])); return $this; } /** * Register a response sequence for the given URL pattern. * * @param string $url * @return \Illuminate\Http\Client\ResponseSequence */ public function fakeSequence($url = '*') { return tap($this->sequence(), function ($sequence) use ($url) { $this->fake([$url => $sequence]); }); } /** * Stub the given URL using the given callback. * * @param string $url * @param \Illuminate\Http\Client\Response|\GuzzleHttp\Promise\PromiseInterface|callable $callback * @return $this */ public function stubUrl($url, $callback) { return $this->fake(function ($request, $options) use ($url, $callback) { if (! Str::is(Str::start($url, '*'), $request->url())) { return; } return $callback instanceof Closure || $callback instanceof ResponseSequence ? $callback($request, $options) : $callback; }); } /** * Begin recording request / response pairs. * * @return $this */ protected function record() { $this->recording = true; return $this; } /** * Record a request response pair. * * @param \Illuminate\Http\Client\Request $request * @param \Illuminate\Http\Client\Response $response * @return void */ public function recordRequestResponsePair($request, $response) { if ($this->recording) { $this->recorded[] = [$request, $response]; } } /** * Assert that a request / response pair was recorded matching a given truth test. * * @param callable $callback * @return void */ public function assertSent($callback) { PHPUnit::assertTrue( $this->recorded($callback)->count() > 0, 'An expected request was not recorded.' ); } /** * Assert that every created response sequence is empty. * * @return void */ public function assertSequencesAreEmpty() { foreach ($this->responseSequences as $responseSequence) { PHPUnit::assertTrue( $responseSequence->isEmpty(), 'Not all response sequences are empty.' ); } } /** * Get a collection of the request / response pairs matching the given truth test. * * @param callable $callback * @return \Illuminate\Support\Collection */ public function recorded($callback) { if (empty($this->recorded)) { return collect(); } $callback = $callback ?: function () { return true; }; return collect($this->recorded)->filter(function ($pair) use ($callback) { return $callback($pair[0], $pair[1]); }); } /** * Execute a method against a new pending request instance. * * @param string $method * @param array $parameters * @return mixed */ public function __call($method, $parameters) { if (static::hasMacro($method)) { return $this->macroCall($method, $parameters); } return tap(new PendingRequest($this), function ($request) { $request->stub($this->stubCallbacks); })->{$method}(...$parameters); } }