Skip to content

Commit aa09f87

Browse files
authored
Merge pull request #12 from undabot/v2.3.1
Query param fetching fix
2 parents c2c8f24 + fcf3398 commit aa09f87

File tree

2 files changed

+21
-32
lines changed

2 files changed

+21
-32
lines changed

src/Http/Service/Factory/RequestFactory.php

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -71,14 +71,14 @@ public function getResourceRequest(Request $request, string $id): GetResourceReq
7171
{
7272
$this->requestValidator->assertValidRequest($request);
7373

74-
$includeString = $request->query->get(GetResourceRequest::INCLUDE_KEY, null);
74+
$includeString = $request->query->all()[GetResourceRequest::INCLUDE_KEY] ?? null;
7575
$include = null;
7676
if (null !== $includeString) {
7777
$include = explode(',', $includeString);
7878
}
7979

80-
/** @var array<string,string> $fields */
81-
$fields = $request->query->get(GetResourceRequest::FIELDS_KEY, null);
80+
/** @var null|array<string,string> $fields */
81+
$fields = $request->query->all()[GetResourceRequest::FIELDS_KEY] ?? null;
8282

8383
return new GetResourceRequest($id, $include, $fields);
8484
}
@@ -90,28 +90,26 @@ public function getResourceCollectionRequest(Request $request): GetResourceColle
9090
{
9191
$this->requestValidator->assertValidRequest($request);
9292

93-
$sortSet = $request->query->has(GetResourceCollectionRequest::SORT_KEY)
94-
? SortSet::make($request->query->get(GetResourceCollectionRequest::SORT_KEY) ?? '')
95-
: null;
93+
$sortFromRequest = $request->query->all()[GetResourceCollectionRequest::SORT_KEY] ?? '';
94+
$sortSet = (true === \is_string($sortFromRequest) && false === empty($sortFromRequest)) ? SortSet::make($sortFromRequest) : null;
9695

9796
/** @var array<string,int> $paginationFromRequest */
98-
$paginationFromRequest = $request->query->get(GetResourceCollectionRequest::PAGINATION_KEY) ?? [];
97+
$paginationFromRequest = $request->query->all()[GetResourceCollectionRequest::PAGINATION_KEY] ?? [];
9998
$pagination = false === empty($paginationFromRequest)
10099
? (new PaginationFactory())->fromArray($paginationFromRequest)
101100
: null;
102101

103-
/** @var array<string,string> $filterFromRequest */
104-
$filterFromRequest = $request->query->get(GetResourceCollectionRequest::FILTER_KEY);
105-
$filterSet = $request->query->has(GetResourceCollectionRequest::FILTER_KEY)
106-
? FilterSet::fromArray($filterFromRequest)
107-
: null;
102+
/** @var null|array<string,string> $filterFromRequest */
103+
$filterFromRequest = $request->query->all()[GetResourceCollectionRequest::FILTER_KEY] ?? null;
104+
$filterSet = null !== $filterFromRequest ? FilterSet::fromArray($filterFromRequest) : null;
108105

109-
$include = $request->query->has(GetResourceCollectionRequest::INCLUDE_KEY)
110-
? explode(',', $request->query->get(GetResourceCollectionRequest::INCLUDE_KEY) ?? '')
106+
$includeFromRequest = $request->query->all()[GetResourceCollectionRequest::INCLUDE_KEY] ?? '';
107+
$include = (true === \is_string($includeFromRequest) && false === empty($includeFromRequest))
108+
? explode(',', $includeFromRequest)
111109
: null;
112110

113-
/** @var array<int,string> $fields */
114-
$fields = $request->query->get(GetResourceCollectionRequest::FIELDS_KEY, null);
111+
/** @var null|array<int,string> $fields */
112+
$fields = $request->query->all()[GetResourceCollectionRequest::FIELDS_KEY] ?? null;
115113

116114
return new GetResourceCollectionRequest($pagination, $filterSet, $sortSet, $include, $fields);
117115
}

tests/Unit/Request/GetResourceCollectionRequestTest.php

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,7 @@ protected function setUp(): void
4141

4242
public function testItWithoutAnyParametersCanBeConstructed(): void
4343
{
44-
// $parameterBagMock = $this->createMock(ParameterBag::class);
45-
// $requestMock = $this->createMock(Request::class);
46-
$this->parameterBagMock->method('get')->willReturn(null);
44+
$this->parameterBagMock->method('all')->willReturn([]);
4745

4846
$getResourceCollectionRequest = $this->requestFactory->getResourceCollectionRequest($this->requestMock);
4947
static::assertInstanceOf(GetResourceCollectionRequest::class, $getResourceCollectionRequest);
@@ -58,22 +56,15 @@ public function testItWithoutAnyParametersCanBeConstructed(): void
5856
public function testItWithAllValidParametersCanBeConstructed(): void
5957
{
6058
$queryParamsMap = [
61-
['page', null, ['number' => 3, 'size' => 10]],
62-
['filter', null, ['priceMin' => 3, 'priceMax' => 10.5, 'name' => 'John']],
63-
['sort', null, 'name,-price,author.name'],
64-
['include', null, 'category,history,purchases'],
65-
['fields', null, ['author' => 'name,price,rating', 'book' => 'title,publisher']],
59+
'page' => ['number' => 3, 'size' => 10],
60+
'filter' => ['priceMin' => 3, 'priceMax' => 10.5, 'name' => 'John'],
61+
'sort' => 'name,-price,author.name',
62+
'include' => 'category,history,purchases',
63+
'fields' => ['author' => 'name,price,rating', 'book' => 'title,publisher'],
6664
];
6765

68-
$this->parameterBagMock->method('get')->willReturnMap($queryParamsMap);
66+
$this->parameterBagMock->method('all')->willReturn($queryParamsMap);
6967

70-
$this->parameterBagMock->method('has')->willReturnCallback(static function ($param) use ($queryParamsMap) {
71-
$filtered = array_filter($queryParamsMap, static function ($item) use ($param) {
72-
return ($item[0] ?? null) === $param;
73-
});
74-
75-
return 1 === \count($filtered);
76-
});
7768
$this->requestMock->query = $this->parameterBagMock;
7869

7970
$getResourceCollectionRequest = $this->requestFactory->getResourceCollectionRequest($this->requestMock);

0 commit comments

Comments
 (0)