Skip to content

Commit fc503d1

Browse files
committed
AC-10686: [PCI] SRI enabled on payment pages.
Added new unit tests.
1 parent 5580fda commit fc503d1

File tree

2 files changed

+115
-34
lines changed

2 files changed

+115
-34
lines changed
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Magento\Csp\Test\Unit\Model;
9+
10+
use Magento\Framework\App\CacheInterface;
11+
use Magento\Framework\Serialize\SerializerInterface;
12+
use PHPUnit\Framework\MockObject\MockObject;
13+
use PHPUnit\Framework\TestCase;
14+
use Magento\Csp\Model\SubresourceIntegrity;
15+
use Magento\Csp\Model\SubresourceIntegrityRepository;
16+
use Magento\Csp\Model\SubresourceIntegrityFactory;
17+
18+
/**
19+
* Unit Test for Class @see Magento\Csp\Model\SubresourceIntegrityRepository
20+
*
21+
*/
22+
class SubresourceIntegrityRepositoryTest extends TestCase
23+
{
24+
25+
/**
26+
* @var MockObject
27+
*/
28+
private MockObject $cacheMock;
29+
30+
/**
31+
* @var MockObject
32+
*/
33+
private MockObject $serializerMock;
34+
35+
/**
36+
* @var MockObject
37+
*/
38+
private MockObject $integrityFactoryMock;
39+
40+
/**
41+
* @var SubresourceIntegrityRepository|null
42+
*/
43+
private ?SubresourceIntegrityRepository $subresourceIntegrityRepository = null;
44+
45+
/**
46+
* Initialize dependencies
47+
*
48+
* @return void
49+
*/
50+
protected function setUp(): void
51+
{
52+
parent::setUp();
53+
$this->cacheMock = $this->getMockBuilder(CacheInterface::class)
54+
->disableOriginalConstructor()
55+
->onlyMethods(['save', 'load'])
56+
->getMockForAbstractClass();
57+
$this->serializerMock = $this->getMockBuilder(SerializerInterface::class)
58+
->disableOriginalConstructor()
59+
->onlyMethods(['serialize', 'unserialize'])
60+
->getMockForAbstractClass();
61+
$this->integrityFactoryMock = $this->getMockBuilder(SubresourceIntegrityFactory::class)
62+
->disableOriginalConstructor()
63+
->getMock();
64+
65+
$this->subresourceIntegrityRepository = new SubresourceIntegrityRepository(
66+
$this->cacheMock,
67+
$this->serializerMock,
68+
$this->integrityFactoryMock
69+
);
70+
}
71+
72+
/** Test save repository
73+
*
74+
*
75+
* @return void
76+
*/
77+
public function testSave(): void
78+
{
79+
$data = new SubresourceIntegrity(
80+
[
81+
'hash' => 'testhash',
82+
'url' => 'http://magento.test'
83+
]
84+
);
85+
86+
$expected[$data->getUrl()] = [
87+
'url' => $data->getUrl(),
88+
'hash' => $data->getHash()
89+
];
90+
$serialized = json_encode($expected);
91+
$this->cacheMock->expects($this->once())->method('load')->willReturn(false);
92+
$this->serializerMock->expects($this->once())->method('serialize')->with($expected)->willReturn($serialized);
93+
$this->cacheMock->expects($this->once())->method('save')->willReturn(true);
94+
$this->assertTrue($this->subresourceIntegrityRepository->save($data));
95+
}
96+
}

app/code/Magento/Csp/Test/Unit/Plugin/AddDefaultPropertiesToGroupPluginTest.php

Lines changed: 19 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,13 @@
99

1010
use Magento\Csp\Model\SubresourceIntegrity;
1111
use Magento\Csp\Model\SubresourceIntegrityRepository;
12-
use Magento\Framework\App\Request\Http;
12+
use Magento\Csp\Model\SubresourceIntegrityRepositoryPool;
1313
use PHPUnit\Framework\MockObject\MockObject;
1414
use PHPUnit\Framework\TestCase;
1515
use Magento\Csp\Plugin\AddDefaultPropertiesToGroupPlugin;
1616
use Magento\Framework\View\Asset\File;
1717
use Magento\Framework\View\Asset\GroupedCollection;
18+
use Magento\Framework\App\State;
1819

1920
/**
2021
* Test for class Magento\Csp\Plugin\AddDefaultPropertiesToGroupPlugin
@@ -26,17 +27,17 @@ class AddDefaultPropertiesToGroupPluginTest extends TestCase
2627
/**
2728
* @var MockObject
2829
*/
29-
private MockObject $requestMock;
30+
private MockObject $assetInterfaceMock;
3031

