Skip to content

Commit

Permalink
WIP fix CI
Browse files Browse the repository at this point in the history
  • Loading branch information
loic425 authored and Zales0123 committed Oct 18, 2022
1 parent 95e7090 commit b6396c7
Show file tree
Hide file tree
Showing 3 changed files with 98 additions and 15 deletions.
2 changes: 1 addition & 1 deletion src/Bundle/Controller/ParametersParser.php
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ private function parseRequestValue($parameter, Request $request)
}

if (0 === strpos($parameter, '$')) {
return $request->get(substr($parameter, 1));
return $request->request->get(substr($parameter, 1));
}

if (0 === strpos($parameter, 'expr:')) {
Expand Down
24 changes: 23 additions & 1 deletion src/Bundle/Controller/RequestConfiguration.php
Original file line number Diff line number Diff line change
Expand Up @@ -358,7 +358,7 @@ public function getRequestParameter($parameter, $defaults = [])
{
return array_replace_recursive(
$defaults,
$this->request->get($parameter, []),
$this->getParameterFromRequest($this->request, $parameter, [])
);
}

Expand Down Expand Up @@ -605,4 +605,26 @@ public function isCsrfProtectionEnabled()
{
return $this->parameters->get('csrf_protection', true);
}

/**
* @param mixed $default The default value if the parameter key does not exist
*
* @return mixed
*/
private function getParameterFromRequest(Request $request, string $key, $default)
{
if ($request !== $result = $request->attributes->get($key, $request)) {
return $result;
}

if ($request->query->has($key)) {
return $request->query->all()[$key];
}

if ($request->request->has($key)) {
return $request->request->all()[$key];
}

return $default;
}
}
87 changes: 74 additions & 13 deletions src/Bundle/spec/Controller/RequestConfigurationSpec.php
Original file line number Diff line number Diff line change
Expand Up @@ -271,25 +271,50 @@ function it_has_no_filterable_parameter(Parameters $parameters): void
$this->getCriteria($defaultCriteria)->shouldHaveCount(1);
}

function it_has_criteria_parameter(Parameters $parameters, Request $request): void
function it_has_criteria_parameter(
Parameters $parameters,
Request $request,
ParameterBag $attributesBag,
ParameterBag $queryBag,
ParameterBag $requestBag
): void
{
$criteria = ['property' => 'myNewValue'];
$request->attributes = $attributesBag;
$request->query = $queryBag;
$request->request = $requestBag;

$parameters->get('filterable', false)->willReturn(true);
$parameters->get('criteria', Argument::any())->willReturn([]);
$request->get('criteria', [])->willReturn($criteria);

$attributesBag->get('criteria', $request)->willReturn($request);
$queryBag->has('criteria')->willReturn(true);
$queryBag->all()->willReturn(['criteria' => $criteria]);
$requestBag->get('criteria', [])->willReturn([]);

$this->getCriteria()->shouldReturn($criteria);
}

