From 39bfa1bca64ca1be4ff422c351c51d2ac462f99e Mon Sep 17 00:00:00 2001 From: Sammyjo20 <29132017+Sammyjo20@users.noreply.github.com> Date: Wed, 7 Feb 2024 07:24:01 +0000 Subject: [PATCH] Feature | Reuse Global Mock Client With Saloon::fake() --- src/Saloon.php | 8 ++++++-- tests/Feature/MockRequestTest.php | 20 ++++++++++++++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/src/Saloon.php b/src/Saloon.php index 7c8dec9..ded0f72 100644 --- a/src/Saloon.php +++ b/src/Saloon.php @@ -36,7 +36,11 @@ class Saloon */ public static function fake(array $responses): MockClient { - return MockClient::global($responses); + $mockClient = static::mockClient(); + + $mockClient->addResponses($responses); + + return $mockClient; } /** @@ -44,7 +48,7 @@ public static function fake(array $responses): MockClient */ public static function mockClient(): MockClient { - return MockClient::global(); + return MockClient::getGlobal() ?? MockClient::global(); } /** diff --git a/tests/Feature/MockRequestTest.php b/tests/Feature/MockRequestTest.php index fda8c62..447dd5b 100644 --- a/tests/Feature/MockRequestTest.php +++ b/tests/Feature/MockRequestTest.php @@ -2,6 +2,7 @@ declare(strict_types=1); +use Saloon\Http\Faking\MockClient; use Saloon\Http\PendingRequest; use Saloon\Laravel\Facades\Saloon; use Saloon\Http\Faking\MockResponse; @@ -231,3 +232,22 @@ function (PendingRequest $request): MockResponse { expect($responseA->json())->toEqual(['request' => 'https://tests.saloon.dev/api/user']); expect($responseA->status())->toEqual(200); }); + +test('the same global mock client is reused on further calls', function () { + $mockClientA = Saloon::fake([ + new MockResponse(['name' => 'Sam'], 200), + ]); + + $mockClientB = Saloon::fake([ + new MockResponse(['name' => 'Alex'], 200), + ]); + + expect(MockClient::getGlobal())->toEqual(new MockClient([ + new MockResponse(['name' => 'Sam'], 200), + new MockResponse(['name' => 'Alex'], 200), + ])); + + expect($mockClientA)->toBe($mockClientB); + expect($mockClientA)->toBe(Saloon::mockClient()); + expect($mockClientB)->toBe(Saloon::mockClient()); +});