[Addressing] Fix UTF-8 case-insensitive address comparison (#19085)

| Q               | A
|-----------------|-----
| Branch?         | 2.2
| Bug fix?        | yes
| New feature?    | no
| BC breaks?      | no
| Deprecations?   | no
| Related tickets | fixes issue #19078 
| License         | MIT
This commit is contained in:
Kamil Grygierzec 2026-06-23 09:04:07 +02:00 committed by GitHub
commit 6844018a46
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 30 additions and 1 deletions

View file

@ -26,7 +26,7 @@ final class AddressComparator implements AddressComparatorInterface
private function normalizeAddress(AddressInterface $address): array
{
return array_map(function ($value) {
return strtolower(trim((string) $value));
return mb_strtolower(trim((string) $value));
}, [
$address->getCity(),
$address->getCompany(),

View file

@ -107,4 +107,33 @@ final class AddressComparatorTest extends TestCase
$secondAddressMock->expects(self::once())->method('getProvinceName')->willReturn('Queensland');
self::assertTrue($this->addressComparator->equal($firstAddressMock, $secondAddressMock));
}
public function testIgnoresUnicodeCharacterCase(): void
{
/** @var AddressInterface&MockObject $firstAddressMock */
$firstAddressMock = $this->createMock(AddressInterface::class);
/** @var AddressInterface&MockObject $secondAddressMock */
$secondAddressMock = $this->createMock(AddressInterface::class);
$firstAddressMock->expects(self::once())->method('getCity')->willReturn('ŁÓDŹ');
$firstAddressMock->expects(self::once())->method('getStreet')->willReturn('Ryans Dr');
$firstAddressMock->expects(self::once())->method('getCompany')->willReturn('Burger');
$firstAddressMock->expects(self::once())->method('getPostcode')->willReturn('4350');
$firstAddressMock->expects(self::once())->method('getLastName')->willReturn('Jones');
$firstAddressMock->expects(self::once())->method('getFirstName')->willReturn('Mia');
$firstAddressMock->expects(self::once())->method('getPhoneNumber')->willReturn('999');
$firstAddressMock->expects(self::once())->method('getCountryCode')->willReturn('PL');
$firstAddressMock->expects(self::once())->method('getProvinceCode')->willReturn(null);
$firstAddressMock->expects(self::once())->method('getProvinceName')->willReturn('Łódzkie');
$secondAddressMock->expects(self::once())->method('getCity')->willReturn('łódź');
$secondAddressMock->expects(self::once())->method('getStreet')->willReturn('Ryans Dr');
$secondAddressMock->expects(self::once())->method('getCompany')->willReturn('Burger');
$secondAddressMock->expects(self::once())->method('getPostcode')->willReturn('4350');
$secondAddressMock->expects(self::once())->method('getLastName')->willReturn('Jones');
$secondAddressMock->expects(self::once())->method('getFirstName')->willReturn('Mia');
$secondAddressMock->expects(self::once())->method('getPhoneNumber')->willReturn('999');
$secondAddressMock->expects(self::once())->method('getCountryCode')->willReturn('PL');
$secondAddressMock->expects(self::once())->method('getProvinceCode')->willReturn(null);
$secondAddressMock->expects(self::once())->method('getProvinceName')->willReturn('Łódzkie');
self::assertTrue($this->addressComparator->equal($firstAddressMock, $secondAddressMock));
}
}