Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
CollectionTest.php
Go to the documentation of this file.
1 <?php
7 
8 class CollectionTest extends \PHPUnit\Framework\TestCase
9 {
13  protected $_model;
14 
15  protected function setUp()
16  {
17  $this->_model = new \Magento\Framework\Data\Collection(
18  $this->createMock(\Magento\Framework\Data\Collection\EntityFactory::class)
19  );
20  }
21 
22  public function testRemoveAllItems()
23  {
24  $this->_model->addItem(new \Magento\Framework\DataObject());
25  $this->_model->addItem(new \Magento\Framework\DataObject());
26  $this->assertCount(2, $this->_model->getItems());
27  $this->_model->removeAllItems();
28  $this->assertEmpty($this->_model->getItems());
29  }
30 
35  public function testLoadWithFilter()
36  {
37  $this->assertInstanceOf(\Magento\Framework\Data\Collection::class, $this->_model->loadWithFilter());
38  $this->assertEmpty($this->_model->getItems());
39  $this->_model->addItem(new \Magento\Framework\DataObject());
40  $this->_model->addItem(new \Magento\Framework\DataObject());
41  $this->assertCount(2, $this->_model->loadWithFilter()->getItems());
42  }
43 
47  public function testSetItemObjectClass($class)
48  {
49  $this->_model->setItemObjectClass($class);
50  $this->assertAttributeSame($class, '_itemObjectClass', $this->_model);
51  }
52 
57  {
58  return [[\Magento\Framework\Url::class], [\Magento\Framework\DataObject::class]];
59  }
60 
66  {
67  $this->_model->setItemObjectClass('Incorrect_ClassName');
68  }
69 
70  public function testAddFilter()
71  {
72  $this->_model->addFilter('field1', 'value');
73  $this->assertEquals('field1', $this->_model->getFilter('field1')->getData('field'));
74  }
75 
76  public function testGetFilters()
77  {
78  $this->_model->addFilter('field1', 'value');
79  $this->_model->addFilter('field2', 'value');
80  $this->assertEquals('field1', $this->_model->getFilter(['field1', 'field2'])[0]->getData('field'));
81  $this->assertEquals('field2', $this->_model->getFilter(['field1', 'field2'])[1]->getData('field'));
82  }
83 
84  public function testGetNonExistingFilters()
85  {
86  $this->assertEmpty($this->_model->getFilter([]));
87  $this->assertEmpty($this->_model->getFilter('non_existing_filter'));
88  }
89 
90  public function testFlag()
91  {
92  $this->_model->setFlag('flag_name', 'flag_value');
93  $this->assertEquals('flag_value', $this->_model->getFlag('flag_name'));
94  $this->assertTrue($this->_model->hasFlag('flag_name'));
95  $this->assertNull($this->_model->getFlag('non_existing_flag'));
96  }
97 
98  public function testGetCurPage()
99  {
100  $this->_model->setCurPage(10);
101  $this->assertEquals(1, $this->_model->getCurPage());
102  }
103 
104  public function testPossibleFlowWithItem()
105  {
106  $firstItemMock = $this->createPartialMock(
107  \Magento\Framework\DataObject::class,
108  ['getId', 'getData', 'toArray']
109  );
110  $secondItemMock = $this->createPartialMock(
111  \Magento\Framework\DataObject::class,
112  ['getId', 'getData', 'toArray']
113  );
114  $requiredFields = ['required_field_one', 'required_field_two'];
115  $arrItems = [
116  'totalRecords' => 1,
117  'items' => [
118  0 => 'value',
119  ],
120  ];
121  $items = [
122  'item_id' => $firstItemMock,
123  0 => $secondItemMock,
124  ];
125  $firstItemMock->expects($this->exactly(2))->method('getId')->will($this->returnValue('item_id'));
126 
127  $firstItemMock
128  ->expects($this->atLeastOnce())
129  ->method('getData')
130  ->with('colName')
131  ->will($this->returnValue('first_value'));
132  $secondItemMock
133  ->expects($this->atLeastOnce())
134  ->method('getData')
135  ->with('colName')
136  ->will($this->returnValue('second_value'));
137 
138  $firstItemMock
139  ->expects($this->once())
140  ->method('toArray')
141  ->with($requiredFields)
142  ->will($this->returnValue('value'));
144  $this->_model->addItem($firstItemMock);
145  $this->assertEquals($arrItems, $this->_model->toArray($requiredFields));
146 
147  $this->_model->addItem($secondItemMock);
148  $this->_model->setDataToAll('column', 'value');
149 
151  $this->assertEquals(['first_value', 'second_value'], $this->_model->getColumnValues('colName'));
152  $this->assertEquals([$secondItemMock], $this->_model->getItemsByColumnValue('colName', 'second_value'));
153  $this->assertEquals($firstItemMock, $this->_model->getItemByColumnValue('colName', 'second_value'));
154  $this->assertEquals([], $this->_model->getItemsByColumnValue('colName', 'non_existing_value'));
155  $this->assertEquals(null, $this->_model->getItemByColumnValue('colName', 'non_existing_value'));
156 
158  $this->assertEquals(['item_id', 0], $this->_model->getAllIds());
159  $this->assertEquals($firstItemMock, $this->_model->getFirstItem());
160  $this->assertEquals($secondItemMock, $this->_model->getLastItem());
161  $this->assertEquals($items, $this->_model->getItems('item_id'));
162 
164  $this->assertNull($this->_model->getItemById('not_existing_item_id'));
165  $this->_model->removeItemByKey('item_id');
166  $this->assertEquals([$secondItemMock], $this->_model->getItems());
167  $this->_model->removeAllItems();
168  $this->assertEquals([], $this->_model->getItems());
169  }
170 
172  {
173  for ($i = 0; $i < 3; $i++) {
174  $item = $this->createPartialMock(\Magento\Framework\DataObject::class, ['testCallback']);
175  $item->expects($this->once())->method('testCallback')->with();
176  $this->_model->addItem($item);
177  }
178  $this->_model->each('testCallback');
179  }
180 
182  {
183  for ($i = 0; $i < 3; $i++) {
184  $item = $this->createPartialMock(\Magento\Framework\DataObject::class, ['testCallback']);
185  $item->expects($this->once())->method('testCallback')->with('a', 'b', 'c');
186  $this->_model->addItem($item);
187  }
188  $this->_model->each('testCallback', ['a', 'b', 'c']);
189  }
190 
192  {
193  for ($i = 0; $i < 3; $i++) {
194  $item = $this->createPartialMock(\Magento\Framework\DataObject::class, ['testCallback']);
195  $item->expects($this->once())->method('testCallback')->with();
196  $this->_model->addItem($item);
197  }
198  $this->_model->each(function ($item) {
199  $item->testCallback();
200  });
201  }
202 
204  {
205  for ($i = 0; $i < 3; $i++) {
206  $item = $this->createPartialMock(\Magento\Framework\DataObject::class, ['testItemCallback']);
207  $item->expects($this->once())->method('testItemCallback')->with('a', 'b', 'c');
208  $this->_model->addItem($item);
209  }
210  $this->_model->each(function ($item, ...$args) {
211  $item->testItemCallback(...$args);
212  }, ['a', 'b', 'c']);
213  }
214 
216  {
217  $mockCallbackObject = $this->getMockBuilder('DummyEachCallbackInstance')
218  ->setMethods(['testObjCallback'])
219  ->getMock();
220  $mockCallbackObject->method('testObjCallback')->willReturnCallback(function ($item, ...$args) {
221  $item->testItemCallback(...$args);
222  });
223 
224  for ($i = 0; $i < 3; $i++) {
225  $item = $this->createPartialMock(\Magento\Framework\DataObject::class, ['testItemCallback']);
226  $item->expects($this->once())->method('testItemCallback')->with();
227  $this->_model->addItem($item);
228  }
229 
230  $this->_model->each([$mockCallbackObject, 'testObjCallback']);
231  }
232 
234  {
235  $mockCallbackObject = $this->getMockBuilder('DummyEachCallbackInstance')
236  ->setMethods(['testObjCallback'])
237  ->getMock();
238  $mockCallbackObject->method('testObjCallback')->willReturnCallback(function ($item, ...$args) {
239  $item->testItemCallback(...$args);
240  });
241 
242  for ($i = 0; $i < 3; $i++) {
243  $item = $this->createPartialMock(\Magento\Framework\DataObject::class, ['testItemCallback']);
244  $item->expects($this->once())->method('testItemCallback')->with('a', 'b', 'c');
245  $this->_model->addItem($item);
246  }
247 
248  $callback = [$mockCallbackObject, 'testObjCallback'];
249  $this->_model->each($callback, ['a', 'b', 'c']);
250  }
251 }
$_option $_optionId $class
Definition: date.phtml:13
$i
Definition: gallery.phtml:31
$items