Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
DataCollectionTest.php
Go to the documentation of this file.
1 <?php
8 
17 
18 class DataCollectionTest extends \PHPUnit\Framework\TestCase
19 {
23  private $objectManagerHelper;
24 
28  private $dataCollection;
29 
33  private $configMock;
34 
38  private $indexerRegistryMock;
39 
43  private $entityFactoryMock;
44 
48  protected function setUp()
49  {
50  $this->objectManagerHelper = new ObjectManagerHelper($this);
51 
52  $this->configMock = $this->getMockBuilder(ConfigInterface::class)
53  ->getMockForAbstractClass();
54 
55  $this->indexerRegistryMock = $this->getMockBuilder(IndexerRegistry::class)
56  ->disableOriginalConstructor()
57  ->getMock();
58 
59  $this->entityFactoryMock = $this->getMockBuilder(EntityFactoryInterface::class)
60  ->getMock();
61 
62  $this->dataCollection = $this->objectManagerHelper->getObject(
63  DataCollection::class,
64  [
65  'entityFactory' => $this->entityFactoryMock,
66  'config' => $this->configMock,
67  'indexerRegistry' => $this->indexerRegistryMock,
68  ]
69  );
70  }
71 
76  public function testLoadData(array $indexersData)
77  {
78  $calls = [];
79  foreach ($indexersData as $indexerId => $data) {
80  $indexer = $this->getIndexerMock($data);
81  $calls[] = [$indexerId, $indexer];
82  }
83  $this->configMock
84  ->method('getIndexers')
85  ->willReturn($indexersData);
86  $this->entityFactoryMock
87  ->method('create')
88  ->willReturnMap([[DataObject::class, [], new DataObject()]]);
89  $this->indexerRegistryMock
90  ->expects($this->exactly(count($indexersData)))
91  ->method('get')
92  ->willReturnMap($calls);
93  $this->assertFalse((bool)$this->dataCollection->isLoaded());
94  foreach ($this->dataCollection->getItems() as $item) {
95  $this->assertEmpty(
96  array_diff(
97  [
98  'indexer_id',
99  'title',
100  'description',
101  'is_scheduled',
102  'status',
103  'updated',
104  ],
105  array_keys($item->getData())
106  )
107  );
108  $this->assertEmpty(
109  array_diff(
110  $indexersData[$item->getData('indexer_id')],
111  $item->getData()
112  )
113  );
114  }
115  $this->assertTrue($this->dataCollection->isLoaded());
116  }
117 
121  public function loadDataDataProvider()
122  {
123  return [
124  [
125  'indexers' => [
126  'indexer_2' => [
127  'getId' => 'indexer_2',
128  'getTitle' => 'Title_2',
129  'getDescription' => 'Description_2',
130  'isScheduled' => true,
131  'getStatus' => StateInterface::STATUS_INVALID,
132  'getLatestUpdated' => '2017/07/01'
133  ],
134  'indexer_3' => [
135  'getId' => 'indexer_3',
136  'getTitle' => 'Title_3',
137  'getDescription' => 'Description_3',
138  'isScheduled' => true,
139  'getStatus' => StateInterface::STATUS_VALID,
140  'getLatestUpdated' => '2017/07/02'
141  ],
142  'indexer_1' => [
143  'getId' => 'indexer_1',
144  'getTitle' => 'Title_1',
145  'getDescription' => 'Description_1',
146  'isScheduled' => false,
147  'getStatus' => StateInterface::STATUS_INVALID,
148  'getLatestUpdated' => '2017/07/03'
149  ],
150  ],
151  ]
152  ];
153  }
154 
159  private function getIndexerMock(array $data = [])
160  {
162  $indexer = $this->getMockBuilder(IndexerInterface::class)
163  ->getMockForAbstractClass();
164  foreach ($data as $methodName => $result) {
165  $indexer
166  ->method($methodName)
167  ->willReturn($result);
168  }
169  return $indexer;
170  }
171 }