DependencyCheckerTest.php 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Framework\Module\Test\Unit;
  7. use \Magento\Framework\Module\DependencyChecker;
  8. class DependencyCheckerTest extends \PHPUnit\Framework\TestCase
  9. {
  10. /**
  11. * @var \Magento\Framework\Module\DependencyChecker|\PHPUnit_Framework_MockObject_MockObject
  12. */
  13. private $checker;
  14. /**
  15. * @var \Magento\Framework\Module\PackageInfo|\PHPUnit_Framework_MockObject_MockObject
  16. */
  17. private $packageInfoMock;
  18. /**
  19. * @var \Magento\Framework\Module\PackageInfoFactory|\PHPUnit_Framework_MockObject_MockObject
  20. */
  21. private $packageInfoFactoryMock;
  22. /**
  23. * @var \Magento\Framework\Module\ModuleList|\PHPUnit_Framework_MockObject_MockObject
  24. */
  25. private $listMock;
  26. /**
  27. * @var \Magento\Framework\Module\ModuleList\Loader|\PHPUnit_Framework_MockObject_MockObject
  28. */
  29. private $loaderMock;
  30. protected function setUp()
  31. {
  32. $this->packageInfoMock = $this->createMock(\Magento\Framework\Module\PackageInfo::class);
  33. $requireMap = [
  34. ['A', ['B']],
  35. ['B', ['D', 'E']],
  36. ['C', ['E']],
  37. ['D', ['A']],
  38. ['E', []],
  39. ];
  40. $this->packageInfoMock
  41. ->expects($this->any())
  42. ->method('getRequire')
  43. ->will($this->returnValueMap($requireMap));
  44. $this->packageInfoFactoryMock = $this->createMock(\Magento\Framework\Module\PackageInfoFactory::class);
  45. $this->packageInfoFactoryMock->expects($this->once())
  46. ->method('create')
  47. ->will($this->returnValue($this->packageInfoMock));
  48. $this->listMock = $this->createMock(\Magento\Framework\Module\ModuleList::class);
  49. $this->loaderMock = $this->createMock(\Magento\Framework\Module\ModuleList\Loader::class);
  50. $this->loaderMock
  51. ->expects($this->any())
  52. ->method('load')
  53. ->will($this->returnValue(['A' => [], 'B' => [], 'C' => [], 'D' => [], 'E' => []]));
  54. }
  55. public function testCheckDependenciesWhenDisableModules()
  56. {
  57. $this->listMock->expects($this->any())
  58. ->method('getNames')
  59. ->will($this->returnValue(['A', 'B', 'C', 'D', 'E']));
  60. $this->packageInfoMock->expects($this->atLeastOnce())
  61. ->method('getNonExistingDependencies')
  62. ->willReturn([]);
  63. $this->checker = new DependencyChecker($this->listMock, $this->loaderMock, $this->packageInfoFactoryMock);
  64. $actual = $this->checker->checkDependenciesWhenDisableModules(['B', 'D']);
  65. $expected = ['B' => ['A' => ['A', 'B']], 'D' => ['A' => ['A', 'B', 'D']]];
  66. $this->assertEquals($expected, $actual);
  67. }
  68. public function testCheckDependenciesWhenDisableModulesWithCurEnabledModules()
  69. {
  70. $this->packageInfoMock->expects($this->atLeastOnce())
  71. ->method('getNonExistingDependencies')
  72. ->willReturn([]);
  73. $this->checker = new DependencyChecker($this->listMock, $this->loaderMock, $this->packageInfoFactoryMock);
  74. $actual = $this->checker->checkDependenciesWhenDisableModules(['B', 'D'], ['C', 'D', 'E']);
  75. $expected = ['B' => [], 'D' => []];
  76. $this->assertEquals($expected, $actual);
  77. }
  78. public function testCheckDependenciesWhenEnableModules()
  79. {
  80. $this->listMock->expects($this->any())
  81. ->method('getNames')
  82. ->will($this->returnValue(['C']));
  83. $this->packageInfoMock->expects($this->atLeastOnce())
  84. ->method('getNonExistingDependencies')
  85. ->willReturn([]);
  86. $this->checker = new DependencyChecker($this->listMock, $this->loaderMock, $this->packageInfoFactoryMock);
  87. $actual = $this->checker->checkDependenciesWhenEnableModules(['B', 'D']);
  88. $expected = [
  89. 'B' => ['A' => ['B', 'D', 'A'], 'E' => ['B', 'E']],
  90. 'D' => ['A' => ['D', 'A'], 'E' => ['D', 'A', 'B', 'E']],
  91. ];
  92. $this->assertEquals($expected, $actual);
  93. }
  94. public function testCheckDependenciesWhenEnableModulesWithCurEnabledModules()
  95. {
  96. $this->packageInfoMock->expects($this->atLeastOnce())
  97. ->method('getNonExistingDependencies')
  98. ->willReturn([]);
  99. $this->checker = new DependencyChecker($this->listMock, $this->loaderMock, $this->packageInfoFactoryMock);
  100. $actual = $this->checker->checkDependenciesWhenEnableModules(['B', 'D'], ['C']);
  101. $expected = [
  102. 'B' => ['A' => ['B', 'D', 'A'], 'E' => ['B', 'E']],
  103. 'D' => ['A' => ['D', 'A'], 'E' => ['D', 'A', 'B', 'E']],
  104. ];
  105. $this->assertEquals($expected, $actual);
  106. }
  107. }