Files
2026-09-15 10:26:34 +08:00

166 lines
5.0 KiB
PHP

<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
declare(strict_types=1);
namespace Magento\GraphQl\OrderCancellation;
use Exception;
use Magento\Store\Api\Data\StoreInterface;
use Magento\Store\Test\Fixture\Group as StoreGroupFixture;
use Magento\Store\Test\Fixture\Store as StoreFixture;
use Magento\Store\Test\Fixture\Website as WebsiteFixture;
use Magento\TestFramework\Fixture\Config;
use Magento\TestFramework\Fixture\DataFixture;
use Magento\TestFramework\Fixture\DataFixtureStorageManager;
use Magento\TestFramework\Fixture\DbIsolation;
use Magento\TestFramework\TestCase\GraphQlAbstract;
/**
* Test that order cancellation are returned via the storeConfig GraphQL query.
* Query must take into account passed store through request header.
* Reasons are returned following the same order as they are stored in the DB.
*/
class OrderCancellationReasonsTest extends GraphQlAbstract
{
private const STORE_CONFIG_QUERY = <<<QUERY
{
storeConfig {
order_cancellation_reasons {
description
}
}
}
QUERY;
/**
* When no cancellation reasons are provided through `sales/cancellation/reasons` configuration
* the query returns the default cancellation reasons from `OrderCancellation/etc/config.xml` file.
*
* @return void
* @throws Exception
*/
#[
DbIsolation(true)
]
public function testGetDefaultCancellationReasons()
{
$response = $this->graphQlQuery(self::STORE_CONFIG_QUERY);
$this->assertEquals(
[
'storeConfig' => [
'order_cancellation_reasons' => [
[
'description' => 'The item(s) are no longer needed'
],
[
'description' => 'The order was placed by mistake'
],
[
'description' => 'Item(s) not arriving within the expected timeframe'
],
[
'description' => 'Found a better price elsewhere'
],
[
'description' => 'Other'
]
],
]
],
$response
);
}
#[
DataFixture(WebsiteFixture::class, as: 'website2'),
DataFixture(StoreGroupFixture::class, ['website_id' => '$website2.id$'], 'store_group2'),
DataFixture(StoreFixture::class, [
'store_group_id' => '$store_group2.id$',
'code' => 'some_store_2',
'name' => 'Some Store 2'
], 'store2'),
Config(
'sales/cancellation/reasons',
'{"Reason1":{"description":"Reason 1"},"110":{"description":"Reason 2"},"111":{"description":"Another"}}',
'store',
'some_store_2'
)
]
public function testGetCancellationReasonsSetUpThroughConfiguration()
{
/** @var StoreInterface $store */
$store = DataFixtureStorageManager::getStorage()->get('store2');
$response = $this->graphQlQuery(
self::STORE_CONFIG_QUERY,
[],
'',
['Store' => $store->getCode()]
);
$this->assertEquals(
[
'storeConfig' => [
'order_cancellation_reasons' => [
[
'description' => 'Reason 1'
],
[
'description' => 'Reason 2'
],
[
'description' => 'Another'
]
],
]
],
$response
);
}
#[
DataFixture(WebsiteFixture::class, as: 'website3'),
DataFixture(StoreGroupFixture::class, ['website_id' => '$website3.id$'], 'store_group3'),
DataFixture(StoreFixture::class, [
'store_group_id' => '$store_group3.id$',
'code' => 'some_store_3',
'name' => 'Some Store 3'
], 'store3'),
Config(
'sales/cancellation/reasons',
'{"Reason1": {"description": "Dummy reason"}}',
'store',
'some_store_3'
)
]
public function testGetCancellationReasonsForDifferentStore()
{
/** @var StoreInterface $store */
$store = DataFixtureStorageManager::getStorage()->get('store3');
$response = $this->graphQlQuery(
self::STORE_CONFIG_QUERY,
[],
'',
['Store' => $store->getCode()]
);
$this->assertEquals(
[
'storeConfig' => [
'order_cancellation_reasons' => [
[
'description' => 'Dummy reason'
]
],
]
],
$response
);
}
}