Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
LogoutTest.php
Go to the documentation of this file.
1 <?php
7 
15 
16 class LogoutTest extends \PHPUnit\Framework\TestCase
17 {
19  protected $controller;
20 
22  protected $contextMock;
23 
25  protected $sessionMock;
26 
29 
31  protected $cookieManager;
32 
34  protected $cookieMetadata;
35 
37  protected $resultRedirect;
38 
40  protected $redirectFactory;
41 
43  protected $redirect;
44 
45  protected function setUp()
46  {
47  $this->contextMock = $this->getMockBuilder(\Magento\Framework\App\Action\Context::class)
48  ->disableOriginalConstructor()
49  ->getMock();
50  $this->sessionMock = $this->getMockBuilder(\Magento\Customer\Model\Session::class)
51  ->disableOriginalConstructor()
52  ->setMethods(['getId', 'logout', 'setBeforeAuthUrl', 'setLastCustomerId'])
53  ->getMock();
54 
55  $this->cookieMetadataFactory = $this->getMockBuilder(CookieMetadataFactory::class)
56  ->disableOriginalConstructor()
57  ->getMock();
58  $this->cookieManager = $this->getMockBuilder(PhpCookieManager::class)
59  ->disableOriginalConstructor()
60  ->getMock();
61  $this->cookieMetadata = $this->getMockBuilder(CookieMetadata::class)
62  ->disableOriginalConstructor()
63  ->getMock();
64  $this->redirectFactory = $this->getMockBuilder(RedirectFactory::class)
65  ->disableOriginalConstructor()
66  ->getMock();
67  $this->resultRedirect = $this->getMockBuilder(Redirect::class)
68  ->disableOriginalConstructor()
69  ->getMock();
70  $this->contextMock->expects($this->once())
71  ->method('getResultRedirectFactory')
72  ->willReturn($this->redirectFactory);
73 
74  $this->redirect = $this->getMockBuilder(RedirectInterface::class)
75  ->getMockForAbstractClass();
76  $this->contextMock->expects($this->once())
77  ->method('getRedirect')
78  ->willReturn($this->redirect);
79 
80  $this->controller = new Logout($this->contextMock, $this->sessionMock);
81 
82  $refClass = new \ReflectionClass(Logout::class);
83  $cookieMetadataManagerProperty = $refClass->getProperty('cookieMetadataManager');
84  $cookieMetadataManagerProperty->setAccessible(true);
85  $cookieMetadataManagerProperty->setValue($this->controller, $this->cookieManager);
86 
87  $cookieMetadataFactoryProperty = $refClass->getProperty('cookieMetadataFactory');
88  $cookieMetadataFactoryProperty->setAccessible(true);
89  $cookieMetadataFactoryProperty->setValue($this->controller, $this->cookieMetadataFactory);
90  }
91 
92  public function testExecute()
93  {
94  $customerId = 1;
95  $refererUrl = 'http://referer.url';
96 
97  $this->sessionMock->expects($this->once())
98  ->method('getId')
99  ->willReturn($customerId);
100  $this->sessionMock->expects($this->once())
101  ->method('logout')
102  ->willReturnSelf();
103  $this->redirect->expects($this->once())
104  ->method('getRefererUrl')
105  ->willReturn($refererUrl);
106  $this->sessionMock->expects($this->once())
107  ->method('setBeforeAuthUrl')
108  ->with($refererUrl)
109  ->willReturnSelf();
110  $this->sessionMock->expects($this->once())
111  ->method('setLastCustomerId')
112  ->with($customerId);
113 
114  $this->cookieManager->expects($this->once())
115  ->method('getCookie')
116  ->with('mage-cache-sessid')
117  ->willReturn(true);
118  $this->cookieMetadataFactory->expects($this->once())
119  ->method('createCookieMetadata')
120  ->willReturn($this->cookieMetadata);
121  $this->cookieMetadata->expects($this->once())
122  ->method('setPath')
123  ->with('/');
124  $this->cookieManager->expects($this->once())
125  ->method('deleteCookie')
126  ->with('mage-cache-sessid', $this->cookieMetadata);
127  $this->redirectFactory->expects($this->once())
128  ->method('create')
129  ->willReturn($this->resultRedirect);
130  $this->resultRedirect->expects($this->once())
131  ->method('setPath')
132  ->with('*/*/logoutSuccess');
133  $this->assertSame($this->resultRedirect, $this->controller->execute());
134  }
135 }