Skip to content

Commit cd804a3

Browse files
committed
Mix in documented paramters with anually specified ones when making requests
1 parent e730593 commit cd804a3

File tree

6 files changed

+35
-18
lines changed

6 files changed

+35
-18
lines changed

src/Tools/Generator.php

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,13 @@ public function processRoute(Route $route, array $rulesToApply = [])
4646

4747
$routeGroup = $this->getRouteGroup($controller, $method);
4848
$docBlock = $this->parseDocBlock($method);
49-
$content = ResponseResolver::getResponse($route, $docBlock['tags'], $rulesToApply);
49+
$bodyParameters = $this->getBodyParametersFromDocBlock($docBlock['tags']);
50+
$queryParameters = $this->getQueryParametersFromDocBlock($docBlock['tags']);
51+
$content = ResponseResolver::getResponse($route, $docBlock['tags'], [
52+
'rules' => $rulesToApply,
53+
'body' => $bodyParameters,
54+
'query' => $queryParameters,
55+
]);
5056

5157
$parsedRoute = [
5258
'id' => md5($this->getUri($route).':'.implode($this->getMethods($route))),
@@ -55,8 +61,8 @@ public function processRoute(Route $route, array $rulesToApply = [])
5561
'description' => $docBlock['long'],
5662
'methods' => $this->getMethods($route),
5763
'uri' => $this->getUri($route),
58-
'bodyParameters' => $this->getBodyParametersFromDocBlock($docBlock['tags']),
59-
'queryParameters' => $this->getQueryParametersFromDocBlock($docBlock['tags']),
64+
'bodyParameters' => $bodyParameters,
65+
'queryParameters' => $queryParameters,
6066
'authenticated' => $this->getAuthStatusFromDocBlock($docBlock['tags']),
6167
'response' => $content,
6268
'showresponse' => ! empty($content),
@@ -131,7 +137,13 @@ protected function getQueryParametersFromDocBlock(array $tags)
131137
$required = trim($required) == 'required' ? true : false;
132138
}
133139

134-
return [$name => compact('description', 'required')];
140+
if (str_contains($description, ['number', 'count', 'page'])) {
141+
$value = $this->generateDummyValue('integer');
142+
} else {
143+
$value = $this->generateDummyValue('string');
144+
}
145+
146+
return [$name => compact('description', 'required', 'value')];
135147
})->toArray();
136148

137149
return $parameters;

src/Tools/ResponseResolver.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,21 +25,21 @@ public function __construct(Route $route)
2525
$this->route = $route;
2626
}
2727

28-
private function resolve(array $tags, array $rulesToApply)
28+
private function resolve(array $tags, array $routeProps)
2929
{
3030
$response = null;
3131
foreach (static::$strategies as $strategy) {
3232
$strategy = new $strategy();
33-
$response = $strategy($this->route, $tags, $rulesToApply);
33+
$response = $strategy($this->route, $tags, $routeProps);
3434
if (! is_null($response)) {
3535
return $this->getResponseContent($response);
3636
}
3737
}
3838
}
3939

40-
public static function getResponse($route, $tags, $rulesToApply)
40+
public static function getResponse($route, $tags, $routeProps)
4141
{
42-
return (new static($route))->resolve($tags, $rulesToApply);
42+
return (new static($route))->resolve($tags, $routeProps);
4343
}
4444

4545
/**

src/Tools/ResponseStrategies/ResponseCallStrategy.php

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,15 @@
1212
*/
1313
class ResponseCallStrategy
1414
{
15-
public function __invoke(Route $route, array $tags, array $rulesToApply)
15+
public function __invoke(Route $route, array $tags, array $routeProps)
1616
{
17-
$rulesToApply = $rulesToApply['response_calls'] ?? [];
17+
$rulesToApply = $routeProps['rules']['response_calls'] ?? [];
1818
if (! $this->shouldMakeApiCall($route, $rulesToApply)) {
1919
return;
2020
}
2121

2222
$this->configureEnvironment($rulesToApply);
23-
$request = $this->prepareRequest($route, $rulesToApply);
23+
$request = $this->prepareRequest($route, $rulesToApply, $routeProps['body'], $routeProps['query']);
2424
try {
2525
$response = $this->makeApiCall($request);
2626
} catch (\Exception $e) {
@@ -38,15 +38,20 @@ private function configureEnvironment(array $rulesToApply)
3838
$this->setEnvironmentVariables($rulesToApply['env'] ?? []);
3939
}
4040

41-
private function prepareRequest(Route $route, array $rulesToApply)
41+
private function prepareRequest(Route $route, array $rulesToApply, array $bodyParams, array $queryParams)
4242
{
4343
$uri = $this->replaceUrlParameterBindings($route, $rulesToApply['bindings'] ?? []);
4444
$routeMethods = $this->getMethods($route);
4545
$method = array_shift($routeMethods);
4646
$request = Request::create($uri, $method, [], [], [], $this->transformHeadersToServerVars($rulesToApply['headers'] ?? []));
4747
$request = $this->addHeaders($request, $route, $rulesToApply['headers'] ?? []);
48-
$request = $this->addQueryParameters($request, $rulesToApply['query'] ?? []);
49-
$request = $this->addBodyParameters($request, $rulesToApply['body'] ?? []);
48+
49+
// Mix in parsed parameters with manually specified parameters.
50+
$queryParams = collect($queryParams)->map->value->merge($rulesToApply['query'] ?? [])->toArray();
51+
$bodyParams = collect($bodyParams)->map->value->merge($rulesToApply['body'] ?? [])->toArray();
52+
53+
$request = $this->addQueryParameters($request, $queryParams);
54+
$request = $this->addBodyParameters($request, $bodyParams);
5055

5156
return $request;
5257
}
@@ -188,7 +193,7 @@ private function makeApiCall(Request $request)
188193
*
189194
* @return \Symfony\Component\HttpFoundation\Response
190195
*/
191-
private function callLaravelRoute($request): \Symfony\Component\HttpFoundation\Response
196+
private function callLaravelRoute(Request $request): \Symfony\Component\HttpFoundation\Response
192197
{
193198
$kernel = app(\Illuminate\Contracts\Http\Kernel::class);
194199
$response = $kernel->handle($request);

src/Tools/ResponseStrategies/ResponseTagStrategy.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
*/
1111
class ResponseTagStrategy
1212
{
13-
public function __invoke(Route $route, array $tags, array $rulesToApply)
13+
public function __invoke(Route $route, array $tags, array $routeProps)
1414
{
1515
return $this->getDocBlockResponse($tags);
1616
}

src/Tools/ResponseStrategies/TransformerTagsStrategy.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
*/
1616
class TransformerTagsStrategy
1717
{
18-
public function __invoke(Route $route, array $tags, array $rulesToApply)
18+
public function __invoke(Route $route, array $tags, array $routeProps)
1919
{
2020
return $this->getTransformerResponse($tags);
2121
}

tests/Unit/GeneratorTestCase.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ public function can_parse_transformer_collection_tag_with_model()
228228
/** @test */
229229
public function can_call_route_and_generate_response()
230230
{
231-
$route = $this->createRoute('PUT', '/shouldFetchRouteResponse', 'shouldFetchRouteResponse', true);
231+
$route = $this->createRoute('POST', '/shouldFetchRouteResponse', 'shouldFetchRouteResponse', true);
232232

233233
$rules = [
234234
'response_calls' => [

0 commit comments

Comments
 (0)