Skip to content

Commit 1c87648

Browse files
committed
magento/magento2#: Remove a redundant getMappedNums from a loop
1 parent ed3f42b commit 1c87648

File tree

2 files changed

+182
-13
lines changed

2 files changed

+182
-13
lines changed

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

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
use Magento\Framework\GraphQl\Config\Element\Enum;
1111
use Magento\Framework\GraphQl\ConfigInterface;
1212
use Magento\Framework\GraphQl\Schema\Type\Enum\DataMapperInterface;
13-
use Magento\Framework\Phrase;
1413

1514
/**
1615
* Processor that looks up definition data of an enum to lookup and convert data as it's specified in the schema.
@@ -28,6 +27,8 @@ class EnumLookup
2827
private $enumDataMapper;
2928

3029
/**
30+
* EnumLookup constructor.
31+
*
3132
* @param ConfigInterface $typeConfig
3233
* @param DataMapperInterface $enumDataMapper
3334
*/
@@ -43,23 +44,19 @@ public function __construct(ConfigInterface $typeConfig, DataMapperInterface $en
4344
* @param string $enumName
4445
* @param string $fieldValue
4546
* @return string
46-
* @throws \Magento\Framework\Exception\RuntimeException
4747
*/
4848
public function getEnumValueFromField(string $enumName, string $fieldValue) : string
4949
{
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-
}
50+
/** @var Enum $enumObject */
51+
$enumObject = $this->typeConfig->getConfigElement($enumName);
52+
$mappedValues = $this->enumDataMapper->getMappedEnums($enumName);
53+
54+
foreach ($enumObject->getValues() as $enumItem) {
55+
if (isset($mappedValues[$enumItem->getName()]) && $mappedValues[$enumItem->getName()] == $fieldValue) {
56+
return $enumItem->getValue();
5757
}
58-
} else {
59-
throw new \Magento\Framework\Exception\RuntimeException(
60-
new Phrase('Enum type "%1" not defined', [$enumName])
61-
);
6258
}
59+
6360
return '';
6461
}
6562
}
Lines changed: 172 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,172 @@
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+
/**
85+
* @inheritDoc
86+
*/
87+
protected function setUp(): void
88+
{
89+
$this->objectManager = new ObjectManager($this);
90+
91+
$this->map = [
92+
self::ENUM_NAME => [
93+
'subscribed' => '1',
94+
'not_active' => '2',
95+
'unsubscribed' => '3',
96+
'unconfirmed' => '4',
97+
]
98+
];
99+
100+
$this->values = [
101+
'NOT_ACTIVE' => new EnumValue('not_active', 'NOT_ACTIVE'),
102+
'SUBSCRIBED' => new EnumValue('subscribed', 'SUBSCRIBED'),
103+
'UNSUBSCRIBED' => new EnumValue('unsubscribed', 'UNSUBSCRIBED'),
104+
'UNCONFIRMED' => new EnumValue('unconfirmed', 'UNCONFIRMED'),
105+
];
106+
107+
$this->enumMock = $this->getMockBuilder(Enum::class)
108+
->setConstructorArgs(
109+
[
110+
self::ENUM_NAME,
111+
$this->values,
112+
'Subscription statuses',
113+
]
114+
)
115+
->getMock();
116+
117+
$this->enumDataMapperMock = $this->getMockBuilder(DataMapperInterface::class)
118+
->setConstructorArgs($this->map)
119+
->getMock();
120+
121+
$this->configDataMock = $this->getMockBuilder(DataInterface::class)
122+
->getMock();
123+
$this->configElementFactoryMock = $this->getMockBuilder(ConfigElementFactoryInterface::class)
124+
->getMock();
125+
$this->queryFieldsMock = $this->getMockBuilder(QueryFields::class)
126+
->getMock();
127+
128+
$this->typeConfigMock = $this->getMockBuilder(ConfigInterface::class)
129+
->setConstructorArgs(
130+
[
131+
$this->configDataMock,
132+
$this->configElementFactoryMock,
133+
$this->queryFieldsMock,
134+
]
135+
)
136+
->getMock();
137+
138+
$this->enumLookup = $this->objectManager->getObject(
139+
EnumLookup::class,
140+
[
141+
'typeConfig' => $this->typeConfigMock,
142+
'enumDataMapper' => $this->enumDataMapperMock,
143+
]
144+
);
145+
}
146+
147+
public function testGetEnumValueFromField()
148+
{
149+
$enumName = self::ENUM_NAME;
150+
$fieldValue = '1';
151+
152+
$this->enumDataMapperMock
153+
->expects($this->once())
154+
->method('getMappedEnums')
155+
->willReturn($this->map[$enumName]);
156+
157+
$this->typeConfigMock
158+
->expects($this->once())
159+
->method('getConfigElement')
160+
->willReturn($this->enumMock);
161+
162+
$this->enumMock
163+
->expects($this->once())
164+
->method('getValues')
165+
->willReturn($this->values);
166+
167+
$this->assertEquals(
168+
'SUBSCRIBED',
169+
$this->enumLookup->getEnumValueFromField($enumName, $fieldValue)
170+
);
171+
}
172+
}

0 commit comments

Comments
 (0)