objectManager = new ObjectManager($this); $this->userExpirationFactoryMock = $this->createMock(UserExpirationFactory::class); $this->userExpirationResourceMock = $this->createPartialMock( UserExpiration::class, ['load', 'save', 'delete'] ); $this->observer = $this->objectManager->getObject( AfterAdminUserSave::class, [ 'userExpirationFactory' => $this->userExpirationFactoryMock, 'userExpirationResource' => $this->userExpirationResourceMock, ] ); $this->eventObserverMock = $this->createPartialMock(Observer::class, ['getEvent']); $this->eventMock = $this->getMockBuilder(Event::class) ->addMethods(['getObject']) ->disableOriginalConstructor() ->getMock(); $this->userMock = $this->getMockBuilder(User::class) ->addMethods(['getExpiresAt']) ->onlyMethods(['getId', 'hasData']) ->disableOriginalConstructor() ->getMock(); $this->userExpirationMock = $this->createPartialMock( \Magento\Security\Model\UserExpiration::class, ['getId', 'getExpiresAt', 'setId', 'setExpiresAt'] ); } /** * @return void */ public function testSaveNewUserExpiration(): void { $userId = '123'; $this->eventObserverMock->expects(static::once())->method('getEvent')->willReturn($this->eventMock); $this->eventMock->expects(static::once())->method('getObject')->willReturn($this->userMock); $this->userMock->expects(static::exactly(3))->method('getId')->willReturn($userId); $this->userMock->expects(static::once())->method('getExpiresAt')->willReturn($this->getExpiresDateTime()); $this->userMock->expects(static::once()) ->method('hasData') ->with('expires_at') ->willReturn(true); $this->userExpirationFactoryMock->expects(static::once())->method('create') ->willReturn($this->userExpirationMock); $this->userExpirationResourceMock->expects(static::once())->method('load') ->willReturn($this->userExpirationMock); $this->userExpirationMock->expects(static::once())->method('getId')->willReturn(null); $this->userExpirationMock->expects(static::once())->method('setId')->willReturn($this->userExpirationMock); $this->userExpirationMock->expects(static::once())->method('setExpiresAt') ->willReturn($this->userExpirationMock); $this->userExpirationResourceMock->expects(static::once())->method('save') ->willReturn($this->userExpirationResourceMock); $this->observer->execute($this->eventObserverMock); } /** * @throws \Exception */ public function testClearUserExpiration(): void { $userId = '123'; $this->userExpirationMock->setId($userId); $this->eventObserverMock->expects(static::once())->method('getEvent')->willReturn($this->eventMock); $this->eventMock->expects(static::once())->method('getObject')->willReturn($this->userMock); $this->userMock->expects(static::exactly(2))->method('getId')->willReturn($userId); $this->userMock->expects(static::once())->method('getExpiresAt')->willReturn(null); $this->userMock->expects(static::once()) ->method('hasData') ->with('expires_at') ->willReturn(true); $this->userExpirationFactoryMock->expects(static::once())->method('create') ->willReturn($this->userExpirationMock); $this->userExpirationResourceMock->expects(static::once())->method('load') ->willReturn($this->userExpirationMock); $this->userExpirationMock->expects(static::once())->method('getId')->willReturn($userId); $this->userExpirationResourceMock->expects(static::once())->method('delete') ->willReturn($this->userExpirationResourceMock); $this->observer->execute($this->eventObserverMock); } /** * @return void */ public function testChangeUserExpiration(): void { $userId = '123'; $this->userExpirationMock->setId($userId); $this->eventObserverMock->expects(static::once())->method('getEvent')->willReturn($this->eventMock); $this->eventMock->expects(static::once())->method('getObject')->willReturn($this->userMock); $this->userMock->expects(static::exactly(2))->method('getId')->willReturn($userId); $this->userMock->expects(static::once())->method('getExpiresAt')->willReturn($this->getExpiresDateTime()); $this->userMock->expects(static::once()) ->method('hasData') ->with('expires_at') ->willReturn(true); $this->userExpirationFactoryMock->expects(static::once())->method('create') ->willReturn($this->userExpirationMock); $this->userExpirationResourceMock->expects(static::once())->method('load') ->willReturn($this->userExpirationMock); $this->userExpirationMock->expects(static::once())->method('getId')->willReturn($userId); $this->userExpirationMock->expects(static::once())->method('setExpiresAt') ->willReturn($this->userExpirationMock); $this->userExpirationResourceMock->expects(static::once())->method('save') ->willReturn($this->userExpirationResourceMock); $this->observer->execute($this->eventObserverMock); } /** * @return void */ public function testExecuteWithoutUserExpiration(): void { $userId = '123'; $this->userExpirationMock->setId($userId); $this->eventObserverMock->expects(static::once())->method('getEvent')->willReturn($this->eventMock); $this->eventMock->expects(static::once())->method('getObject')->willReturn($this->userMock); $this->userMock->expects(static::once())->method('getId')->willReturn($userId); $this->userMock->expects(static::once()) ->method('hasData') ->with('expires_at') ->willReturn(false); $this->userExpirationFactoryMock->expects(static::never())->method('create'); $this->userExpirationResourceMock->expects(static::never())->method('load'); $this->userExpirationMock->expects(static::never())->method('getId'); $this->userExpirationMock->expects(static::never())->method('setExpiresAt'); $this->userExpirationResourceMock->expects(static::never())->method('save'); $this->observer->execute($this->eventObserverMock); } /** * @return string * @throws \Exception */ private function getExpiresDateTime(): string { $testDate = new \DateTime(); $testDate->modify('+10 days'); return $testDate->format('Y-m-d H:i:s'); } }