From c34dcfe63918c912a49b48170b5809a4d1410f32 Mon Sep 17 00:00:00 2001 From: Thor Brink Date: Fri, 17 Jan 2025 06:30:46 +0000 Subject: [PATCH] refactor: move user group redirect login getter to user helper --- .../RedirectUserToGroupUrlIfIsPreferred.php | 16 +++----- .../User/Contracts/GetRedirectToGroupUrl.php | 17 ++++++++ library/Helper/User/User.php | 39 +++++++++++++++++-- .../RedirectToUserGroupUrlAfterSsoLogin.php | 13 ++++--- ...directToUserGroupUrlAfterSsoLogin.test.php | 13 ++++--- 5 files changed, 71 insertions(+), 27 deletions(-) create mode 100644 library/Helper/User/Contracts/GetRedirectToGroupUrl.php diff --git a/library/Admin/Login/RedirectUserToGroupUrlIfIsPreferred.php b/library/Admin/Login/RedirectUserToGroupUrlIfIsPreferred.php index b9581ba2e..592ab7e72 100644 --- a/library/Admin/Login/RedirectUserToGroupUrlIfIsPreferred.php +++ b/library/Admin/Login/RedirectUserToGroupUrlIfIsPreferred.php @@ -44,18 +44,12 @@ public function redirectToGroupUrl($redirectTo, $request, $userInHook) return $redirectTo; } - $user = $this->userHelper->getUser($userInHook); - if ($user != null) { - $perfersGroupUrl = $this->userHelper->getUserPrefersGroupUrl($user); - $groupUrl = $this->userHelper->getUserGroupUrl(null, $user); - - if ($perfersGroupUrl && $groupUrl) { - return $this->wpService->addQueryArg([ - 'loggedin' => 'true', - 'prefersgroup' => 'true' - ], $groupUrl); - } + $userGroupRedirectUrl = $this->userHelper->getRedirectToGroupUrl($userInHook); + + if ($userGroupRedirectUrl != null) { + return $userGroupRedirectUrl; } + return $redirectTo; } } diff --git a/library/Helper/User/Contracts/GetRedirectToGroupUrl.php b/library/Helper/User/Contracts/GetRedirectToGroupUrl.php new file mode 100644 index 000000000..a2da0f7c4 --- /dev/null +++ b/library/Helper/User/Contracts/GetRedirectToGroupUrl.php @@ -0,0 +1,17 @@ +getUser($user); + + if (!$user) { + return null; + } + + $perfersGroupUrl = $this->getUserPrefersGroupUrl($user); + $groupUrl = $this->getUserGroupUrl(null, $user); + + if ($perfersGroupUrl && $groupUrl) { + return $this->wpService->addQueryArg([ + 'loggedin' => 'true', + 'prefersgroup' => 'true' + ], $groupUrl); + } + + return null; + } } diff --git a/library/UserGroup/RedirectToUserGroupUrlAfterSsoLogin.php b/library/UserGroup/RedirectToUserGroupUrlAfterSsoLogin.php index f007e10eb..bf853039a 100644 --- a/library/UserGroup/RedirectToUserGroupUrlAfterSsoLogin.php +++ b/library/UserGroup/RedirectToUserGroupUrlAfterSsoLogin.php @@ -5,7 +5,7 @@ use Municipio\Helper\User\Contracts\GetUserGroupUrl; use Municipio\HooksRegistrar\Hookable; use WpService\Contracts\AddFilter; -use Municipio\Admin\Login\RedirectUserToGroupUrlIfIsPreferred; +use Municipio\Helper\User\Contracts\GetRedirectToGroupUrl; /** * Redirect to user group URL after SSO login. @@ -15,7 +15,7 @@ class RedirectToUserGroupUrlAfterSsoLogin implements Hookable /** * Constructor. */ - public function __construct(private GetUserGroupUrl $userHelper, private AddFilter $wpService) + public function __construct(private GetUserGroupUrl&GetRedirectToGroupUrl $userHelper, private AddFilter $wpService) { } @@ -35,10 +35,11 @@ public function addHooks(): void */ public function getRedirectUrl(string $redirectTo, int|null $userId = null): string { - $redirectTo = (new RedirectUserToGroupUrlIfIsPreferred( - $this->wpService, - $this->userHelper - ))->redirectToGroupUrl($redirectTo, '', $userId); + $userGroupRedirectUrl = $this->userHelper->getRedirectToGroupUrl($userId); + + if ($userGroupRedirectUrl != null) { + return $userGroupRedirectUrl; + } return $redirectTo; } diff --git a/library/UserGroup/RedirectToUserGroupUrlAfterSsoLogin.test.php b/library/UserGroup/RedirectToUserGroupUrlAfterSsoLogin.test.php index 24d315f26..470155ba1 100644 --- a/library/UserGroup/RedirectToUserGroupUrlAfterSsoLogin.test.php +++ b/library/UserGroup/RedirectToUserGroupUrlAfterSsoLogin.test.php @@ -3,6 +3,7 @@ namespace Municipio\UserGroup; use Municipio\Helper\User\Contracts\GetUserGroupUrl; +use Municipio\Helper\User\User; use PHPUnit\Framework\TestCase; use WpService\Implementations\FakeWpService; @@ -13,7 +14,7 @@ class RedirectToUserGroupUrlAfterSsoLoginTest extends TestCase */ public function testCanBeInstantiated() { - $userHelper = $this->createMock(GetUserGroupUrl::class); + $userHelper = $this->createMock(User::class); $sut = new RedirectToUserGroupUrlAfterSsoLogin($userHelper, new FakeWpService()); $this->assertInstanceOf(RedirectToUserGroupUrlAfterSsoLogin::class, $sut); } @@ -23,7 +24,7 @@ public function testCanBeInstantiated() */ public function testAddHooksAddsFilterToRedirectUrl() { - $userHelper = $this->createMock(GetUserGroupUrl::class); + $userHelper = $this->createMock(User::class); $wpService = new FakeWpService(['addFilter' => true]); $sut = new RedirectToUserGroupUrlAfterSsoLogin($userHelper, $wpService); @@ -40,8 +41,8 @@ public function testAddHooksAddsFilterToRedirectUrl() */ public function testGetRedirectUrlReturnsUrlFromGetUserGroupUrl() { - $userHelper = $this->createMock(GetUserGroupUrl::class); - $userHelper->method('getUserGroupUrl')->willReturn('http://example.com'); + $userHelper = $this->createMock(User::class); + $userHelper->method('getRedirectToGroupUrl')->willReturn('http://example.com'); $sut = new RedirectToUserGroupUrlAfterSsoLogin($userHelper, new FakeWpService()); $this->assertEquals('http://example.com', $sut->getRedirectUrl('http://example.org')); } @@ -51,8 +52,8 @@ public function testGetRedirectUrlReturnsUrlFromGetUserGroupUrl() */ public function testGetRedirectUrlReturnsOriginalUrlIfGetUserGroupUrlReturnsNull() { - $userHelper = $this->createMock(GetUserGroupUrl::class); - $userHelper->method('getUserGroupUrl')->willReturn(null); + $userHelper = $this->createMock(User::class); + $userHelper->method('getRedirectToGroupUrl')->willReturn(null); $sut = new RedirectToUserGroupUrlAfterSsoLogin($userHelper, new FakeWpService()); $this->assertEquals('http://example.org', $sut->getRedirectUrl('http://example.org')); }