Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
AbstractAttributeTest.php
Go to the documentation of this file.
1 <?php
9 
10 class AbstractAttributeTest extends \PHPUnit\Framework\TestCase
11 {
13  {
14  $model = $this->getMockForAbstractClass(
15  \Magento\Eav\Model\Entity\Attribute\AbstractAttribute::class,
16  [],
17  '',
18  false,
19  false,
20  true,
21  [
22  '_getData', 'usesSource', 'getSource', 'convertToObjects'
23  ]
24  );
25 
26  $model->expects($this->once())
27  ->method('_getData')
28  ->with(\Magento\Eav\Model\Entity\Attribute\AbstractAttribute::OPTIONS)
29  ->willReturn(['options']);
30  $model->expects($this->never())->method('usesSource');
31  $model->expects($this->once())
32  ->method('convertToObjects')
33  ->with(['options'])
34  ->willReturn('expected value');
35 
36  $this->assertEquals('expected value', $model->getOptions());
37  }
38 
40  {
41  $model = $this->getMockForAbstractClass(
42  \Magento\Eav\Model\Entity\Attribute\AbstractAttribute::class,
43  [],
44  '',
45  false,
46  false,
47  true,
48  [
49  '_getData', 'usesSource', 'getSource', 'convertToObjects'
50  ]
51  );
52 
53  $model->expects($this->once())
54  ->method('_getData')
55  ->with(\Magento\Eav\Model\Entity\Attribute\AbstractAttribute::OPTIONS)
56  ->willReturn([]);
57  $model->expects($this->once())->method('usesSource')->willReturn(false);
58  $model->expects($this->never())->method('getSource');
59  $model->expects($this->once())
60  ->method('convertToObjects')
61  ->with([])
62  ->willReturn('expected value');
63 
64  $this->assertEquals('expected value', $model->getOptions());
65  }
66 
68  {
69  $model = $this->getMockForAbstractClass(
70  \Magento\Eav\Model\Entity\Attribute\AbstractAttribute::class,
71  [],
72  '',
73  false,
74  false,
75  true,
76  [
77  '_getData', 'usesSource', 'getSource', 'convertToObjects', 'getAllOptions'
78  ]
79  );
80 
81  $model->expects($this->once())
82  ->method('_getData')
83  ->with(\Magento\Eav\Model\Entity\Attribute\AbstractAttribute::OPTIONS)
84  ->willReturn([]);
85  $model->expects($this->once())->method('usesSource')->willReturn(true);
86  $model->expects($this->once())->method('getSource')->willReturnSelf();
87  $model->expects($this->once())->method('getAllOptions')->willReturn(['source value']);
88  $model->expects($this->once())
89  ->method('convertToObjects')
90  ->with(['source value'])
91  ->willReturn('expected value');
92 
93  $this->assertEquals('expected value', $model->getOptions());
94  }
95 
96  public function testConvertToObjects()
97  {
98  $attributeOptionMock = $this->createMock(\Magento\Eav\Api\Data\AttributeOptionInterface::class);
99  $dataFactoryMock = $this->createPartialMock(
100  \Magento\Eav\Api\Data\AttributeOptionInterfaceFactory::class,
101  ['create']
102  );
103  $dataObjectHelperMock = $this->getMockBuilder(\Magento\Framework\Api\DataObjectHelper::class)
104  ->disableOriginalConstructor()
105  ->getMock();
106  $objectManagerHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
107  $model = $objectManagerHelper->getObject(
108  \Magento\Catalog\Model\Entity\Attribute::class,
109  [
110  'optionDataFactory' => $dataFactoryMock,
111  'dataObjectHelper' => $dataObjectHelperMock,
112  'data' => [
113  \Magento\Eav\Api\Data\AttributeInterface::OPTIONS => [['some value']]
114  ]
115 
116  ]
117  );
118  $dataObjectHelperMock->expects($this->once())->method('populateWithArray')
119  ->with($attributeOptionMock, ['some value'], \Magento\Eav\Api\Data\AttributeOptionInterface::class)
120  ->willReturnSelf();
121  $dataFactoryMock->expects($this->once())->method('create')->willReturn($attributeOptionMock);
122 
123  $this->assertEquals([$attributeOptionMock], $model->getOptions());
124  }
125 
127  {
128  $objectManagerHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
129  $model = $objectManagerHelper->getObject(
130  \Magento\Catalog\Model\Entity\Attribute::class,
131  [
132  'data' => [
133  \Magento\Eav\Api\Data\AttributeInterface::VALIDATE_RULES => ['some value']
134  ]
135 
136  ]
137  );
138 
139  $this->assertEquals(['some value'], $model->getValidationRules());
140  }
141 
143  {
144  $rule = json_encode(['some value']);
145  $expected = ['some value'];
146 
147  $modelClassName = \Magento\Eav\Model\Entity\Attribute\AbstractAttribute::class;
148  $model = $this->getMockForAbstractClass($modelClassName, [], '', false);
149 
150  $serializerMock = $this->createMock(\Magento\Framework\Serialize\SerializerInterface::class);
151 
152  $reflection = new \ReflectionClass($modelClassName);
153  $reflectionProperty = $reflection->getProperty('serializer');
154  $reflectionProperty->setAccessible(true);
155  $reflectionProperty->setValue($model, $serializerMock);
156 
157  $model->setData(\Magento\Eav\Api\Data\AttributeInterface::VALIDATE_RULES, $rule);
158 
159  $serializerMock->method('unserialize')
160  ->with($rule)
161  ->willReturn($expected);
162 
163  $this->assertEquals($expected, $model->getValidationRules());
164 
165  $data = ['test array'];
166  $model->setData(\Magento\Eav\Api\Data\AttributeInterface::VALIDATE_RULES, $data);
167  $this->assertEquals($data, $model->getValidationRules());
168 
169  $model->setData(\Magento\Eav\Api\Data\AttributeInterface::VALIDATE_RULES, null);
170  $this->assertEquals([], $model->getValidationRules());
171  }
172 
174  {
175  $objectManagerHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
176  $model = $objectManagerHelper->getObject(
177  \Magento\Catalog\Model\Entity\Attribute::class,
178  [
179  'data' => [
180  \Magento\Eav\Api\Data\AttributeInterface::VALIDATE_RULES => null
181  ]
182 
183  ]
184  );
185 
186  $this->assertEquals([], $model->getValidationRules());
187  }
188 
195  public function testIsValueEmpty($isEmpty, $value, $attributeType)
196  {
198  $model = $this->getMockForAbstractClass(
199  \Magento\Eav\Model\Entity\Attribute\AbstractAttribute::class,
200  [],
201  '',
202  false,
203  false,
204  true,
205  [
206  'getBackend'
207  ]
208  );
209  $backendModelMock = $this->getMockForAbstractClass(
210  \Magento\Eav\Model\Entity\Attribute\Backend\AbstractBackend::class,
211  [],
212  '',
213  false,
214  false,
215  true,
216  [
217  'getType'
218  ]
219  );
220  $backendModelMock->expects($this->any())->method('getType')->willReturn($attributeType);
221  $model->expects($this->any())->method('getBackend')->willReturn($backendModelMock);
222  $this->assertEquals($isEmpty, $model->isValueEmpty($value));
223  }
224 
228  public function attributeValueDataProvider()
229  {
230  return [
231  [true, '', 'int'],
232  [true, '', 'decimal'],
233  [true, '', 'datetime'],
234  [true, '', 'varchar'],
235  [true, '', 'text'],
236  [true, null, 'varchar'],
237  [true, [], 'varchar'],
238  [true, false, 'varchar'],
239  [false, 'not empty value', 'varchar'],
240  [false, false, 'int'],
241  ];
242  }
243 }
$value
Definition: gender.phtml:16