From 4f762bc7566153738d2ab67e77207ee6dc8fdc46 Mon Sep 17 00:00:00 2001 From: Tatyana Koleva Date: Wed, 9 Oct 2024 16:14:49 +0300 Subject: [PATCH] OXDEV-8407 Add test for multiple users password change --- .../PasswordChangeSubscriberTest.php | 51 +++++++++++++++---- 1 file changed, 41 insertions(+), 10 deletions(-) diff --git a/tests/Unit/Event/Subscriber/PasswordChangeSubscriberTest.php b/tests/Unit/Event/Subscriber/PasswordChangeSubscriberTest.php index 30ab6c04..9ea7114b 100644 --- a/tests/Unit/Event/Subscriber/PasswordChangeSubscriberTest.php +++ b/tests/Unit/Event/Subscriber/PasswordChangeSubscriberTest.php @@ -54,10 +54,6 @@ public function testSubscriberWithUserModelPwdChange(): void $userModelService = $this->createPartialMock(UserModelService::class, ['isPasswordChanged']); $userModelService->method('isPasswordChanged')->with($userId = uniqid())->willReturn(true); - $userModelStub = $this->createStub(User::class); - $userModelStub->method('getId') - ->willReturn($userId); - $refreshTokenRepository = $this->createMock(RefreshTokenRepositoryInterface::class); $refreshTokenRepository->expects($this->once()) ->method('invalidateUserTokens'); @@ -66,6 +62,7 @@ public function testSubscriberWithUserModelPwdChange(): void $tokenInfrastructure->expects($this->once()) ->method('invalidateUserTokens'); + $userModelStub = $this->getUserModel($userId); $beforeUpdateStub = $this->getBeforeUpdateEvent($userModelStub); $afterUpdateStub = $this->getAfterUpdateEvent($userModelStub); @@ -74,6 +71,34 @@ public function testSubscriberWithUserModelPwdChange(): void $sut->handleAfterUpdate($afterUpdateStub); } + public function testSubscriberWithMultipleUserModelsPwdChange(): void + { + $userModelService = $this->createPartialMock(UserModelService::class, ['isPasswordChanged']); + $userModelService->method('isPasswordChanged')->willReturn(true); + + $userModel1 = $this->getUserModel(uniqid()); + $userModel2 = $this->getUserModel(uniqid()); + + $refreshTokenRepository = $this->createMock(RefreshTokenRepositoryInterface::class); + $refreshTokenRepository->expects($this->exactly(2)) + ->method('invalidateUserTokens'); + + $tokenInfrastructure = $this->createMock(Token::class); + $tokenInfrastructure->expects($this->exactly(2)) + ->method('invalidateUserTokens'); + + $beforeUpdateStub1 = $this->getBeforeUpdateEvent($userModel1); + $beforeUpdateStub2 = $this->getBeforeUpdateEvent($userModel2); + $afterUpdateStub1 = $this->getAfterUpdateEvent($userModel1); + $afterUpdateStub2 = $this->getAfterUpdateEvent($userModel2); + + $sut = $this->getSut($userModelService, $refreshTokenRepository, $tokenInfrastructure); + $sut->handleBeforeUpdate($beforeUpdateStub1); + $sut->handleBeforeUpdate($beforeUpdateStub2); + $sut->handleAfterUpdate($afterUpdateStub1); + $sut->handleAfterUpdate($afterUpdateStub2); + } + public function testSubscriberWithNoUserModel(): void { $userModelService = $this->createPartialMock(UserModelService::class, ['isPasswordChanged']); @@ -101,10 +126,6 @@ public function testSubscriberWithUserModelNoPwdChanged(): void $userModelService = $this->createPartialMock(UserModelService::class, ['isPasswordChanged']); $userModelService->method('isPasswordChanged')->with($userId = uniqid())->willReturn(false); - $userModelStub = $this->createStub(User::class); - $userModelStub->method('getId') - ->willReturn($userId); - $refreshTokenRepository = $this->createMock(RefreshTokenRepositoryInterface::class); $refreshTokenRepository->expects($this->never()) ->method('invalidateUserTokens'); @@ -113,6 +134,7 @@ public function testSubscriberWithUserModelNoPwdChanged(): void $tokenInfrastructure->expects($this->never()) ->method('invalidateUserTokens'); + $userModelStub = $this->getUserModel($userId); $beforeUpdateStub = $this->getBeforeUpdateEvent($userModelStub); $afterUpdateStub = $this->getAfterUpdateEvent($userModelStub); @@ -121,7 +143,7 @@ public function testSubscriberWithUserModelNoPwdChanged(): void $sut->handleAfterUpdate($afterUpdateStub); } - protected function getBeforeUpdateEvent(BaseModel $model) + protected function getBeforeUpdateEvent(BaseModel $model): BeforeModelUpdateEvent { $beforeUpdateStub = $this->createStub(BeforeModelUpdateEvent::class); $beforeUpdateStub->method('getModel') @@ -130,7 +152,7 @@ protected function getBeforeUpdateEvent(BaseModel $model) return $beforeUpdateStub; } - protected function getAfterUpdateEvent(BaseModel $model) + protected function getAfterUpdateEvent(BaseModel $model): AfterModelUpdateEvent { $afterUpdateStub = $this->createStub(AfterModelUpdateEvent::class); $afterUpdateStub->method('getModel') @@ -139,6 +161,15 @@ protected function getAfterUpdateEvent(BaseModel $model) return $afterUpdateStub; } + protected function getUserModel(string $userId): User + { + $userModelStub = $this->createStub(User::class); + $userModelStub->method('getId') + ->willReturn($userId); + + return $userModelStub; + } + protected function getSut( UserModelService $userModelService = null, RefreshTokenRepositoryInterface $refreshTokenRepository = null,