ConflictCheckerTest.php 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  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\ConflictChecker;
  8. class ConflictCheckerTest extends \PHPUnit\Framework\TestCase
  9. {
  10. /**
  11. * @dataProvider checkConflictWhenEnableModuleDataProvider
  12. * @param array $conflictReturnMap
  13. * @param array $enabledModules
  14. * @param string $moduleName
  15. * @param array $expected
  16. */
  17. public function testCheckConflictsWhenEnableModules(
  18. $conflictReturnMap,
  19. $enabledModules,
  20. $moduleName,
  21. $expected
  22. ) {
  23. $moduleListMock = $this->createMock(\Magento\Framework\Module\ModuleList::class);
  24. $packageInfoMock = $this->createMock(\Magento\Framework\Module\PackageInfo::class);
  25. $moduleListMock->expects($this->any())
  26. ->method('getNames')
  27. ->will($this->returnValue($enabledModules));
  28. $packageInfoMock->expects($this->any())
  29. ->method('getConflict')
  30. ->will($this->returnValueMap($conflictReturnMap));
  31. $packageInfoMock->expects($this->any())
  32. ->method('getVersion')
  33. ->will($this->returnValue('0.1'));
  34. $packageInfoFactoryMock = $this->createMock(\Magento\Framework\Module\PackageInfoFactory::class);
  35. $packageInfoFactoryMock->expects($this->once())
  36. ->method('create')
  37. ->will($this->returnValue($packageInfoMock));
  38. $conflictChecker = new ConflictChecker($moduleListMock, $packageInfoFactoryMock);
  39. $this->assertEquals($expected, $conflictChecker->checkConflictsWhenEnableModules($moduleName));
  40. }
  41. /**
  42. * @return array
  43. */
  44. public function checkConflictWhenEnableModuleDataProvider()
  45. {
  46. return [
  47. [
  48. [['Vendor_A', ['Vendor_B' => '0.1']], ['Vendor_B', []]],
  49. ['Vendor_A'],
  50. ['Vendor_B'],
  51. ['Vendor_B' => ['Vendor_A conflicts with current Vendor_B version 0.1 (version should not be 0.1)']]
  52. ],
  53. [
  54. [['Vendor_A', ['Vendor_B' => '0.1']], ['Vendor_B', []]],
  55. [],
  56. ['Vendor_B'],
  57. ['Vendor_B' => []]
  58. ],
  59. [
  60. [['Vendor_B', ['Vendor_A' => '0.1']], ['Vendor_A', []]],
  61. ['Vendor_A'],
  62. ['Vendor_B'],
  63. ['Vendor_B' => ['Vendor_B conflicts with current Vendor_A version 0.1 (version should not be 0.1)']]
  64. ],
  65. [
  66. [['Vendor_B', ['Vendor_A' => '0.1']], ['Vendor_A', []]],
  67. [],
  68. ['Vendor_B'],
  69. ['Vendor_B' => []]
  70. ],
  71. [
  72. [['Vendor_A', []], ['Vendor_B', []]],
  73. ['Vendor_A'],
  74. ['Vendor_B'],
  75. ['Vendor_B' => []]
  76. ],
  77. [
  78. [['Vendor_A', []], ['Vendor_B', []], ['Vendor_C', []]],
  79. ['Vendor_A'],
  80. ['Vendor_B', 'Vendor_C'],
  81. ['Vendor_B' => [], 'Vendor_C' => []]
  82. ],
  83. [
  84. [['Vendor_A', ['Vendor_C' => '0.1']], ['Vendor_B', []], ['Vendor_C', []]],
  85. ['Vendor_A'],
  86. ['Vendor_B', 'Vendor_C'],
  87. [
  88. 'Vendor_B' => [],
  89. 'Vendor_C' => ['Vendor_A conflicts with current Vendor_C version 0.1 (version should not be 0.1)']
  90. ]
  91. ],
  92. [
  93. [['Vendor_A', []], ['Vendor_B', ['Vendor_C' => '0.1']], ['Vendor_C', []]],
  94. ['Vendor_A'],
  95. ['Vendor_B', 'Vendor_C'],
  96. [
  97. 'Vendor_B' => ['Vendor_B conflicts with current Vendor_C version 0.1 (version should not be 0.1)'],
  98. 'Vendor_C' => ['Vendor_B conflicts with current Vendor_C version 0.1 (version should not be 0.1)']
  99. ]
  100. ],
  101. [
  102. [['Vendor_A', ['Vendor_B' => '>=0.1']], ['Vendor_B', []]],
  103. ['Vendor_A'],
  104. ['Vendor_B'],
  105. ['Vendor_B' => ['Vendor_A conflicts with current Vendor_B version 0.1 (version should not be >=0.1)']]
  106. ],
  107. [
  108. [['Vendor_A', ['Vendor_B' => '~0.1']], ['Vendor_B', []]],
  109. ['Vendor_A'],
  110. ['Vendor_B'],
  111. ['Vendor_B' => ['Vendor_A conflicts with current Vendor_B version 0.1 (version should not be ~0.1)']]
  112. ],
  113. ];
  114. }
  115. public function testCheckConflictWhenEnableModuleDifferentVersion()
  116. {
  117. $moduleListMock = $this->createMock(\Magento\Framework\Module\ModuleList::class);
  118. $packageInfoMock = $this->createMock(\Magento\Framework\Module\PackageInfo::class);
  119. $moduleListMock->expects($this->any())
  120. ->method('getNames')
  121. ->will($this->returnValue(['Vendor_A', 'Vendor_B']));
  122. $packageInfoMock->expects($this->any())
  123. ->method('getConflict')
  124. ->will($this->returnValueMap([
  125. ['Vendor_A', []],
  126. ['Vendor_B', []],
  127. ['Vendor_C', ['Vendor_A' => '>=0.2,<0.3', 'Vendor_B' => '<0.4']]
  128. ]));
  129. $packageInfoMock->expects($this->any())
  130. ->method('getVersion')
  131. ->will($this->returnValueMap([['Vendor_A', '0.2'], ['Vendor_B', '0.4']]));
  132. $packageInfoFactoryMock = $this->createMock(\Magento\Framework\Module\PackageInfoFactory::class);
  133. $packageInfoFactoryMock->expects($this->once())
  134. ->method('create')
  135. ->will($this->returnValue($packageInfoMock));
  136. $conflictChecker = new ConflictChecker($moduleListMock, $packageInfoFactoryMock);
  137. $this->assertEquals(
  138. ['Vendor_C' => ['Vendor_C conflicts with current Vendor_A version 0.2 (version should not be >=0.2,<0.3)']],
  139. $conflictChecker->checkConflictsWhenEnableModules(['Vendor_C'])
  140. );
  141. }
  142. public function testCheckConflictWhenEnableModuleDifferentVersionWithCurEnabledModules()
  143. {
  144. $moduleListMock = $this->createMock(\Magento\Framework\Module\ModuleList::class);
  145. $packageInfoMock = $this->createMock(\Magento\Framework\Module\PackageInfo::class);
  146. $packageInfoMock->expects($this->any())
  147. ->method('getConflict')
  148. ->will($this->returnValueMap([
  149. ['Vendor_A', []],
  150. ['Vendor_B', []],
  151. ['Vendor_C', ['Vendor_A' => '>=0.2,<0.3', 'Vendor_B' => '<0.4']]
  152. ]));
  153. $packageInfoMock->expects($this->any())
  154. ->method('getVersion')
  155. ->will($this->returnValueMap([['Vendor_A', '0.2'], ['Vendor_B', '0.4']]));
  156. $packageInfoFactoryMock = $this->createMock(\Magento\Framework\Module\PackageInfoFactory::class);
  157. $packageInfoFactoryMock->expects($this->once())
  158. ->method('create')
  159. ->will($this->returnValue($packageInfoMock));
  160. $conflictChecker = new ConflictChecker($moduleListMock, $packageInfoFactoryMock);
  161. $this->assertEquals(
  162. ['Vendor_C' => ['Vendor_C conflicts with current Vendor_A version 0.2 (version should not be >=0.2,<0.3)']],
  163. $conflictChecker->checkConflictsWhenEnableModules(['Vendor_C'], ['Vendor_A', 'Vendor_B'])
  164. );
  165. }
  166. }