Skip to content

Commit 85fd7f5

Browse files
ENGCOM-7528: magento/magento2#: Remove a redundant getMappedNums from a loop #27939
2 parents 3a6007f + 7df6613 commit 85fd7f5

File tree

2 files changed

+170
-11
lines changed

2 files changed

+170
-11
lines changed

lib/internal/Magento/Framework/GraphQl/Query/EnumLookup.php

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
namespace Magento\Framework\GraphQl\Query;
99

10+
use Magento\Framework\Exception\RuntimeException;
1011
use Magento\Framework\GraphQl\Config\Element\Enum;
1112
use Magento\Framework\GraphQl\ConfigInterface;
1213
use Magento\Framework\GraphQl\Schema\Type\Enum\DataMapperInterface;
@@ -43,23 +44,27 @@ public function __construct(ConfigInterface $typeConfig, DataMapperInterface $en
4344
* @param string $enumName
4445
* @param string $fieldValue
4546
* @return string
46-
* @throws \Magento\Framework\Exception\RuntimeException
47+
* @throws RuntimeException
4748
*/
4849
public function getEnumValueFromField(string $enumName, string $fieldValue) : string
4950
{
50-
$priceViewEnum = $this->typeConfig->getConfigElement($enumName);
51-
if ($priceViewEnum instanceof Enum) {
52-
foreach ($priceViewEnum->getValues() as $enumItem) {
53-
$mappedValues = $this->enumDataMapper->getMappedEnums($enumName);
54-
if (isset($mappedValues[$enumItem->getName()]) && $mappedValues[$enumItem->getName()] == $fieldValue) {
55-
return $enumItem->getValue();
56-
}
57-
}
58-
} else {
59-
throw new \Magento\Framework\Exception\RuntimeException(
51+
/** @var Enum $enumObject */
52+
$enumObject = $this->typeConfig->getConfigElement($enumName);
53+
54+
if (!($enumObject instanceof Enum)) {
55+
throw new RuntimeException(
6056
new Phrase('Enum type "%1" not defined', [$enumName])
6157
);
6258
}
59+
60+
$mappedValues = $this->enumDataMapper->getMappedEnums($enumName);
61+
62+
foreach ($enumObject->getValues() as $enumItem) {
63+
if (isset($mappedValues[$enumItem->getName()]) && $mappedValues[$enumItem->getName()] == $fieldValue) {
64+
return $enumItem->getValue();
65+
}
66+
}
67+
6368
return '';
6469
}
6570
}
Lines changed: 154 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,154 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
declare(strict_types=1);
8+
9+
namespace Magento\Framework\GraphQl\Test\Unit\Query;
10+
11+
use Magento\Framework\Config\DataInterface;
12+
use Magento\Framework\GraphQl\Config\ConfigElementFactoryInterface;
13+
use Magento\Framework\GraphQl\Config\Element\Enum;
14+
use Magento\Framework\GraphQl\Config\Element\EnumValue;
15+
use Magento\Framework\GraphQl\ConfigInterface;
16+
use Magento\Framework\GraphQl\Query\EnumLookup;
17+
use Magento\Framework\GraphQl\Query\Fields as QueryFields;
18+
use Magento\Framework\GraphQl\Schema\Type\Enum\DataMapperInterface;
19+
use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
20+
use PHPUnit\Framework\MockObject\MockObject;
21+
use PHPUnit\Framework\TestCase;
22+
23+
/**
24+
* Unit test for \Magento\Framework\GraphQl\Query\EnumLookup
25+
*/
26+
class EnumLookupTest extends TestCase
27+
{
28+
private const ENUM_NAME = 'SubscriptionStatusesEnum';
29+
30+
/**
31+
* @var DataInterface|MockObject
32+
*/
33+
private $configDataMock;
34+
35+
/**
36+
* @var ConfigElementFactoryInterface|MockObject
37+
*/
38+
private $configElementFactoryMock;
39+
40+
/**
41+
* @var DataMapperInterface|MockObject
42+
*/
43+
private $enumDataMapperMock;
44+
45+
/**
46+
* Testable Object
47+
*
48+
* @var EnumLookup
49+
*/
50+
private $enumLookup;
51+
52+
/**
53+
* @var Enum|MockObject
54+
*/
55+
private $enumMock;
56+
57+
/**
58+
* Object Manager Instance
59+
*
60+
* @var ObjectManager
61+
*/
62+
private $objectManager;
63+
64+
/**
65+
* @var QueryFields|MockObject
66+
*/
67+
private $queryFieldsMock;
68+
69+
/**
70+
* @var ConfigInterface|MockObject
71+
*/
72+
private $typeConfigMock;
73+
74+
/**
75+
* @var array
76+
*/
77+
private $map = [];
78+
79+
/**
80+
* @var array
81+
*/
82+
private $values = [];
83+
84+
protected function setUp(): void
85+
{
86+
$this->objectManager = new ObjectManager($this);
87+
88+
$this->map = [
89+
self::ENUM_NAME => [
90+
'subscribed' => '1',
91+
'not_active' => '2',
92+
'unsubscribed' => '3',
93+
'unconfirmed' => '4',
94+
]
95+
];
96+
97+
$this->values = [
98+
'NOT_ACTIVE' => new EnumValue('not_active', 'NOT_ACTIVE'),
99+
'SUBSCRIBED' => new EnumValue('subscribed', 'SUBSCRIBED'),
100+
'UNSUBSCRIBED' => new EnumValue('unsubscribed', 'UNSUBSCRIBED'),
101+
'UNCONFIRMED' => new EnumValue('unconfirmed', 'UNCONFIRMED'),
102+
];
103+
104+
$this->enumMock = $this->getMockBuilder(Enum::class)
105+
->setConstructorArgs(
106+
[
107+
self::ENUM_NAME,
108+
$this->values,
109+
'Subscription statuses',
110+
]
111+
)
112+
->getMock();
113+
114+
$this->enumDataMapperMock = $this->createMock(DataMapperInterface::class);
115+
$this->configDataMock = $this->createMock(DataInterface::class);
116+
$this->configElementFactoryMock = $this->createMock(ConfigElementFactoryInterface::class);
117+
$this->queryFieldsMock = $this->createMock(QueryFields::class);
118+
$this->typeConfigMock = $this->createMock(ConfigInterface::class);
119+
120+
$this->enumLookup = $this->objectManager->getObject(
121+
EnumLookup::class,
122+
[
123+
'typeConfig' => $this->typeConfigMock,
124+
'enumDataMapper' => $this->enumDataMapperMock,
125+
]
126+
);
127+
}
128+
129+
public function testGetEnumValueFromField()
130+
{
131+
$enumName = self::ENUM_NAME;
132+
$fieldValue = '1';
133+
134+
$this->enumDataMapperMock
135+
->expects($this->once())
136+
->method('getMappedEnums')
137+
->willReturn($this->map[$enumName]);
138+
139+
$this->typeConfigMock
140+
->expects($this->once())
141+
->method('getConfigElement')
142+
->willReturn($this->enumMock);
143+
144+
$this->enumMock
145+
->expects($this->once())
146+
->method('getValues')
147+
->willReturn($this->values);
148+
149+
$this->assertEquals(
150+
'SUBSCRIBED',
151+
$this->enumLookup->getEnumValueFromField($enumName, $fieldValue)
152+
);
153+
}
154+
}

0 commit comments

Comments
 (0)