sessionMock = $this->createMock(\Magento\Persistent\Helper\Session::class); $this->customerSessionMock = $this->createMock(\Magento\Customer\Model\Session::class); $this->persistentHelperMock = $this->createMock(\Magento\Persistent\Helper\Data::class); $this->observerMock = $this->createPartialMock( \Magento\Framework\Event\Observer::class, ['getControllerAction','__wakeUp'] ); $this->quoteManagerMock = $this->createMock(\Magento\Persistent\Model\QuoteManager::class); $this->eventManagerMock = $this->createMock(\Magento\Framework\Event\ManagerInterface::class); $this->checkoutSessionMock = $this->createMock(\Magento\Checkout\Model\Session::class); $this->requestMock = $this->getMockBuilder(\Magento\Framework\App\RequestInterface::class) ->disableOriginalConstructor() ->setMethods(['getRequestUri', 'getServer']) ->getMockForAbstractClass(); $this->model = new \Magento\Persistent\Observer\CheckExpirePersistentQuoteObserver( $this->sessionMock, $this->persistentHelperMock, $this->quoteManagerMock, $this->eventManagerMock, $this->customerSessionMock, $this->checkoutSessionMock, $this->requestMock ); } public function testExecuteWhenCanNotApplyPersistentData() { $this->persistentHelperMock ->expects($this->once()) ->method('canProcess') ->with($this->observerMock) ->willReturn(false); $this->persistentHelperMock->expects($this->never())->method('isEnabled'); $this->model->execute($this->observerMock); } public function testExecuteWhenPersistentIsNotEnabled() { $this->persistentHelperMock ->expects($this->once()) ->method('canProcess') ->with($this->observerMock) ->willReturn(true); $this->persistentHelperMock->expects($this->once())->method('isEnabled')->willReturn(false); $this->eventManagerMock->expects($this->never())->method('dispatch'); $this->model->execute($this->observerMock); } /** * Test method \Magento\Persistent\Observer\CheckExpirePersistentQuoteObserver::execute when persistent is enabled. * * @param string $refererUri * @param string $requestUri * @param \PHPUnit\Framework\MockObject\Matcher\InvokedCount $expireCounter * @param \PHPUnit\Framework\MockObject\Matcher\InvokedCount $dispatchCounter * @param \PHPUnit\Framework\MockObject\Matcher\InvokedCount $setCustomerIdCounter * @return void * @dataProvider requestDataProvider */ public function testExecuteWhenPersistentIsEnabled( string $refererUri, string $requestUri, \PHPUnit\Framework\MockObject\Matcher\InvokedCount $expireCounter, \PHPUnit\Framework\MockObject\Matcher\InvokedCount $dispatchCounter, \PHPUnit\Framework\MockObject\Matcher\InvokedCount $setCustomerIdCounter ): void { $this->persistentHelperMock ->expects($this->once()) ->method('canProcess') ->with($this->observerMock) ->willReturn(true); $this->persistentHelperMock->expects($this->once())->method('isEnabled')->willReturn(true); $this->sessionMock->expects($this->once())->method('isPersistent')->willReturn(false); $this->customerSessionMock ->expects($this->atLeastOnce()) ->method('isLoggedIn') ->willReturn(false); $this->checkoutSessionMock ->expects($this->atLeastOnce()) ->method('getQuoteId') ->willReturn(10); $this->eventManagerMock->expects($dispatchCounter)->method('dispatch'); $this->quoteManagerMock->expects($expireCounter)->method('expire'); $this->customerSessionMock ->expects($setCustomerIdCounter) ->method('setCustomerId') ->with(null) ->willReturnSelf(); $this->requestMock->expects($this->atLeastOnce())->method('getRequestUri')->willReturn($refererUri); $this->requestMock ->expects($this->atLeastOnce()) ->method('getServer') ->with('HTTP_REFERER') ->willReturn($requestUri); $this->model->execute($this->observerMock); } /** * Request Data Provider * * @return array */ public function requestDataProvider() { return [ [ 'refererUri' => 'checkout', 'requestUri' => 'index', 'expireCounter' => $this->never(), 'dispatchCounter' => $this->never(), 'setCustomerIdCounter' => $this->never(), ], [ 'refererUri' => 'checkout', 'requestUri' => 'checkout', 'expireCounter' => $this->never(), 'dispatchCounter' => $this->never(), 'setCustomerIdCounter' => $this->never(), ], [ 'refererUri' => 'index', 'requestUri' => 'checkout', 'expireCounter' => $this->never(), 'dispatchCounter' => $this->never(), 'setCustomerIdCounter' => $this->never(), ], [ 'refererUri' => 'index', 'requestUri' => 'index', 'expireCounter' => $this->once(), 'dispatchCounter' => $this->once(), 'setCustomerIdCounter' => $this->once(), ], ]; } }