From 0803d719eee3e84c64b17af89bc3d071fa745624 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jorge=20Gonz=C3=A1lez?= Date: Thu, 7 May 2026 12:06:57 +0100 Subject: [PATCH 1/2] fix: remove redundant null-coalescing on always-set array offsets in SocialBehavior PHPStan flags $userData['first_name'] ?? null and $userData['username'] ?? null as always-existing keys that cannot be null at those code paths. --- src/Model/Behavior/SocialBehavior.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Model/Behavior/SocialBehavior.php b/src/Model/Behavior/SocialBehavior.php index 09ee6373..7ad6258a 100644 --- a/src/Model/Behavior/SocialBehavior.php +++ b/src/Model/Behavior/SocialBehavior.php @@ -205,14 +205,14 @@ protected function _populateUser($data, $existingUser, $useEmail, $validateEmail $email = explode('@', $dataEmail); $userData['username'] = Hash::get($email, 0); } else { - $firstName = $userData['first_name'] ?? null; + $firstName = $userData['first_name']; $lastName = $userData['last_name']; $userData['username'] = strtolower($firstName . $lastName); $userData['username'] = preg_replace('/[^A-Za-z0-9]/i', '', $userData['username']); } } - $userData['username'] = $this->generateUniqueUsername($userData['username'] ?? null); + $userData['username'] = $this->generateUniqueUsername($userData['username']); if ($useEmail) { $userData['email'] = $data['email'] ?? null; if (empty($dataValidated)) { From 5035d65cb7305559c924ee88080ba6bdf9d02062 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jorge=20Gonz=C3=A1lez?= Date: Thu, 7 May 2026 12:13:43 +0100 Subject: [PATCH 2/2] fix: replace ReCaptcha\Response mock with real instance for PHP 8.4+ compatibility ReCaptcha\Response is declared readonly in newer versions, which prevents PHPUnit from doubling it. Use the public constructor directly instead. --- .../Controller/Traits/ReCaptchaTraitTest.php | 25 +++---------------- 1 file changed, 4 insertions(+), 21 deletions(-) diff --git a/tests/TestCase/Controller/Traits/ReCaptchaTraitTest.php b/tests/TestCase/Controller/Traits/ReCaptchaTraitTest.php index c8bc12fc..d93eeb71 100644 --- a/tests/TestCase/Controller/Traits/ReCaptchaTraitTest.php +++ b/tests/TestCase/Controller/Traits/ReCaptchaTraitTest.php @@ -15,6 +15,7 @@ use Cake\Core\Configure; use Cake\TestSuite\TestCase; +use ReCaptcha\Response; use ReflectionMethod; class ReCaptchaTraitTest extends TestCase @@ -58,13 +59,7 @@ public function testValidateValidReCaptcha() ->onlyMethods(['verify']) ->disableOriginalConstructor() ->getMock(); - $Response = $this->getMockBuilder('ReCaptcha\Response') - ->onlyMethods(['isSuccess']) - ->disableOriginalConstructor() - ->getMock(); - $Response->expects($this->once()) - ->method('isSuccess') - ->will($this->returnValue(true)); + $Response = new Response(true); $ReCaptcha->expects($this->once()) ->method('verify') ->with('value') @@ -87,13 +82,7 @@ public function testValidateInvalidReCaptcha() ->onlyMethods(['verify']) ->disableOriginalConstructor() ->getMock(); - $Response = $this->getMockBuilder('ReCaptcha\Response') - ->onlyMethods(['isSuccess']) - ->disableOriginalConstructor() - ->getMock(); - $Response->expects($this->once()) - ->method('isSuccess') - ->will($this->returnValue(false)); + $Response = new Response(false); $ReCaptcha->expects($this->once()) ->method('verify') ->with('invalid') @@ -130,13 +119,7 @@ public function testValidateReCaptchaFalse() ->onlyMethods(['verify']) ->disableOriginalConstructor() ->getMock(); - $Response = $this->getMockBuilder('ReCaptcha\Response') - ->onlyMethods(['isSuccess']) - ->disableOriginalConstructor() - ->getMock(); - $Response->expects($this->once()) - ->method('isSuccess') - ->will($this->returnValue(false)); + $Response = new Response(false); $ReCaptcha->expects($this->once()) ->method('verify') ->with('value')