diff --git a/app/Support/Api/ApiErrorResponseFactory.php b/app/Support/Api/ApiErrorResponseFactory.php new file mode 100644 index 0000000..6c70326 --- /dev/null +++ b/app/Support/Api/ApiErrorResponseFactory.php @@ -0,0 +1,21 @@ +json([ + 'error' => [ + 'code' => $code, + 'message' => $message, + 'details' => $details, + ], + ], $status); + } +} diff --git a/tests/Unit/Support/Api/ApiErrorResponseFactoryTest.php b/tests/Unit/Support/Api/ApiErrorResponseFactoryTest.php new file mode 100644 index 0000000..2febba6 --- /dev/null +++ b/tests/Unit/Support/Api/ApiErrorResponseFactoryTest.php @@ -0,0 +1,35 @@ +make( + code: 'test_error', + message: 'Test error message.', + status: 422, + details: ['field' => 'value'], + ); + + expect($response->getStatusCode())->toBe(422); + expect($response->getData(true))->toBe([ + 'error' => [ + 'code' => 'test_error', + 'message' => 'Test error message.', + 'details' => ['field' => 'value'], + ], + ]); +}); + +it('defaults to empty details and 400 status', function () { + $factory = app(ApiErrorResponseFactory::class); + + $response = $factory->make(code: 'some_error', message: 'Something went wrong.'); + + expect($response->getStatusCode())->toBe(400); + $data = $response->getData(true); + expect($data['error']['details'])->toBe([]); +});