Skip to content

Commit 2caf07b

Browse files
committed
ACP2E-3506: GraphQL Response for Order placement is partially localised
1 parent 03ef1fa commit 2caf07b

File tree

4 files changed

+151
-0
lines changed

4 files changed

+151
-0
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
"""model"" value should be specified","""model"" value should be specified"
22
"The requested qty. is not available","The requested qty. is not available"
3+
"Unable to place order: %message","Unable to place order: %message"
Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
<?php
2+
/**
3+
* Copyright 2024 Adobe
4+
* All Rights Reserved.
5+
*/
6+
declare(strict_types=1);
7+
8+
use Magento\Catalog\Test\Fixture\Product as ProductFixture;
9+
use Magento\Customer\Test\Fixture\Customer;
10+
use Magento\Indexer\Test\Fixture\Indexer;
11+
use Magento\Integration\Api\CustomerTokenServiceInterface;
12+
use Magento\Quote\Test\Fixture\AddProductToCart as AddProductToCartFixture;
13+
use Magento\Quote\Test\Fixture\CustomerCart;
14+
use Magento\Quote\Test\Fixture\QuoteIdMask;
15+
use Magento\TestFramework\Fixture\DataFixture;
16+
use Magento\TestFramework\Fixture\DataFixtureStorageManager;
17+
use Magento\TestFramework\Helper\Bootstrap;
18+
use Magento\TestFramework\Helper\CacheCleaner;
19+
use Magento\TestFramework\TestCase\GraphQl\ResponseContainsErrorsException;
20+
use Magento\TestFramework\TestCase\GraphQlAbstract;
21+
22+
class PlaceOrderTest extends GraphQlAbstract
23+
{
24+
/**
25+
* @var CustomerTokenServiceInterface
26+
*/
27+
private CustomerTokenServiceInterface $customerTokenService;
28+
29+
/**
30+
* @inheritdoc
31+
*/
32+
protected function setUp(): void
33+
{
34+
$objectManager = Bootstrap::getObjectManager();
35+
$this->customerTokenService = $objectManager->get(CustomerTokenServiceInterface::class);
36+
37+
parent::setUp();
38+
}
39+
40+
/**
41+
* Test translated error message in non default store
42+
*
43+
* @magentoApiDataFixture Magento/Store/_files/second_store.php
44+
* @magentoApiDataFixture Magento/Translation/_files/place_order_message_translate.php
45+
* @magentoConfigFixture fixture_second_store_store general/locale/code nl_NL
46+
*/
47+
#[
48+
DataFixture(ProductFixture::class, as: 'product'),
49+
DataFixture(Indexer::class, as: 'indexer'),
50+
DataFixture(Customer::class, ['email' => 'customer@example.com'], as: 'customer'),
51+
DataFixture(
52+
CustomerCart::class,
53+
[
54+
'customer_id' => '$customer.id$',
55+
'reserved_order_id' => 'test_quote'
56+
],
57+
'cart'
58+
),
59+
DataFixture(AddProductToCartFixture::class, ['cart_id' => '$cart.id$', 'product_id' => '$product.id$']),
60+
DataFixture(QuoteIdMask::class, ['cart_id' => '$cart.id$'], 'quoteIdMask'),
61+
]
62+
public function testPlaceOrderErrorTranslation()
63+
{
64+
CacheCleaner::clean(['translate', 'config']);
65+
$storeCode = "fixture_second_store";
66+
$maskedQuoteId = DataFixtureStorageManager::getStorage()->get('quoteIdMask')->getMaskedId();
67+
$query = $this->placeOrderQuery($maskedQuoteId);
68+
try {
69+
$headers = ['Store' => $storeCode];
70+
$this->graphQlMutation($query, [], '', array_merge($headers, $this->getHeaderMap()));
71+
} catch (ResponseContainsErrorsException $exception) {
72+
$exceptionData = $exception->getResponseData();
73+
self::assertEquals(1, count($exceptionData['errors']));
74+
self::assertEquals(
75+
'Kan geen bestelling plaatsen: Sommige adressen kunnen niet worden gebruikt' .
76+
' vanwege de configuraties van specifieke landen.',
77+
$exceptionData['errors'][0]['message']
78+
);
79+
}
80+
}
81+
82+
/**
83+
* Get place order mutation
84+
*
85+
* @param string $maskedQuoteId
86+
* @return string
87+
*/
88+
private function placeOrderQuery(string $maskedQuoteId): string
89+
{
90+
return <<<QUERY
91+
mutation {
92+
placeOrder(input: {cart_id: "{$maskedQuoteId}"}) {
93+
order {
94+
order_number
95+
}
96+
}
97+
}
98+
QUERY;
99+
}
100+
101+
/**
102+
* Get bearer authorization header
103+
*
104+
* @param string $username
105+
* @param string $password
106+
* @return array
107+
* @throws \Magento\Framework\Exception\AuthenticationException
108+
*/
109+
private function getHeaderMap(string $username = 'customer@example.com', string $password = 'password'): array
110+
{
111+
$customerToken = $this->customerTokenService->createCustomerAccessToken($username, $password);
112+
$headerMap = ['Authorization' => 'Bearer ' . $customerToken];
113+
return $headerMap;
114+
}
115+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?php
2+
/**
3+
* Copyright 2024 Adobe
4+
* All Rights Reserved.
5+
*/
6+
declare(strict_types=1);
7+
8+
/** @var \Magento\Translation\Model\ResourceModel\StringUtils $translateString */
9+
$translateString = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
10+
\Magento\Translation\Model\ResourceModel\StringUtils::class
11+
);
12+
$translateString->saveTranslate(
13+
'Unable to place order: %message',
14+
'Kan geen bestelling plaatsen: %message',
15+
"nl_NL",
16+
0
17+
);
18+
$translateString->saveTranslate(
19+
'Some addresses can\'t be used due to the configurations for specific countries.',
20+
'Sommige adressen kunnen niet worden gebruikt vanwege de configuraties van specifieke landen.',
21+
"nl_NL",
22+
0
23+
);
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?php
2+
/**
3+
* Copyright 2024 Adobe
4+
* All Rights Reserved.
5+
*/
6+
declare(strict_types=1);
7+
8+
/** @var \Magento\Translation\Model\ResourceModel\StringUtils $translateString */
9+
$translateString = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
10+
\Magento\Translation\Model\ResourceModel\StringUtils::class
11+
);
12+
$translateString->deleteTranslate('Unable to place order: %message', "nl_NL", 0);

0 commit comments

Comments
 (0)