9 use Magento\Customer\Api\Data\AttributeMetadataInterfaceFactory;
11 use Magento\Customer\Api\Data\OptionInterfaceFactory;
13 use Magento\Customer\Api\Data\ValidationRuleInterfaceFactory;
29 private $attributeMetadataFactoryMock;
34 private $optionFactoryMock;
39 private $validationRuleFactoryMock;
44 private $attributeMetadataMock;
49 private $dataObjectProcessorMock;
54 private $attributeMetadataHydrator;
59 $this->attributeMetadataFactoryMock = $this->createPartialMock(
60 AttributeMetadataInterfaceFactory::class,
63 $this->optionFactoryMock = $this->createPartialMock(OptionInterfaceFactory::class, [
'create']);
64 $this->validationRuleFactoryMock = $this->createPartialMock(ValidationRuleInterfaceFactory::class, [
'create']);
65 $this->attributeMetadataMock = $this->createMock(AttributeMetadataInterface::class);
66 $this->dataObjectProcessorMock = $this->createMock(DataObjectProcessor::class);
68 AttributeMetadataHydrator::class,
70 'attributeMetadataFactory' => $this->attributeMetadataFactoryMock,
71 'optionFactory' => $this->optionFactoryMock,
72 'validationRuleFactory' => $this->validationRuleFactoryMock,
73 'dataObjectProcessor' => $this->dataObjectProcessorMock
97 'options' => [$optionThreeData, $optionFourData]
99 $validationRuleOneData = [
103 $attributeMetadataData = [
104 'attribute_code' =>
'attribute_code',
105 'frontend_input' =>
'hidden',
106 'options' => [$optionOneData, $optionTwoData],
107 'validation_rules' => [$validationRuleOneData]
110 $optionOne =
new Option($optionOneData);
111 $this->optionFactoryMock->expects($this->at(0))
113 ->with([
'data' => $optionOneData])
114 ->willReturn($optionOne);
115 $optionThree =
new Option($optionThreeData);
116 $this->optionFactoryMock->expects($this->at(1))
118 ->with([
'data' => $optionThreeData])
119 ->willReturn($optionThree);
120 $optionFour =
new Option($optionFourData);
121 $this->optionFactoryMock->expects($this->at(2))
123 ->with([
'data' => $optionFourData])
124 ->willReturn($optionFour);
126 $optionTwoDataPartiallyConverted = [
127 'label' =>
'Label 2',
128 'options' => [$optionThree, $optionFour]
130 $optionFour =
new Option($optionTwoDataPartiallyConverted);
131 $this->optionFactoryMock->expects($this->at(3))
133 ->with([
'data' => $optionTwoDataPartiallyConverted])
134 ->willReturn($optionFour);
137 $this->validationRuleFactoryMock->expects($this->once())
139 ->with([
'data' => $validationRuleOneData])
140 ->willReturn($validationRuleOne);
142 $attributeMetadataPartiallyConverted = [
143 'attribute_code' =>
'attribute_code',
144 'frontend_input' =>
'hidden',
145 'options' => [$optionOne, $optionFour],
146 'validation_rules' => [$validationRuleOne]
149 $this->attributeMetadataFactoryMock->expects($this->once())
151 ->with([
'data' => $attributeMetadataPartiallyConverted])
156 $attributeMetadata = $this->attributeMetadataHydrator->hydrate($attributeMetadataData);
158 $this->assertInstanceOf(AttributeMetadataInterface::class, $attributeMetadata);
160 $attributeMetadataData[
'attribute_code'],
161 $attributeMetadata->getAttributeCode()
163 $this->assertInternalType(
164 \PHPUnit\Framework\Constraint\IsType::TYPE_ARRAY,
165 $attributeMetadata->getOptions()
167 $this->assertArrayHasKey(
169 $attributeMetadata->getOptions()
171 $this->assertInstanceOf(OptionInterface::class, $attributeMetadata->getOptions()[0]);
173 $optionOneData[
'label'],
174 $attributeMetadata->getOptions()[0]->getLabel()
176 $this->assertArrayHasKey(1, $attributeMetadata->getOptions());
177 $this->assertInstanceOf(OptionInterface::class, $attributeMetadata->getOptions()[1]);
179 $this->assertInternalType(
180 \PHPUnit\Framework\Constraint\IsType::TYPE_ARRAY,
181 $attributeMetadata->getOptions()[1]->getOptions()
183 $this->assertArrayHasKey(0, $attributeMetadata->getOptions()[1]->getOptions());
184 $this->assertInstanceOf(OptionInterface::class, $attributeMetadata->getOptions()[1]->getOptions()[0]);
186 $optionThreeData[
'label'],
187 $attributeMetadata->getOptions()[1]->getOptions()[0]->getLabel()
189 $this->assertInternalType(
190 \PHPUnit\Framework\Constraint\IsType::TYPE_ARRAY,
191 $attributeMetadata->getValidationRules()
193 $this->assertArrayHasKey(0, $attributeMetadata->getValidationRules());
194 $this->assertInstanceOf(ValidationRuleInterface::class, $attributeMetadata->getValidationRules()[0]);
196 $validationRuleOneData[
'name'],
197 $attributeMetadata->getValidationRules()[0]->getName()
203 $data = [
'foo' =>
'bar'];
204 $this->dataObjectProcessorMock->expects($this->once())
205 ->method(
'buildOutputDataArray')
207 $this->attributeMetadataMock,
208 AttributeMetadata::class
213 $this->attributeMetadataHydrator->extract($this->attributeMetadataMock)