Skip to content

Commit e835ebc

Browse files
committed
AC-1805::Magento2.4 GraphQL CustomerOrders Query Logic
1 parent 2605796 commit e835ebc

File tree

3 files changed

+144
-5
lines changed

3 files changed

+144
-5
lines changed

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

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,6 @@ public function createFilterGroups(
8181
$filterGroups[] = $this->filterGroupBuilder->create();
8282

8383
if (isset($args['filter'])) {
84-
$filters = [];
8584
foreach ($args['filter'] as $field => $cond) {
8685
if (isset($this->fieldTranslatorArray[$field])) {
8786
$field = $this->fieldTranslatorArray[$field];
@@ -92,21 +91,25 @@ public function createFilterGroups(
9291
throw new InputException(__('Invalid match filter'));
9392
}
9493
$searchValue = $value !== null ? str_replace('%', '', $value) : '';
95-
$filters[] = $this->filterBuilder->setField($field)
94+
$filters = $this->filterBuilder->setField($field)
9695
->setValue("%{$searchValue}%")
9796
->setConditionType('like')
9897
->create();
98+
$this->filterGroupBuilder->setFilters([$filters]);
99+
$filterGroups[] = $this->filterGroupBuilder->create();
99100
} else {
100-
$filters[] = $this->filterBuilder->setField($field)
101+
$filters = $this->filterBuilder->setField($field)
101102
->setValue($value)
102103
->setConditionType($condType)
103104
->create();
105+
$this->filterGroupBuilder->setFilters([$filters]);
106+
$filterGroups[] = $this->filterGroupBuilder->create();
104107
}
108+
105109
}
106110
}
107111

108-
$this->filterGroupBuilder->setFilters($filters);
109-
$filterGroups[] = $this->filterGroupBuilder->create();
112+
110113
}
111114
return $filterGroups;
112115
}
Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Magento\GraphQl\Sales;
9+
10+
use Exception;
11+
use Magento\Integration\Api\CustomerTokenServiceInterface;
12+
use Magento\TestFramework\TestCase\GraphQlAbstract;
13+
use Magento\TestFramework\Helper\Bootstrap;
14+
15+
/**
16+
* Class OrdersTest
17+
*/
18+
class CustomerOrdersTest extends GraphQlAbstract
19+
{
20+
/**
21+
* @var CustomerTokenServiceInterface
22+
*/
23+
private $customerTokenService;
24+
25+
protected function setUp(): void
26+
{
27+
parent::setUp();
28+
$this->customerTokenService = Bootstrap::getObjectManager()->get(CustomerTokenServiceInterface::class);
29+
}
30+
31+
/**
32+
* @magentoApiDataFixture Magento/Customer/_files/customer.php
33+
* @magentoApiDataFixture Magento/Sales/_files/orders_with_customer.php
34+
*/
35+
public function testOrdersQuery()
36+
{
37+
$query =
38+
<<<QUERY
39+
query {
40+
customer {
41+
orders(filter: {
42+
created_at: {
43+
from: "2022-09-04"
44+
to: "2022-09-09"
45+
}}) {
46+
items {
47+
number
48+
status
49+
created_at
50+
}
51+
}
52+
}
53+
}
54+
QUERY;
55+
56+
57+
$currentEmail = '[email protected]';
58+
$currentPassword = 'password';
59+
$response = $this->graphQlQuery($query, [], '', $this->getCustomerAuthHeaders($currentEmail, $currentPassword));
60+
61+
$expectedData = [
62+
[
63+
'number' => '100000002',
64+
'status' => 'Processing',
65+
'created_at' => "2022-09-04 00:00:00"
66+
],
67+
[
68+
'number' => '100000004',
69+
'status' => 'Closed',
70+
'created_at' => "2022-09-05 00:00:00"
71+
],
72+
[
73+
'number' => '100000005',
74+
'status' => 'Complete',
75+
'created_at' => "2022-09-08 00:00:00"
76+
],
77+
[
78+
'number' => '100000006',
79+
'status' => 'Complete',
80+
'created_at' => "2022-09-09 00:00:00"
81+
]
82+
];
83+
84+
$actualData = $response['customer']['orders']['items'];
85+
foreach ($expectedData as $key => $data) {
86+
$this->assertEquals(
87+
$data['number'],
88+
$actualData[$key]['number'],
89+
"order_number is different than the expected for order - " . $data['number']
90+
);
91+
92+
$this->assertEquals(
93+
$data['created_at'],
94+
$actualData[$key]['created_at'],
95+
"created_at is different than the expected for order - " . $data['created_at']
96+
);
97+
}
98+
}
99+
100+
/**
101+
*/
102+
public function testOrdersQueryNotAuthorized()
103+
{
104+
$this->expectException(\Exception::class);
105+
$this->expectExceptionMessage('The current customer isn\'t authorized.');
106+
107+
$query = <<<QUERY
108+
{
109+
customerOrders {
110+
items {
111+
increment_id
112+
grand_total
113+
}
114+
}
115+
}
116+
QUERY;
117+
$this->graphQlQuery($query);
118+
}
119+
120+
/**
121+
* @param string $email
122+
* @param string $password
123+
* @return array
124+
* @throws \Magento\Framework\Exception\AuthenticationException
125+
*/
126+
private function getCustomerAuthHeaders(string $email, string $password): array
127+
{
128+
$customerToken = $this->customerTokenService->createCustomerAccessToken($email, $password);
129+
return ['Authorization' => 'Bearer ' . $customerToken];
130+
}
131+
}

dev/tests/integration/testsuite/Magento/Sales/_files/orders_with_customer.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
'base_grand_total' => 120.00,
3535
'store_id' => 1,
3636
'website_id' => 1,
37+
'created_at' => '2022-09-04'
3738
],
3839
[
3940
'increment_id' => '100000003',
@@ -45,6 +46,7 @@
4546
'total_paid' => 130.00,
4647
'store_id' => 0,
4748
'website_id' => 0,
49+
'created_at' => '2022-09-10'
4850
],
4951
[
5052
'increment_id' => '100000004',
@@ -55,6 +57,7 @@
5557
'subtotal' => 140.00,
5658
'store_id' => 1,
5759
'website_id' => 1,
60+
'created_at' => '2022-09-05'
5861
],
5962
[
6063
'increment_id' => '100000005',
@@ -66,6 +69,7 @@
6669
'total_paid' => 150.00,
6770
'store_id' => 1,
6871
'website_id' => 1,
72+
'created_at' => '2022-09-08'
6973
],
7074
[
7175
'increment_id' => '100000006',
@@ -77,6 +81,7 @@
7781
'total_paid' => 160.00,
7882
'store_id' => 1,
7983
'website_id' => 1,
84+
'created_at' => '2022-09-09'
8085
],
8186
];
8287

0 commit comments

Comments
 (0)