FixtureModelTest.php 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Setup\Fixtures;
  7. use Magento\Framework\Indexer\IndexerRegistry;
  8. use Magento\Indexer\Model\Config;
  9. use Magento\TestFramework\Helper\Bootstrap;
  10. /**
  11. * Class Application test
  12. *
  13. * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  14. */
  15. class FixtureModelTest extends \Magento\TestFramework\Indexer\TestCase
  16. {
  17. /**
  18. * Profile generator working directory
  19. *
  20. * @var string
  21. */
  22. protected static $_generatorWorkingDir;
  23. /**
  24. * @var \Magento\Framework\ObjectManagerInterface
  25. */
  26. private $objectManager;
  27. /**
  28. * @var array
  29. */
  30. private $indexersState = [];
  31. /**
  32. * @var IndexerRegistry
  33. */
  34. private $indexerRegistry;
  35. /**
  36. * @var array
  37. */
  38. private $entityAsserts = [];
  39. /**
  40. * Set indexer mode to "scheduled" for do not perform reindex after creation entity
  41. */
  42. protected function setUp()
  43. {
  44. $this->objectManager = Bootstrap::getObjectManager();
  45. $this->indexerRegistry = $this->objectManager->get(IndexerRegistry::class);
  46. $this->entityAsserts[] = $this->objectManager->get(FixturesAsserts\SimpleProductsAssert::class);
  47. $this->entityAsserts[] = $this->objectManager->get(FixturesAsserts\ConfigurableProductsAssert::class);
  48. $this->entityAsserts[] = $this->objectManager->get(FixturesAsserts\BundleProductsAssert::class);
  49. $this->entityAsserts[] = $this->objectManager->get(FixturesAsserts\ImagesAssert::class);
  50. foreach ($this->objectManager->get(Config::class)->getIndexers() as $indexerId) {
  51. $indexer = $this->indexerRegistry->get($indexerId['indexer_id']);
  52. $this->indexersState[$indexerId['indexer_id']] = $indexer->isScheduled();
  53. $indexer->setScheduled(true);
  54. }
  55. }
  56. /**
  57. * Return indexer to previous state
  58. */
  59. protected function tearDown()
  60. {
  61. foreach ($this->indexersState as $indexerId => $state) {
  62. $indexer = $this->indexerRegistry->get($indexerId);
  63. $indexer->setScheduled($state);
  64. }
  65. }
  66. public static function setUpBeforeClass()
  67. {
  68. $db = Bootstrap::getInstance()->getBootstrap()
  69. ->getApplication()
  70. ->getDbInstance();
  71. if (!$db->isDbDumpExists()) {
  72. throw new \LogicException('DB dump does not exist.');
  73. }
  74. $db->restoreFromDbDump();
  75. self::$_generatorWorkingDir = realpath(
  76. __DIR__ . '/../../../../../../../setup/src/Magento/Setup/Fixtures/_files'
  77. );
  78. copy(
  79. self::$_generatorWorkingDir . '/tax_rates.csv',
  80. self::$_generatorWorkingDir . '/tax_rates.csv.bak'
  81. );
  82. copy(
  83. __DIR__ . '/_files/tax_rates.csv',
  84. self::$_generatorWorkingDir . '/tax_rates.csv'
  85. );
  86. parent::setUpBeforeClass();
  87. }
  88. /**
  89. * Generate test profile and performs assertions that generated entities are valid
  90. */
  91. public function testFixtureGeneration()
  92. {
  93. $reindexCommand = Bootstrap::getObjectManager()->get(
  94. \Magento\Indexer\Console\Command\IndexerReindexCommand::class
  95. );
  96. $itfApplication = Bootstrap::getInstance()->getBootstrap()->getApplication();
  97. $model = new FixtureModel($reindexCommand, $itfApplication->getInitParams());
  98. $model->loadConfig(__DIR__ . '/_files/small.xml');
  99. $model->initObjectManager();
  100. foreach ($model->loadFixtures()->getFixtures() as $fixture) {
  101. $fixture->execute();
  102. }
  103. foreach ($this->entityAsserts as $entityAssert) {
  104. try {
  105. $this->assertTrue($entityAssert->assert());
  106. } catch (\AssertionError $assertionError) {
  107. $this->assertTrue(false, $assertionError->getMessage());
  108. }
  109. }
  110. }
  111. public static function tearDownAfterClass()
  112. {
  113. parent::tearDownAfterClass();
  114. unlink(self::$_generatorWorkingDir . '/tax_rates.csv');
  115. rename(
  116. self::$_generatorWorkingDir . '/tax_rates.csv.bak',
  117. self::$_generatorWorkingDir . '/tax_rates.csv'
  118. );
  119. /** @var $appCache \Magento\Framework\App\Cache */
  120. $appCache = Bootstrap::getObjectManager()->get(\Magento\Framework\App\Cache::class);
  121. $appCache->clean(
  122. [
  123. \Magento\Eav\Model\Cache\Type::CACHE_TAG,
  124. \Magento\Eav\Model\Entity\Attribute::CACHE_TAG,
  125. ]
  126. );
  127. }
  128. }