From c3c46f434f576aec8a18fde3551a62c51c63d6cb Mon Sep 17 00:00:00 2001
From: Michael Hitzler <michael.hitzler@paravista.de>
Date: Tue, 10 Oct 2023 17:12:34 +0200
Subject: [PATCH] [BUGFIX] Use telephone as fallback for link text

Resolves: #102139
Releases: main, 12.4
Change-Id: I9eb3b759de4af5c322aedc96df169aa7c603add6
Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/81405
Tested-by: core-ci <typo3@b13.com>
Reviewed-by: Oliver Bartsch <bo@cedev.de>
Tested-by: Garvin Hicking <gh@faktor-e.de>
Reviewed-by: Garvin Hicking <gh@faktor-e.de>
Tested-by: Oliver Bartsch <bo@cedev.de>
---
 .../Classes/Typolink/TelephoneLinkBuilder.php |  1 +
 .../Typolink/TelephoneLinkBuilderTest.php     | 74 +++++++++++++++++++
 2 files changed, 75 insertions(+)
 create mode 100644 typo3/sysext/frontend/Tests/Unit/Typolink/TelephoneLinkBuilderTest.php

diff --git a/typo3/sysext/frontend/Classes/Typolink/TelephoneLinkBuilder.php b/typo3/sysext/frontend/Classes/Typolink/TelephoneLinkBuilder.php
index 6054d98940ce..aa91307309e1 100644
--- a/typo3/sysext/frontend/Classes/Typolink/TelephoneLinkBuilder.php
+++ b/typo3/sysext/frontend/Classes/Typolink/TelephoneLinkBuilder.php
@@ -24,6 +24,7 @@ class TelephoneLinkBuilder extends AbstractTypolinkBuilder
 {
     public function build(array &$linkDetails, string $linkText, string $target, array $conf): LinkResultInterface
     {
+        $linkText = $linkText ?: $linkDetails['telephone'] ?? '';
         return (new LinkResult($linkDetails['type'], $linkDetails['typoLinkParameter']))->withLinkConfiguration($conf)->withLinkText($linkText);
     }
 }
diff --git a/typo3/sysext/frontend/Tests/Unit/Typolink/TelephoneLinkBuilderTest.php b/typo3/sysext/frontend/Tests/Unit/Typolink/TelephoneLinkBuilderTest.php
new file mode 100644
index 000000000000..7f9b8b30102a
--- /dev/null
+++ b/typo3/sysext/frontend/Tests/Unit/Typolink/TelephoneLinkBuilderTest.php
@@ -0,0 +1,74 @@
+<?php
+
+declare(strict_types=1);
+
+/*
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+
+namespace TYPO3\CMS\Frontend\Tests\Unit\Typolink;
+
+use PHPUnit\Framework\Attributes\Test;
+use TYPO3\CMS\Frontend\Typolink\TelephoneLinkBuilder;
+use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
+
+final class TelephoneLinkBuilderTest extends UnitTestCase
+{
+    #[Test]
+    public function noLinkTextForMissingDetailAndNoLinkTextProvided(): void
+    {
+        $linkDetails = [
+            'type' => 'telephone',
+            'typoLinkParameter' => 'tel:+49 221 4710 999',
+        ];
+        $subject = $this->getAccessibleMock(TelephoneLinkBuilder::class, null, [], '', false);
+        $actualResult = $subject->build($linkDetails, '', '', []);
+        self::assertSame('', $actualResult->getLinkText());
+    }
+
+    #[Test]
+    public function respectsProvidedLinkText(): void
+    {
+        $linkDetails = [
+            'type' => 'telephone',
+            'typoLinkParameter' => 'tel:+49 221 4710 999',
+        ];
+        $subject = $this->getAccessibleMock(TelephoneLinkBuilder::class, null, [], '', false);
+        $actualResult = $subject->build($linkDetails, 'Phone number', '', []);
+        self::assertSame('Phone number', $actualResult->getLinkText());
+    }
+
+    #[Test]
+    public function fallsBackToPhoneNumberOnMissingLinkText(): void
+    {
+        $linkDetails = [
+            'type' => 'telephone',
+            'typoLinkParameter' => 'tel:+49 221 4710 999',
+            'telephone' => '+49 221 4710 999',
+        ];
+        $subject = $this->getAccessibleMock(TelephoneLinkBuilder::class, null, [], '', false);
+        $actualResult = $subject->build($linkDetails, '', '', []);
+        self::assertSame('+49 221 4710 999', $actualResult->getLinkText());
+    }
+
+    #[Test]
+    public function respectsProvidedLinkParameter(): void
+    {
+        $linkDetails = [
+            'type' => 'telephone',
+            'typoLinkParameter' => 'tel:+49 221 4710 999',
+        ];
+        $subject = $this->getAccessibleMock(TelephoneLinkBuilder::class, null, [], '', false);
+        $actualResult = $subject->build($linkDetails, '', '', []);
+        self::assertSame('tel:+49 221 4710 999', $actualResult->getUrl());
+    }
+}
-- 
GitLab