diff --git a/src/Barstool.php b/src/Barstool.php index b602e5c..1c59410 100755 --- a/src/Barstool.php +++ b/src/Barstool.php @@ -126,9 +126,13 @@ private static function getFatalData(FatalRequestException $exception): array private static function recordRequest(PendingRequest $data): void { - $uuid = Str::uuid()->toString(); + $uuid = $data->headers()->get('X-Barstool-UUID'); - $data->headers()->add('X-Barstool-UUID', $uuid); + if (is_null($uuid)) { + $uuid = Str::uuid()->toString(); + + $data->headers()->add('X-Barstool-UUID', $uuid); + } self::persist(RecordingType::REQUEST, self::getRequestData($data), $uuid); } diff --git a/tests/BarstoolTest.php b/tests/BarstoolTest.php index ca1c6ee..e7b634a 100644 --- a/tests/BarstoolTest.php +++ b/tests/BarstoolTest.php @@ -283,6 +283,55 @@ expect($barstool->response_headers)->toBe(['token' => 'abc123']); }); +it('stores the barstool correctly with and without a uuid provided in the request headers', function ($sendUuid) { + MockClient::global([ + RequestWithConnector::class => MockResponse::make( + body: [ + 'data' => [ + ['name' => 'John Wayne'], + ['name' => 'Billy the Kid'], + ], + ], + headers: ['token' => 'abc123'], + status: 200, + ), + ]); + + $uuid = (string) Str::uuid(); + $connector = new RandomConnector; + $request = new RequestWithConnector; + if ($sendUuid) { + $request->headers()->add('X-Barstool-UUID', $uuid); + } + $response = $connector->send($request); + + expect($response->status())->toBe(200); + expect($response->json())->toBe([ + 'data' => [ + ['name' => 'John Wayne'], + ['name' => 'Billy the Kid'], + ], + ]); + expect($response->headers()->get('token'))->toBe('abc123'); + + $request = $response->getPendingRequest(); + $requestHeaders = [ + 'testing' => 'headers', + 'X-Barstool-UUID' => $uuid = $request->headers()->get('X-Barstool-UUID'), + ]; + expect($request->headers()->all())->toBe($requestHeaders); + + assertDatabaseCount('barstools', 1); + + if ($sendUuid) { + $barstool = Barstool::where('uuid', $uuid)->sole(); + expect($barstool->uuid)->toBe($uuid); + } +})->with([ + true, + false, +]); + it('correctly records body, query, status & method', function () { MockClient::global([ RequestWithConnector::class => MockResponse::make(