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