3132
/**
3233
* @var MockObject
3334
*/
34-
private MockObject $assetInterfaceMock;
35+
private MockObject $integrityRepositoryPoolMock;
3536

3637
/**
3738
* @var MockObject
3839
*/
39-
private MockObject $integrityRepositoryMock;
40+
private MockObject $stateMock;
4041

4142
/**
4243
* @var array $controllerActions
@@ -56,23 +57,21 @@ class AddDefaultPropertiesToGroupPluginTest extends TestCase
5657
protected function setUp(): void
5758
{
5859
parent::setUp();
59-
$this->integrityRepositoryMock = $this->getMockBuilder(SubresourceIntegrityRepository::class)
60+
$this->integrityRepositoryPoolMock = $this->getMockBuilder(SubresourceIntegrityRepositoryPool::class)
6061
->disableOriginalConstructor()
61-
->onlyMethods(['getByUrl'])
62+
->onlyMethods(['get'])
6263
->getMock();
6364
$this->assetInterfaceMock = $this->getMockBuilder(File::class)
6465
->disableOriginalConstructor()
6566
->onlyMethods(['getUrl', 'getContentType'])
6667
->getMockForAbstractClass();
67-
$this->requestMock = $this->getMockBuilder(Http::class)
68+
$this->stateMock = $this->getMockBuilder(State::class)
6869
->disableOriginalConstructor()
69-
->onlyMethods(['getFullActionName'])
70+
->onlyMethods(['getAreaCode'])
7071
->getMock();
71-
$this->controllerActions = ['checkout_index_index', 'sales_order_create'];
7272
$this->plugin = new AddDefaultPropertiesToGroupPlugin(
73-
$this->requestMock,
74-
$this->integrityRepositoryMock,
75-
$this->controllerActions
73+
$this->stateMock,
74+
$this->integrityRepositoryPoolMock
7675
);
7776
}
7877

@@ -83,10 +82,15 @@ protected function setUp(): void
8382
*/
8483
public function testBeforeGetFilteredProperties(): void
8584
{
85+
$integrityRepositoryMock = $this->getMockBuilder(SubresourceIntegrityRepository::class)
86+
->disableOriginalConstructor()
87+
->onlyMethods(['getByUrl'])
88+
->getMock();
8689
$groupedCollectionMock = $this->getMockBuilder(GroupedCollection::class)
8790
->disableOriginalConstructor()
8891
->getMock();
8992
$url = 'https://magento.test/static/version1708401324/frontend/Magento/luma/en_US/jquery.js';
93+
$area = 'frontend';
9094

9195
$data = new SubresourceIntegrity(
9296
[
@@ -97,29 +101,10 @@ public function testBeforeGetFilteredProperties(): void
97101
$properties['attributes']['integrity'] = $data->getHash();
98102
$properties['attributes']['crossorigin'] = 'anonymous';
99103
$expected = [$this->assetInterfaceMock, $properties];
100-
$this->assetInterfaceMock->expects($this->once())->method('getContentType')->willReturn('js');
104+
$this->stateMock->expects($this->once())->method('getAreaCode')->willReturn($area);
105+
$this->integrityRepositoryPoolMock->expects($this->once())->method('get')->with($area)->willReturn($integrityRepositoryMock);
101106
$this->assetInterfaceMock->expects($this->once())->method('getUrl')->willReturn($url);
102-
$this->integrityRepositoryMock->expects($this->once())->method('getByUrl')->with($url)->willReturn($data);
103-
$this->requestMock->expects($this->once())->method('getFullActionName')->willReturn('sales_order_create');
104-
$this->assertEquals($expected,
105-
$this->plugin->beforeGetFilteredProperties($groupedCollectionMock, $this->assetInterfaceMock
106-
)
107-
);
108-
}
109-
110-
/**
111-
* Test for plugin with css assets
112-
*
113-
* @return void
114-
*/
115-
public function testBeforeGetFilteredPropertiesForCssAssets(): void
116-
{
117-
$groupedCollectionMock = $this->getMockBuilder(GroupedCollection::class)
118-
->disableOriginalConstructor()
119-
->getMock();
120-
$expected = [$this->assetInterfaceMock, []];
121-
$this->assetInterfaceMock->expects($this->once())->method('getContentType')->willReturn('css');
122-
$this->requestMock->expects($this->once())->method('getFullActionName')->willReturn('sales_order_create');
107+
$integrityRepositoryMock->expects($this->once())->method('getByUrl')->with($url)->willReturn($data);
123108
$this->assertEquals($expected,
124109
$this->plugin->beforeGetFilteredProperties($groupedCollectionMock, $this->assetInterfaceMock
125110
)

0 commit comments

Comments
 (0)