Skip to content

Commit e377e3c

Browse files
committed
Integration Test for CC Number Encryption Updater
1 parent 38f0bc2 commit e377e3c

File tree

2 files changed

+103
-0
lines changed

2 files changed

+103
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
declare(strict_types=1);
8+
9+
namespace Magento\Sales\Model\ResourceModel\Order\Payment;
10+
11+
use Magento\Framework\Encryption\Encryptor;
12+
use Magento\TestFramework\Helper\Bootstrap;
13+
14+
class EncryptionUpdateTest extends \PHPUnit\Framework\TestCase
15+
{
16+
const TEST_CC_NUMBER = '4111111111111111';
17+
18+
/**
19+
* Tests re-encryption of credit card numbers
20+
*
21+
* @magentoDataFixture Magento/Sales/_files/payment_enc_cc.php
22+
*/
23+
public function testReEncryptCreditCardNumbers()
24+
{
25+
$objectManager = Bootstrap::getObjectManager();
26+
27+
/** @var \Magento\Framework\Encryption\EncryptorInterface $encyptor */
28+
$encyptor = $objectManager->get(\Magento\Framework\Encryption\EncryptorInterface::class);
29+
30+
/** @var \Magento\Sales\Model\ResourceModel\Order\Payment\EncryptionUpdate $resource */
31+
$resource = $objectManager->create(\Magento\Sales\Model\ResourceModel\Order\Payment\EncryptionUpdate::class);
32+
$resource->reEncryptCreditCardNumbers();
33+
34+
/** @var \Magento\Sales\Model\ResourceModel\Order\Payment\Collection $collection */
35+
$collection = $objectManager->create(\Magento\Sales\Model\ResourceModel\Order\Payment\Collection::class);
36+
$collection->addFieldToFilter('cc_number_enc', ['notnull' => true]);
37+
38+
$this->assertGreaterThan(0, $collection->getTotalCount());
39+
40+
/** @var \Magento\Sales\Model\Order\Payment $payment */
41+
foreach ($collection->getItems() as $payment) {
42+
$this->assertEquals(
43+
static::TEST_CC_NUMBER,
44+
$encyptor->decrypt($payment->getCcNumberEnc())
45+
);
46+
47+
$this->assertStringStartsWith('0:' . Encryptor::CIPHER_LATEST . ':', $payment->getCcNumberEnc());
48+
}
49+
}
50+
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
declare(strict_types=1);
8+
9+
use Magento\Framework\Api\SearchCriteriaBuilder;
10+
use Magento\Framework\Api\SearchCriteria;
11+
use Magento\Sales\Model\ResourceModel\Order\Payment\EncryptionUpdateTest;
12+
use Magento\Framework\App\DeploymentConfig;
13+
14+
require 'order.php';
15+
16+
$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
17+
18+
/** @var DeploymentConfig $deployConfig */
19+
$deployConfig = $objectManager->get(DeploymentConfig::class);
20+
21+
/**
22+
* Creates an encrypted card number with the current crypt key using
23+
* a legacy cipher.
24+
*/
25+
// @codingStandardIgnoreStart
26+
$handle = @mcrypt_module_open(MCRYPT_RIJNDAEL_256, '', MCRYPT_MODE_CBC, '');
27+
$initVectorSize = @mcrypt_enc_get_iv_size($handle);
28+
$initVector = str_repeat("\0", $initVectorSize);
29+
@mcrypt_generic_init($handle, $deployConfig->get('crypt/key'), $initVector);
30+
31+
$encCcNumber = @mcrypt_generic($handle, EncryptionUpdateTest::TEST_CC_NUMBER);
32+
33+
@mcrypt_generic_deinit($handle);
34+
@mcrypt_module_close($handle);
35+
// @codingStandardIgnoreEnd
36+
37+
/** @var SearchCriteria $searchCriteria */
38+
$searchCriteria = $objectManager->get(SearchCriteriaBuilder::class)
39+
->addFilter('increment_id', '100000001')
40+
->create();
41+
42+
$orders = $orderRepository->getList($searchCriteria)->getItems();
43+
$order = array_pop($orders);
44+
45+
/** @var \Magento\Sales\Model\ResourceModel\Order\Payment $resource */
46+
$resource = $objectManager->create(\Magento\Sales\Model\ResourceModel\Order\Payment::class);
47+
$resource->getConnection()->insert(
48+
$resource->getMainTable(),
49+
[
50+
'parent_id' => $order->getId(),
51+
'cc_number_enc' => '0:2:' . base64_encode($encCcNumber),
52+
]
53+
);

0 commit comments

Comments
 (0)