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
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Robots\Test\Unit\Controller;
class RouterTest extends \PHPUnit\Framework\TestCase
{
/**
* @var \Magento\Framework\App\ActionFactory|\PHPUnit_Framework_MockObject_MockObject
*/
private $actionFactoryMock;
/**
* @var \Magento\Framework\App\Router\ActionList|\PHPUnit_Framework_MockObject_MockObject
*/
private $actionListMock;
/**
* @var \Magento\Framework\App\Route\ConfigInterface|\PHPUnit_Framework_MockObject_MockObject
*/
private $routeConfigMock;
/**
* @var \Magento\Robots\Controller\Router
*/
private $router;
protected function setUp()
{
$this->actionFactoryMock = $this->getMockBuilder(\Magento\Framework\App\ActionFactory::class)
->disableOriginalConstructor()
->setMethods(['create'])
->getMock();
$this->actionListMock = $this->getMockBuilder(\Magento\Framework\App\Router\ActionList::class)
->disableOriginalConstructor()
->getMock();
$this->routeConfigMock = $this->getMockBuilder(\Magento\Framework\App\Route\ConfigInterface::class)
->getMockForAbstractClass();
$this->router = new \Magento\Robots\Controller\Router(
$this->actionFactoryMock,
$this->actionListMock,
$this->routeConfigMock
);
}
/**
* Check case when robots.txt file is not requested
*/
public function testMatchNoRobotsRequested()
{
$identifier = 'test';
$requestMock = $this->getMockBuilder(\Magento\Framework\App\RequestInterface::class)
->setMethods(['getPathInfo'])
->getMockForAbstractClass();
$requestMock->expects($this->once())
->method('getPathInfo')
->willReturn($identifier);
$this->assertNull($this->router->match($requestMock));
}
/**
* Check case, when no existed modules in Magento to process 'robots' route
*/
public function testMatchNoRobotsModules()
{
$identifier = 'robots.txt';
$requestMock = $this->getMockBuilder(\Magento\Framework\App\RequestInterface::class)
->setMethods(['getPathInfo'])
->getMockForAbstractClass();
$requestMock->expects($this->once())
->method('getPathInfo')
->willReturn($identifier);
$this->routeConfigMock->expects($this->once())
->method('getModulesByFrontName')
->with('robots')
->willReturn([]);
$this->assertNull($this->router->match($requestMock));
}
/**
* Check the basic flow of match() method
*/
public function testMatch()
{
$identifier = 'robots.txt';
$moduleName = 'Magento_Robots';
$actionClassName = \Magento\Robots\Controller\Index\Index::class;
$requestMock = $this->getMockBuilder(\Magento\Framework\App\RequestInterface::class)
->setMethods(['getPathInfo'])
->getMockForAbstractClass();
$requestMock->expects($this->once())
->method('getPathInfo')
->willReturn($identifier);
$this->routeConfigMock->expects($this->once())
->method('getModulesByFrontName')
->with('robots')
->willReturn([$moduleName]);
$this->actionListMock->expects($this->once())
->method('get')
->with($moduleName, null, 'index', 'index')
->willReturn($actionClassName);
$actionClassMock = $this->getMockBuilder(\Magento\Robots\Controller\Index\Index::class)
->disableOriginalConstructor()
->getMock();
$this->actionFactoryMock->expects($this->once())
->method('create')
->with($actionClassName)
->willReturn($actionClassMock);
$this->assertInstanceOf($actionClassName, $this->router->match($requestMock));
}
}