Skip to content

Commit 044ea39

Browse files
PWA-2898: Adding Magento_SalesGraphQlAux to provide order state (#28)
* Adding Magento_SalesGraphQlAux to provide order state * PWA-2898: Adding Magento_SalesGraphQlAux to provide order state * PWA-2898: Adding Magento_SalesGraphQlAux to provide order state * PWA-2898: Adding Magento_SalesGraphQlAux to provide order state Co-authored-by: Kristof Ringleff, Fooman <kristof@fooman.co.nz>
1 parent 0794521 commit 044ea39

File tree

10 files changed

+201
-2
lines changed

10 files changed

+201
-2
lines changed
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
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\SalesGraphQlAux\Model\Resolver;
9+
10+
use Magento\Framework\Exception\LocalizedException;
11+
use Magento\Framework\GraphQl\Config\Element\Field;
12+
use Magento\Framework\GraphQl\Query\ResolverInterface;
13+
use Magento\Framework\GraphQl\Schema\Type\ResolveInfo;
14+
use Magento\Sales\Api\Data\OrderInterface;
15+
16+
/**
17+
* @inheritdoc
18+
*/
19+
class OrderState implements ResolverInterface
20+
{
21+
/**
22+
* @inheritDoc
23+
*/
24+
public function resolve(
25+
Field $field,
26+
$context,
27+
ResolveInfo $info,
28+
array $value = null,
29+
array $args = null
30+
) {
31+
if (!(($value['model'] ?? null) instanceof OrderInterface)) {
32+
throw new LocalizedException(__('"model" value should be specified, use customer query.'));
33+
}
34+
35+
/** @var OrderInterface $order */
36+
$order = $value['model'];
37+
38+
return $order->getState();
39+
}
40+
}

SalesGraphQlAux/README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# Magento_SalesGraphQlAux module
2+
3+
magento/module-sales-graph-ql-aux (Magento_SalesGraphQlAux) any changes which affect the core SalesGraphQl module which lives as magento/module-sales-graph-ql

SalesGraphQlAux/composer.json

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
{
2+
"name": "magento/module-sales-graph-ql-aux",
3+
"description": "N/A",
4+
"type": "magento2-module",
5+
"require": {
6+
"php": "~7.4.0||~8.1.0",
7+
"magento/framework": "*"
8+
},
9+
"suggest": {
10+
"magento/module-sales-graph-ql": "*",
11+
"magento/module-graph-ql": "*"
12+
},
13+
"license": [
14+
"OSL-3.0",
15+
"AFL-3.0"
16+
],
17+
"autoload": {
18+
"files": [
19+
"registration.php"
20+
],
21+
"psr-4": {
22+
"Magento\\SalesGraphQlAux\\": ""
23+
}
24+
}
25+
}

SalesGraphQlAux/etc/module.xml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?xml version="1.0"?>
2+
<!--
3+
/**
4+
* Copyright © Magento, Inc. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
-->
8+
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
9+
<module name="Magento_SalesGraphQlAux" >
10+
<sequence>
11+
<module name="Magento_SalesGraphQl"/>
12+
</sequence>
13+
</module>
14+
</config>
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# Copyright © Magento, Inc. All rights reserved.
2+
# See COPYING.txt for license details.
3+
4+
type CustomerOrder {
5+
state: String! @doc(description: "The current state of the order.") @resolver(class: "Magento\\SalesGraphQlAux\\Model\\Resolver\\OrderState")
6+
}

SalesGraphQlAux/registration.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
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+
use Magento\Framework\Component\ComponentRegistrar;
9+
10+
ComponentRegistrar::register(ComponentRegistrar::MODULE, 'Magento_SalesGraphQlAux', __DIR__);

_metapackage/composer.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@
1111
"magento/module-re-captcha-pwa": "*",
1212
"magento/module-re-captcha-graph-ql-pwa": "*",
1313
"magento/module-page-builder-pwa": "*",
14-
"magento/module-url-rewrite-graph-ql-pwa": "*"
14+
"magento/module-url-rewrite-graph-ql-pwa": "*",
15+
"magento/module-sales-graph-ql-aux": "*"
1516
},
1617
"type": "metapackage"
1718
}
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
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\SalesGraphQlAux;
9+
10+
use Magento\Sales\Model\Order;
11+
use Magento\TestFramework\Helper\Bootstrap;
12+
use Magento\Integration\Api\CustomerTokenServiceInterface;
13+
use Magento\TestFramework\TestCase\GraphQlAbstract;
14+
15+
class OrderStateTest extends GraphQlAbstract
16+
{
17+
/**
18+
* @var CustomerTokenServiceInterface
19+
*/
20+
private $customerTokenService;
21+
22+
protected function setUp(): void
23+
{
24+
parent::setUp();
25+
$this->customerTokenService = Bootstrap::getObjectManager()->get(CustomerTokenServiceInterface::class);
26+
}
27+
28+
/**
29+
* @magentoApiDataFixture Magento/Customer/_files/customer.php
30+
* @magentoApiDataFixture Magento/Sales/_files/orders_with_customer.php
31+
*/
32+
public function testOrdersQuery()
33+
{
34+
$query =
35+
<<<QUERY
36+
query {
37+
customer {
38+
orders {
39+
items {
40+
order_number
41+
state
42+
}
43+
}
44+
}
45+
}
46+
QUERY;
47+
48+
$currentEmail = 'customer@example.com';
49+
$currentPassword = 'password';
50+
$response = $this->graphQlQuery($query, [], '', $this->getCustomerAuthHeaders($currentEmail, $currentPassword));
51+
52+
$expectedData = [
53+
[
54+
'order_number' => '100000002',
55+
'state' => Order::STATE_NEW
56+
],
57+
[
58+
'order_number' => '100000004',
59+
'state' => Order::STATE_PROCESSING
60+
],
61+
[
62+
'order_number' => '100000005',
63+
'state' => Order::STATE_COMPLETE
64+
],
65+
[
66+
'order_number' => '100000006',
67+
'state' => Order::STATE_COMPLETE
68+
]
69+
];
70+
71+
$actualData = $response['customer']['orders']['items'];
72+
73+
foreach ($expectedData as $key => $data) {
74+
$this->assertEquals(
75+
$data['order_number'],
76+
$actualData[$key]['order_number'],
77+
"order_number is different than the expected for order - " . $data['order_number']
78+
);
79+
$this->assertEquals(
80+
$data['state'],
81+
$actualData[$key]['state'],
82+
"state is different than the expected for order - " . $data['order_number']
83+
);
84+
}
85+
}
86+
87+
/**
88+
* @param string $email
89+
* @param string $password
90+
* @return array
91+
* @throws \Magento\Framework\Exception\AuthenticationException
92+
*/
93+
private function getCustomerAuthHeaders(string $email, string $password): array
94+
{
95+
$customerToken = $this->customerTokenService->createCustomerAccessToken($email, $password);
96+
return ['Authorization' => 'Bearer ' . $customerToken];
97+
}
98+
}

dev/tests/static/testsuite/Magento/Test/Integrity/_files/blacklist/composer_root_modules_pwa.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,4 @@ magento/module-re-captcha-pwa
88
magento/module-weee-graph-ql-aux
99
magento/module-page-builder-pwa
1010
magento/module-url-rewrite-graph-ql-pwa
11+
magento/module-sales-graph-ql-aux

dev/tests/static/testsuite/Magento/Test/Integrity/_files/blacklist/undeclared_dependency/magento-pwa.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,6 @@
66
* See COPYING.txt for license details.
77
*/
88
return [
9-
'app/code/Magento/PageBuilderPwa/Plugin/UiInputTypePageBuilder.php' => ['Magento\Eav']
9+
'app/code/Magento/PageBuilderPwa/Plugin/UiInputTypePageBuilder.php' => ['Magento\Eav'],
10+
'app/code/Magento/SalesGraphQlAux/Model/Resolver/OrderState.php' => ['Magento\Sales']
1011
];

0 commit comments

Comments
 (0)