/** * Tests modules data returns array and saving in DB * * @dataProvider itemDataProvider * @return void */ public function testGetModuleDataRefreshOrStatement($data) { $moduleCollectionMock = $this->getMockBuilder('Magento\\NewRelicReporting\\Model\\ResourceModel\\Module\\Collection')->disableOriginalConstructor()->getMock(); /** @var \Magento\NewRelicReporting\Model\Module|\PHPUnit_Framework_MockObject_MockObject $itemMock */ $itemMock = $this->getMock('Magento\\NewRelicReporting\\Model\\Module', ['getName', 'getData', 'setData', 'getState', 'save'], [], '', false); $modulesMockArray = ['Module_Name1' => ['name' => 'Module_Name1', 'setup_version' => '2.0.0', 'sequence' => []]]; $itemMock->setData($data); $testChangesMockArray = ['entity_id' => '3', 'name' => 'Name', 'active' => 'false', 'state' => 'enabled', 'setup_version' => '2.0.0', 'some_param' => 'some_value', 'updated_at' => '2015-09-02 18:38:17']; $itemMockArray = [$itemMock]; $enabledModulesMockArray = ['Module_Name2']; $allModulesMockArray = ['Module_Name1', 'Module_Name2']; $this->moduleCollectionFactoryMock->expects($this->any())->method('create')->willReturn($moduleCollectionMock); $this->moduleFactoryMock->expects($this->any())->method('create')->willReturn($itemMock); $itemMock->expects($this->any())->method('setData')->willReturnSelf(); $itemMock->expects($this->any())->method('save')->willReturnSelf(); $itemMock->expects($this->any())->method('getState')->willReturn($data['state']); $itemMock->expects($this->any())->method('getName')->willReturn($data['name']); $moduleCollectionMock->expects($this->any())->method('getItems')->willReturn($itemMockArray); $itemMock->expects($this->any())->method('getData')->willReturn($testChangesMockArray); $this->fullModuleListMock->expects($this->once())->method('getAll')->willReturn($modulesMockArray); $this->fullModuleListMock->expects($this->any())->method('getNames')->willReturn($allModulesMockArray); $this->moduleListMock->expects($this->any())->method('getNames')->willReturn($enabledModulesMockArray); $this->moduleManagerMock->expects($this->any())->method('isOutputEnabled')->will($this->returnValue(true)); $this->assertInternalType('array', $this->model->getModuleData()); }
/** * Collects required data about the modules * * @param bool $refresh * @return array */ public function getModuleData($refresh = true) { $callback = function (Module $value) { return $value->getName(); }; $configModules = $this->getAllModules(); /** @var Module[] $dbModuleArray */ $dbModuleArray = $this->moduleCollectionFactory->create()->getItems(); $nameValues = array_map($callback, $dbModuleArray); $moduleChanges = []; foreach ($configModules as $moduleName => $module) { unset($module['sequence']); $state = $this->getState($moduleName); $active = $this->getActive($moduleName); $module['state'] = $state; $module['active'] = $active; if (!in_array($moduleName, $nameValues)) { $moduleChanges[] = $this->getNewModuleChanges($moduleName, $active, $module['setup_version'], $state); } else { $dbModule = $dbModuleArray[array_search($moduleName, $nameValues)]; $changeTest = $dbModule->getData(); $changes = array_diff($module, $changeTest); $changesCleanArray = $this->getCleanChangesArray($changes); if (count($changesCleanArray) > 0 || $this->moduleManager->isOutputEnabled($changeTest['name']) && $module['setup_version'] != null) { $data = ['entity_id' => $changeTest['entity_id'], 'name' => $changeTest['name'], 'active' => $active, 'setup_version' => $module['setup_version'], 'state' => $state]; if ($refresh) { $dbModule->setData($data); $dbModule->save(); } $moduleChanges[] = ['name' => $data['name'], 'setup_version' => $data['setup_version'], 'type' => $state]; } } } $arrayModuleNames = array_keys($configModules); $uninstalledModuleChanges = $this->setUninstalledModuleChanges($dbModuleArray, $arrayModuleNames); if (is_array($uninstalledModuleChanges)) { $moduleChanges[] = $uninstalledModuleChanges; } $finalObject = $this->getFinalCounts($moduleChanges); return $finalObject; }