function it_allows_to_override_criteria_parameter_in_route(Parameters $parameters, Request $request): void
{
function it_allows_to_override_criteria_parameter_in_route(
Parameters $parameters,
Request $request,
ParameterBag $attributesBag,
ParameterBag $queryBag,
ParameterBag $requestBag
): void {
$criteria = ['property' => 'myValue'];
$overriddenCriteria = ['other_property' => 'myNewValue'];
$combinedCriteria = ['property' => 'myValue', 'other_property' => 'myNewValue'];
$request->attributes = $attributesBag;
$request->query = $queryBag;
$request->request = $requestBag;

$parameters->get('filterable', false)->willReturn(true);
$parameters->get('criteria', [])->willReturn($criteria);
$request->get('criteria', [])->willReturn($overriddenCriteria);
$attributesBag->get('criteria', $request)->willReturn($request);
$queryBag->has('criteria')->willReturn(true);
$queryBag->all()->willReturn(['criteria' => $overriddenCriteria]);
$requestBag->get('criteria', [])->willReturn([]);

$this->getCriteria()->shouldReturn($combinedCriteria);

Expand All @@ -298,13 +323,19 @@ function it_allows_to_override_criteria_parameter_in_route(Parameters $parameter

$parameters->get('filterable', false)->willReturn(true);
$parameters->get('criteria', Argument::any())->willReturn($criteria);
$request->get('criteria', [])->willReturn($overriddenCriteria);
$attributesBag->get('criteria', $request)->willReturn($request);
$queryBag->has('criteria')->willReturn(true);
$queryBag->all()->willReturn(['criteria' => $overriddenCriteria]);
$requestBag->get('criteria', [])->willReturn([]);

$this->getCriteria($defaultCriteria)->shouldReturn($combinedDefaultCriteria);

$parameters->get('filterable', false)->willReturn(true);
$parameters->get('criteria', [])->willReturn(['filter' => 'route']);
$request->get('criteria', [])->willReturn(['filter' => 'request']);
$attributesBag->get('criteria', $request)->willReturn($request);
$queryBag->has('criteria')->willReturn(true);
$queryBag->all()->willReturn(['criteria' => ['filter' => 'request']]);
$requestBag->get('criteria', [])->willReturn([]);

$this->getCriteria(['filter' => 'default'])->shouldReturn(['filter' => 'request']);
}
Expand All @@ -318,13 +349,25 @@ function it_checks_if_the_resource_is_sortable(Parameters $parameters): void
$this->isSortable()->shouldReturn(false);
}

function it_has_sorting_parameter(Parameters $parameters, Request $request): void
function it_has_sorting_parameter(
Parameters $parameters,
Request $request,
ParameterBag $attributesBag,
ParameterBag $queryBag,
ParameterBag $requestBag
): void
{
$sorting = ['property' => 'asc'];
$request->attributes = $attributesBag;
$request->query = $queryBag;
$request->request = $requestBag;

$parameters->get('sortable', false)->willReturn(true);
$parameters->get('sorting', Argument::any())->willReturn($sorting);
$request->get('sorting', [])->willReturn($sorting);
$attributesBag->get('sorting', $request)->willReturn($request);
$queryBag->has('sorting')->willReturn(true);
$queryBag->all()->willReturn(['sorting' => $sorting]);
$requestBag->get('sorting', [])->willReturn([]);

$this->getSorting()->shouldReturn($sorting);
}
Expand All @@ -340,15 +383,27 @@ function it_has_no_sortable_parameter(Parameters $parameters): void
$this->getSorting($defaultSorting)->shouldHaveCount(1);
}

function it_allows_to_override_sorting_parameter_in_route(Parameters $parameters, Request $request): void
function it_allows_to_override_sorting_parameter_in_route(
Parameters $parameters,
Request $request,
ParameterBag $attributesBag,
ParameterBag $queryBag,
ParameterBag $requestBag
): void
{
$sorting = ['property' => 'desc'];
$overriddenSorting = ['other_property' => 'asc'];
$combinedSorting = ['other_property' => 'asc', 'property' => 'desc'];
$request->attributes = $attributesBag;
$request->query = $queryBag;
$request->request = $requestBag;

$parameters->get('sortable', false)->willReturn(true);
$parameters->get('sorting', [])->willReturn($sorting);
$request->get('sorting', [])->willReturn($overriddenSorting);
$attributesBag->get('sorting', $request)->willReturn($request);
$queryBag->has('sorting')->willReturn(true);
$queryBag->all()->willReturn(['sorting' => $overriddenSorting]);
$requestBag->get('sorting', [])->willReturn([]);

$this->getSorting()->shouldReturn($combinedSorting);

Expand All @@ -357,13 +412,19 @@ function it_allows_to_override_sorting_parameter_in_route(Parameters $parameters

$parameters->get('sortable', false)->willReturn(true);
$parameters->get('sorting', Argument::any())->willReturn($sorting);
$request->get('sorting', [])->willReturn($overriddenSorting);
$attributesBag->get('sorting', $request)->willReturn($request);
$queryBag->has('sorting')->willReturn(true);
$queryBag->all()->willReturn(['sorting' => $overriddenSorting]);
$requestBag->get('sorting', [])->willReturn([]);

$this->getSorting($defaultSorting)->shouldReturn($combinedDefaultSorting);

$parameters->get('sortable', false)->willReturn(true);
$parameters->get('sorting', [])->willReturn(['sort' => 'route']);
$request->get('sorting', [])->willReturn(['sort' => 'request']);
$attributesBag->get('sorting', $request)->willReturn($request);
$queryBag->has('sorting')->willReturn(true);
$queryBag->all()->willReturn(['sorting' => ['sort' => 'request']]);
$requestBag->get('sorting', [])->willReturn([]);

$this->getSorting(['sort' => 'default'])->shouldReturn(['sort' => 'request']);
}
Expand Down

0 comments on commit b6396c7

Please sign in to comment.