ChangeTest.php 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\EncryptionKey\Test\Unit\Model\ResourceModel\Key;
  7. /**
  8. * Test Class For Magento\EncryptionKey\Model\ResourceModel\Key\Change
  9. *
  10. * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  11. */
  12. class ChangeTest extends \PHPUnit\Framework\TestCase
  13. {
  14. /** @var \Magento\Framework\Encryption\EncryptorInterface|\PHPUnit_Framework_MockObject_MockObject */
  15. protected $encryptMock;
  16. /** @var \Magento\Framework\Filesystem|\PHPUnit_Framework_MockObject_MockObject */
  17. protected $filesystemMock;
  18. /** @var \Magento\Config\Model\Config\Structure|\PHPUnit_Framework_MockObject_MockObject */
  19. protected $structureMock;
  20. /** @var \Magento\Framework\App\DeploymentConfig\Writer|\PHPUnit_Framework_MockObject_MockObject */
  21. protected $writerMock;
  22. /** @var \Magento\Framework\DB\Adapter\AdapterInterface|\PHPUnit_Framework_MockObject_MockObject */
  23. protected $adapterMock;
  24. /** @var \Magento\Framework\App\ResourceConnection|\PHPUnit_Framework_MockObject_MockObject */
  25. protected $resourceMock;
  26. /** @var \Magento\Framework\DB\Select|\PHPUnit_Framework_MockObject_MockObject */
  27. protected $selectMock;
  28. /** @var \Magento\Framework\Model\ResourceModel\Db\TransactionManagerInterface */
  29. protected $transactionMock;
  30. /** @var |\PHPUnit_Framework_MockObject_MockObject */
  31. protected $objRelationMock;
  32. /** @var \Magento\Framework\Math\Random|\PHPUnit_Framework_MockObject_MockObject */
  33. protected $randomMock;
  34. /** @var \Magento\EncryptionKey\Model\ResourceModel\Key\Change */
  35. protected $model;
  36. protected function setUp()
  37. {
  38. $this->encryptMock = $this->getMockBuilder(\Magento\Framework\Encryption\EncryptorInterface::class)
  39. ->disableOriginalConstructor()
  40. ->setMethods(['setNewKey', 'exportKeys'])
  41. ->getMockForAbstractClass();
  42. $this->filesystemMock = $this->getMockBuilder(\Magento\Framework\Filesystem::class)
  43. ->disableOriginalConstructor()
  44. ->setMethods([])
  45. ->getMock();
  46. $this->structureMock = $this->getMockBuilder(\Magento\Config\Model\Config\Structure::class)
  47. ->disableOriginalConstructor()
  48. ->setMethods([])
  49. ->getMock();
  50. $this->writerMock = $this->getMockBuilder(\Magento\Framework\App\DeploymentConfig\Writer::class)
  51. ->disableOriginalConstructor()
  52. ->setMethods([])
  53. ->getMock();
  54. $this->adapterMock = $this->getMockBuilder(\Magento\Framework\DB\Adapter\AdapterInterface::class)
  55. ->disableOriginalConstructor()
  56. ->setMethods([])
  57. ->getMock();
  58. $this->resourceMock = $this->getMockBuilder(\Magento\Framework\App\ResourceConnection::class)
  59. ->disableOriginalConstructor()
  60. ->setMethods([])
  61. ->getMock();
  62. $this->selectMock = $this->getMockBuilder(\Magento\Framework\DB\Select::class)
  63. ->disableOriginalConstructor()
  64. ->setMethods(['from', 'where', 'update'])
  65. ->getMock();
  66. $translationClassName = \Magento\Framework\Model\ResourceModel\Db\TransactionManagerInterface::class;
  67. $this->transactionMock = $this->getMockBuilder($translationClassName)
  68. ->disableOriginalConstructor()
  69. ->setMethods([])
  70. ->getMock();
  71. $relationClassName = \Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor::class;
  72. $this->objRelationMock = $this->getMockBuilder($relationClassName)
  73. ->disableOriginalConstructor()
  74. ->setMethods([])
  75. ->getMock();
  76. $this->randomMock = $this->createMock(\Magento\Framework\Math\Random::class);
  77. $helper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
  78. $this->model = $helper->getObject(
  79. \Magento\EncryptionKey\Model\ResourceModel\Key\Change::class,
  80. [
  81. 'filesystem' => $this->filesystemMock,
  82. 'structure' => $this->structureMock,
  83. 'encryptor' => $this->encryptMock,
  84. 'writer' => $this->writerMock,
  85. 'adapterInterface' => $this->adapterMock,
  86. 'resource' => $this->resourceMock,
  87. 'transactionManager' => $this->transactionMock,
  88. 'relationProcessor' => $this->objRelationMock,
  89. 'random' => $this->randomMock
  90. ]
  91. );
  92. }
  93. private function setUpChangeEncryptionKey()
  94. {
  95. $paths = ['path1', 'path2'];
  96. $table = ['item1', 'item2'];
  97. $values = [
  98. 'key1' => 'value1',
  99. 'key2' => 'value2'
  100. ];
  101. $this->writerMock->expects($this->once())->method('checkIfWritable')->willReturn(true);
  102. $this->resourceMock->expects($this->atLeastOnce())->method('getConnection')->willReturn($this->adapterMock);
  103. $this->adapterMock->expects($this->once())->method('beginTransaction');
  104. $this->structureMock->expects($this->once())->method('getFieldPathsByAttribute')->willReturn($paths);
  105. $this->resourceMock->expects($this->atLeastOnce())->method('getTableName')->willReturn($table);
  106. $this->adapterMock->expects($this->any())->method('select')->willReturn($this->selectMock);
  107. $this->adapterMock->expects($this->any())->method('fetchPairs')->willReturn($values);
  108. $this->selectMock->expects($this->any())->method('from')->willReturnSelf();
  109. $this->selectMock->expects($this->atLeastOnce())->method('where')->willReturnSelf();
  110. $this->selectMock->expects($this->any())->method('update')->willReturnSelf();
  111. $this->writerMock->expects($this->once())->method('saveConfig');
  112. $this->adapterMock->expects($this->once())->method('getTransactionLevel')->willReturn(1);
  113. }
  114. public function testChangeEncryptionKey()
  115. {
  116. $this->setUpChangeEncryptionKey();
  117. $this->randomMock->expects($this->never())->method('getRandomString');
  118. $key = 'key';
  119. $this->assertEquals($key, $this->model->changeEncryptionKey($key));
  120. }
  121. public function testChangeEncryptionKeyAutogenerate()
  122. {
  123. $this->setUpChangeEncryptionKey();
  124. $this->randomMock->expects($this->once())->method('getRandomString')->willReturn('abc');
  125. $this->assertEquals(md5('abc'), $this->model->changeEncryptionKey());
  126. }
  127. public function testChangeEncryptionKeyThrowsException()
  128. {
  129. $key = 'key';
  130. $this->writerMock->expects($this->once())->method('checkIfWritable')->willReturn(false);
  131. try {
  132. $this->model->changeEncryptionKey($key);
  133. } catch (\Exception $e) {
  134. return;
  135. }
  136. $this->fail('An expected exception was not signaled.');
  137. }
  138. }