Skip to content

Commit da95729

Browse files
committed
ACP2E-4090: [CLOUD] Customer Order filter not working for Dates
1 parent 36d4d6f commit da95729

File tree

2 files changed

+132
-8
lines changed

2 files changed

+132
-8
lines changed

app/code/Magento/SalesGraphQl/Model/Resolver/CustomerOrders/Query/OrderFilter.php

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<?php
22
/**
3-
* Copyright © Magento, Inc. All rights reserved.
4-
* See COPYING.txt for license details.
3+
* Copyright 2020 Adobe
4+
* All Rights Reserved.
55
*/
66
declare(strict_types=1);
77

@@ -40,15 +40,11 @@ class OrderFilter
4040
private $filterGroupBuilder;
4141

4242
/**
43-
* @param ScopeConfigInterface $scopeConfig
4443
* @param FilterBuilder $filterBuilder
4544
* @param FilterGroupBuilder $filterGroupBuilder
4645
* @param string[] $fieldTranslatorArray
47-
*
48-
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
4946
*/
5047
public function __construct(
51-
ScopeConfigInterface $scopeConfig,
5248
FilterBuilder $filterBuilder,
5349
FilterGroupBuilder $filterGroupBuilder,
5450
array $fieldTranslatorArray = []
@@ -75,7 +71,6 @@ public function createFilterGroups(
7571
array $storeIds
7672
): array {
7773
$filterGroups = [];
78-
$filter = [];
7974
$this->filterGroupBuilder->setFilters(
8075
[$this->filterBuilder->setField('customer_id')->setValue($userId)->setConditionType('eq')->create()]
8176
);
@@ -92,6 +87,7 @@ public function createFilterGroups(
9287
if (isset($this->fieldTranslatorArray[$field])) {
9388
$field = $this->fieldTranslatorArray[$field];
9489
}
90+
$filters = [];
9591
foreach ($cond as $condType => $value) {
9692
if ($condType === 'match') {
9793
if (is_array($value)) {
@@ -108,12 +104,14 @@ public function createFilterGroups(
108104
->setConditionType($condType)
109105
->create();
110106
}
107+
$filters[] = $filter;
111108
}
112109

113-
$this->filterGroupBuilder->setFilters([$filter]);
110+
$this->filterGroupBuilder->setFilters($filters);
114111
$filterGroups[] = $this->filterGroupBuilder->create();
115112
}
116113
}
114+
117115
return $filterGroups;
118116
}
119117
}
Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
<?php
2+
/**
3+
* Copyright 2025 Adobe
4+
* All Rights Reserved.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Magento\SalesGraphQl\Test\Unit\Model\Resolver\CustomerOrders\Query;
9+
10+
use Magento\Framework\Api\Filter;
11+
use Magento\Framework\Api\FilterBuilder;
12+
use Magento\Framework\Api\Search\FilterGroup;
13+
use Magento\Framework\Api\Search\FilterGroupBuilder;
14+
use Magento\SalesGraphQl\Model\Resolver\CustomerOrders\Query\OrderFilter;
15+
use PHPUnit\Framework\MockObject\MockObject;
16+
use PHPUnit\Framework\TestCase;
17+
18+
class OrderFilterTest extends TestCase
19+
{
20+
/**
21+
* @var FilterBuilder|MockObject
22+
*/
23+
private $filterBuilderMock;
24+
25+
/**
26+
* @var FilterGroupBuilder|MockObject
27+
*/
28+
private $filterGroupBuilderMock;
29+
30+
/**
31+
* @var OrderFilter
32+
*/
33+
private $model;
34+
35+
protected function setUp(): void
36+
{
37+
$this->filterBuilderMock = $this->createMock(FilterBuilder::class);
38+
$this->filterGroupBuilderMock = $this->createMock(FilterGroupBuilder::class);
39+
$this->model = new OrderFilter($this->filterBuilderMock, $this->filterGroupBuilderMock);
40+
}
41+
42+
public function testCreateFilterGroups(): void
43+
{
44+
$userId = 123;
45+
$storeId = 5;
46+
$storeIds = [3, 4];
47+
$args = [];
48+
49+
$customerFilterBuilderMock = $this->createMock(FilterBuilder::class);
50+
$customerFilterBuilderMock->expects(self::once())->method('setValue')->with($userId)->willReturnSelf();
51+
$customerFilterBuilderMock->expects(self::once())->method('setConditionType')->with('eq')->willReturnSelf();
52+
$customerFilterMock = $this->createMock(Filter::class);
53+
$customerFilterBuilderMock->expects(self::once())->method('create')->willReturn($customerFilterMock);
54+
$storeFilterBuilderMock = $this->createMock(FilterBuilder::class);
55+
$storeFilterBuilderMock->expects(self::once())->method('setValue')->with([3, 4, 5])->willReturnSelf();
56+
$storeFilterBuilderMock->expects(self::once())->method('setConditionType')->with('in')->willReturnSelf();
57+
$storeFilterMock = $this->createMock(Filter::class);
58+
$storeFilterBuilderMock->expects(self::once())->method('create')->willReturn($storeFilterMock);
59+
$this->filterBuilderMock->method('setField')
60+
->willReturnMap([
61+
['customer_id', $customerFilterBuilderMock],
62+
['store_id', $storeFilterBuilderMock],
63+
]);
64+
65+
$this->filterGroupBuilderMock->expects(self::exactly(2))->method('setFilters')->willReturnSelf();
66+
$customerFilterGroup = $this->createMock(FilterGroup::class);
67+
$storeFilterGroup = $this->createMock(FilterGroup::class);
68+
$this->filterGroupBuilderMock->expects(self::exactly(2))
69+
->method('create')
70+
->willReturnOnConsecutiveCalls($customerFilterGroup, $storeFilterGroup);
71+
72+
$result = $this->model->createFilterGroups($args, $userId, $storeId, $storeIds);
73+
self::assertEquals([$customerFilterGroup, $storeFilterGroup], $result);
74+
}
75+
76+
public function testCreateFilterGroupsWithDateRangeFilter(): void
77+
{
78+
$userId = 123;
79+
$storeId = 5;
80+
$storeIds = [3, 4];
81+
$args = [
82+
'filter' => [
83+
'order_date' => [
84+
'from' => '2025-02-01',
85+
'to' => '2025-03-30',
86+
],
87+
],
88+
];
89+
90+
$customerFilterBuilderMock = $this->createMock(FilterBuilder::class);
91+
$customerFilterBuilderMock->expects(self::once())->method('setValue')->with($userId)->willReturnSelf();
92+
$customerFilterBuilderMock->expects(self::once())->method('setConditionType')->with('eq')->willReturnSelf();
93+
$customerFilterMock = $this->createMock(Filter::class);
94+
$customerFilterBuilderMock->expects(self::once())->method('create')->willReturn($customerFilterMock);
95+
$storeFilterBuilderMock = $this->createMock(FilterBuilder::class);
96+
$storeFilterBuilderMock->expects(self::once())->method('setValue')->with([3, 4, 5])->willReturnSelf();
97+
$storeFilterBuilderMock->expects(self::once())->method('setConditionType')->with('in')->willReturnSelf();
98+
$storeFilterMock = $this->createMock(Filter::class);
99+
$storeFilterBuilderMock->expects(self::once())->method('create')->willReturn($storeFilterMock);
100+
$createdAtFilterBuilderMock = $this->createMock(FilterBuilder::class);
101+
$createdAtFilterBuilderMock->expects(self::exactly(2))->method('setValue')->willReturnSelf();
102+
$createdAtFilterBuilderMock->expects(self::exactly(2))->method('setConditionType')->willReturnSelf();
103+
$createdAtFromFilterMock = $this->createMock(Filter::class);
104+
$createdAtToFilterMock = $this->createMock(Filter::class);
105+
$createdAtFilterBuilderMock->expects(self::exactly(2))
106+
->method('create')
107+
->willReturnOnConsecutiveCalls($createdAtFromFilterMock, $createdAtToFilterMock);
108+
$this->filterBuilderMock->method('setField')
109+
->willReturnMap([
110+
['customer_id', $customerFilterBuilderMock],
111+
['store_id', $storeFilterBuilderMock],
112+
['created_at', $createdAtFilterBuilderMock],
113+
]);
114+
115+
$this->filterGroupBuilderMock->expects(self::exactly(3))->method('setFilters')->willReturnSelf();
116+
$customerFilterGroup = $this->createMock(FilterGroup::class);
117+
$storeFilterGroup = $this->createMock(FilterGroup::class);
118+
$createdAtFilterGroup = $this->createMock(FilterGroup::class);
119+
$this->filterGroupBuilderMock->expects(self::exactly(3))
120+
->method('create')
121+
->willReturnOnConsecutiveCalls($customerFilterGroup, $storeFilterGroup, $createdAtFilterGroup);
122+
123+
$result = $this->model->createFilterGroups($args, $userId, $storeId, $storeIds);
124+
self::assertEquals([$customerFilterGroup, $storeFilterGroup, $createdAtFilterGroup], $result);
125+
}
126+
}

0 commit comments

Comments
 (0)