Skip to content

Commit f7988a8

Browse files
committed
Unit tests for Magento\Csp\Model\Mode\ConfigManager and Magento\Csp\Observer\Render
1 parent ba8fae3 commit f7988a8

File tree

2 files changed

+179
-0
lines changed

2 files changed

+179
-0
lines changed
Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
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\Csp\Test\Unit\Model\Mode;
10+
11+
use Magento\Csp\Model\Mode\ConfigManager;
12+
use Magento\Csp\Model\Mode\Data\ModeConfigured;
13+
use Magento\Framework\App\Area;
14+
use Magento\Framework\App\Config\ScopeConfigInterface;
15+
use Magento\Framework\App\State;
16+
use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
17+
use Magento\Store\Model\Store;
18+
use PHPUnit\Framework\MockObject\MockObject;
19+
use PHPUnit\Framework\TestCase;
20+
21+
/**
22+
* Unit Test for \Magento\Csp\Model\Mode\ConfigManager
23+
*/
24+
class ConfigManagerTest extends TestCase
25+
{
26+
const STUB_REPORT_ONLY = true;
27+
const STUB_AREA_CODE_OTHER = 'other';
28+
29+
/**
30+
* @var MockObject|ScopeConfigInterface
31+
*/
32+
private $configMock;
33+
34+
/**
35+
* @var MockObject|Store
36+
*/
37+
private $storeModelMock;
38+
39+
/**
40+
* @var MockObject|State
41+
*/
42+
private $stateMock;
43+
44+
/**
45+
* @var ConfigManager
46+
*/
47+
private $model;
48+
49+
/**
50+
* @inheritDoc
51+
*/
52+
protected function setUp()
53+
{
54+
$this->configMock = $this->createMock(ScopeConfigInterface::class);
55+
$this->storeModelMock = $this->createMock(Store::class);
56+
$this->stateMock = $this->createMock(State::class);
57+
58+
$objectManagerHelper = new ObjectManagerHelper($this);
59+
$this->model = $objectManagerHelper->getObject(
60+
ConfigManager::class,
61+
[
62+
'config' => $this->configMock,
63+
'storeModel' => $this->storeModelMock,
64+
'state' => $this->stateMock
65+
]
66+
);
67+
}
68+
69+
/**
70+
* Test case with correct Area codes.
71+
*
72+
* @param string $area
73+
* @param string $pathReportOnly
74+
* @param string $pathReportUri
75+
* @dataProvider dataProviderGetConfiguredWithCorrectArea
76+
*/
77+
public function testGetConfiguredWithCorrectArea(string $area, string $pathReportOnly, string $pathReportUri)
78+
{
79+
$this->stateMock->expects($this->once())->method('getAreaCode')->willReturn($area);
80+
81+
$this->configMock->expects($this->once())->method('getValue')->with($pathReportUri);
82+
$this->configMock->expects($this->once())
83+
->method('isSetFlag')
84+
->with($pathReportOnly)
85+
->willReturn(self::STUB_REPORT_ONLY);
86+
87+
$this->assertInstanceOf(ModeConfigured::class, $this->model->getConfigured());
88+
}
89+
90+
/**
91+
* Data Provider with appropriate areas.
92+
*
93+
* @return array
94+
*/
95+
public function dataProviderGetConfiguredWithCorrectArea(): array
96+
{
97+
return [
98+
[
99+
'area' => Area::AREA_ADMINHTML,
100+
'pathReportOnly' => 'csp/mode/admin/report_only',
101+
'pathReportUri' => 'csp/mode/admin/report_uri'
102+
],
103+
[
104+
'area' => Area::AREA_FRONTEND,
105+
'pathReportOnly' => 'csp/mode/storefront/report_only',
106+
'pathReportUri' => 'csp/mode/storefront/report_uri'
107+
]
108+
];
109+
}
110+
111+
/**
112+
* Test case with an inappropriate Area code.
113+
*/
114+
public function testGetConfiguredWithWrongArea()
115+
{
116+
$this->stateMock->expects($this->once())
117+
->method('getAreaCode')
118+
->willReturn(self::STUB_AREA_CODE_OTHER);
119+
120+
$this->configMock->expects($this->never())->method('isSetFlag');
121+
$this->configMock->expects($this->never())->method('getValue');
122+
$this->expectException(\RuntimeException::class);
123+
$this->expectExceptionMessage('CSP can only be configured for storefront or admin area');
124+
125+
$this->model->getConfigured();
126+
}
127+
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
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\Csp\Test\Unit\Observer;
10+
11+
use Magento\Csp\Api\CspRendererInterface;
12+
use Magento\Csp\Observer\Render;
13+
use Magento\Framework\App\Response\Http as ResponseHttp;
14+
use Magento\Framework\Event;
15+
use Magento\Framework\Event\Observer;
16+
use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
17+
use PHPUnit\Framework\MockObject\MockObject;
18+
use PHPUnit\Framework\TestCase;
19+
20+
/**
21+
* Unit Test for \Magento\Csp\Observer\Render
22+
*/
23+
class RenderTest extends TestCase
24+
{
25+
/**
26+
* Check if the render method is called
27+
*/
28+
public function testExecuteExpectsRenderCalled()
29+
{
30+
$eventMock = $this->createMock(Event::class);
31+
$responseMock = $this->createMock(ResponseHttp::class);
32+
$eventMock->expects($this->once())
33+
->method('getData')
34+
->with('response')
35+
->willReturn($responseMock);
36+
37+
/** @var MockObject|Observer $eventObserverMock */
38+
$eventObserverMock = $this->createMock(Observer::class);
39+
$eventObserverMock->expects($this->once())->method('getEvent')->willReturn($eventMock);
40+
41+
$cspRendererMock = $this->createMock(CspRendererInterface::class);
42+
$cspRendererMock->expects($this->once())->method('render');
43+
44+
$objectManagerHelper = new ObjectManager($this);
45+
/** @var MockObject|Render $renderObserver */
46+
$renderObserver = $objectManagerHelper->getObject(
47+
Render::class,
48+
['cspRenderer' => $cspRendererMock]
49+
);
50+
$renderObserver->execute($eventObserverMock);
51+
}
52+
}

0 commit comments

Comments
 (0)