SetupDeltaLogTest.php 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Migration\App;
  7. /**
  8. * Delta step test class
  9. */
  10. class SetupDeltaLogTest extends \PHPUnit\Framework\TestCase
  11. {
  12. /**
  13. * @var SetupDeltaLog|\PHPUnit_Framework_MockObject_MockObject
  14. */
  15. private $setupDeltaLog;
  16. /**
  17. * @var \Magento\Framework\ObjectManagerInterface
  18. */
  19. private $objectManager;
  20. /**
  21. * @var \Migration\ResourceModel\Source
  22. */
  23. private $source;
  24. /**
  25. * @return void
  26. */
  27. public function setUp()
  28. {
  29. $helper = \Migration\TestFramework\Helper::getInstance();
  30. $this->objectManager = $helper->getObjectManager();
  31. $this->objectManager->get(\Migration\Config::class)
  32. ->init(dirname(__DIR__) . '/_files/' . $helper->getFixturePrefix() . 'config.xml');
  33. $this->setupDeltaLog = $this->objectManager->create(
  34. \Migration\App\SetupDeltaLog::class
  35. );
  36. $this->source = $this->objectManager->create(\Migration\ResourceModel\Source::class);
  37. }
  38. /**
  39. * @return void
  40. */
  41. public function testSetupTriggers()
  42. {
  43. ob_start();
  44. $this->assertTrue($this->setupDeltaLog->perform());
  45. ob_end_clean();
  46. $dataTable = 'table_with_data';
  47. $this->checkDeltaLogTable($dataTable, $this->source);
  48. $this->checkDeltaLogTable('source_table_1', $this->source);
  49. $this->checkDeltaLogTable('source_table_2', $this->source);
  50. $sourceAdapter = $this->source->getAdapter();
  51. $sourceAdapter->insertRecords(
  52. $dataTable,
  53. [
  54. 'field1' => 100,
  55. 'field2' => 2,
  56. 'field3' => 3,
  57. ]
  58. );
  59. $sourceAdapter->insertRecords(
  60. $dataTable,
  61. [
  62. 'field1' => 1000,
  63. 'field2' => 200
  64. ]
  65. );
  66. $sourceAdapter->insertRecords(
  67. $dataTable,
  68. [
  69. 'field1' => 101,
  70. 'field2' => 22,
  71. 'field3' => 33,
  72. ]
  73. );
  74. $sourceAdapter->updateDocument(
  75. $dataTable,
  76. [
  77. 'field2' => 12,
  78. 'field3' => 13,
  79. ],
  80. 'field1 = 100'
  81. );
  82. $expectedData = [
  83. ['key' => '8', 'operation' => 'UPDATE', 'processed' => 0],
  84. ['key' => '9', 'operation' => 'INSERT', 'processed' => 0],
  85. ['key' => '10', 'operation' => 'INSERT', 'processed' => 0]
  86. ];
  87. $this->assertEquals($expectedData, $this->source->getRecords($this->source->getDeltaLogName($dataTable), 0));
  88. }
  89. /**
  90. * @param string $dataTable
  91. * @param \Migration\ResourceModel\Source $resource
  92. * @return void
  93. */
  94. protected function checkDeltaLogTable($dataTable, $resource)
  95. {
  96. $deltaLogTableName = $resource->getDeltaLogName($dataTable);
  97. $deltaLogTable = $resource->getDocument($deltaLogTableName);
  98. $this->assertEquals($deltaLogTableName, $deltaLogTable->getName());
  99. }
  100. /**
  101. * @return void
  102. */
  103. public function testSetupTriggersFail()
  104. {
  105. $message = [
  106. \Monolog\Logger::WARNING => ['Some of the delta log tables were not created. Expected:3. Actual:2']
  107. ];
  108. /** @var \Magento\Framework\DB\Adapter\Pdo\Mysql $adapter */
  109. $adapter = $this->source->getAdapter()->getSelect()->getAdapter();
  110. $adapter->dropTable('source_table_1');
  111. ob_start();
  112. $this->assertTrue($this->setupDeltaLog->perform());
  113. ob_end_clean();
  114. $this->assertEquals($message, \Migration\Logger\Logger::getMessages());
  115. }
  116. }