|
3 | 3 | namespace TheCodingMachine\GraphQLite\Laravel\Providers; |
4 | 4 |
|
5 | 5 |
|
| 6 | +use GraphQL\Error\DebugFlag; |
| 7 | +use GraphQL\Executor\ExecutionResult; |
| 8 | +use GraphQL\Server\StandardServer; |
6 | 9 | use Orchestra\Testbench\TestCase; |
| 10 | +use TheCodingMachine\GraphQLite\Http\HttpCodeDeciderInterface; |
7 | 11 | use TheCodingMachine\GraphQLite\Laravel\Listeners\CachePurger; |
8 | 12 | use TheCodingMachine\GraphQLite\Schema; |
9 | 13 | use TheCodingMachine\TDBM\TDBMService; |
10 | 14 | use function json_decode; |
| 15 | +use Illuminate\Http\Request; |
| 16 | +use Symfony\Bridge\PsrHttpMessage\Factory\PsrHttpFactory; |
| 17 | +use TheCodingMachine\GraphQLite\Laravel\Controllers\GraphQLiteController; |
| 18 | +use Symfony\Component\HttpFoundation\Request as SymfonyRequest; |
| 19 | + |
11 | 20 |
|
12 | 21 | class GraphQLiteServiceProviderTest extends TestCase |
13 | 22 | { |
@@ -165,4 +174,45 @@ public function testCachePurger(): void |
165 | 174 | $cachePurger->handle(); |
166 | 175 | $this->assertTrue(true); |
167 | 176 | } |
| 177 | + |
| 178 | + /** |
| 179 | + * Asserts that the status code has been taken from the HttpCodeDeciderInterface. |
| 180 | + */ |
| 181 | + public function testChangeTheCodeDecider() |
| 182 | + { |
| 183 | + $this->app->instance(HttpCodeDeciderInterface::class, $this->newCodeDecider(418)); |
| 184 | + |
| 185 | + $controller = $this->newGraphQLiteController(); |
| 186 | + |
| 187 | + $response = $controller->index($this->newRequest()); |
| 188 | + |
| 189 | + $this->assertEquals(418, $response->getStatusCode()); |
| 190 | + } |
| 191 | + |
| 192 | + private function newCodeDecider(int $statusCode): HttpCodeDeciderInterface |
| 193 | + { |
| 194 | + return new class implements HttpCodeDeciderInterface { |
| 195 | + public function decideHttpStatusCode(ExecutionResult $result): int |
| 196 | + { |
| 197 | + return 418; |
| 198 | + } |
| 199 | + }; |
| 200 | + } |
| 201 | + |
| 202 | + private function newGraphQLiteController(): GraphQLiteController |
| 203 | + { |
| 204 | + $server = $this->app->make(StandardServer::class); |
| 205 | + $httpCodeDecider = $this->app->make(HttpCodeDeciderInterface::class); |
| 206 | + $messageFactory = $this->app->make(PsrHttpFactory::class); |
| 207 | + return new GraphQLiteController($server, $httpCodeDecider, $messageFactory, DebugFlag::RETHROW_UNSAFE_EXCEPTIONS); |
| 208 | + } |
| 209 | + |
| 210 | + private function newRequest(): Request |
| 211 | + { |
| 212 | + $baseRequest = SymfonyRequest::create('https://localhost', 'GET', [ |
| 213 | + 'query' => '{ testValidatorMultiple(foo:"192.168.1.1") }' |
| 214 | + ]); |
| 215 | + |
| 216 | + return Request::createFromBase($baseRequest); |
| 217 | + } |
168 | 218 | } |
0 commit comments