diff --git a/lib/Reference/CardReferenceProvider.php b/lib/Reference/CardReferenceProvider.php index 05b72edc8..f3dcac5cd 100644 --- a/lib/Reference/CardReferenceProvider.php +++ b/lib/Reference/CardReferenceProvider.php @@ -108,14 +108,14 @@ public function matchReference(string $referenceText): bool { $startIndex = $this->urlGenerator->getAbsoluteURL('/index.php/apps/' . Application::APP_ID); // link example: https://nextcloud.local/index.php/apps/deck/#/board/2/card/11 - $noIndexMatch = preg_match('/^' . preg_quote($start, '/') . '\/#\/board\/[0-9]+\/card\/[0-9]+$/', $referenceText) === 1; - $indexMatch = preg_match('/^' . preg_quote($startIndex, '/') . '\/#\/board\/[0-9]+\/card\/[0-9]+$/', $referenceText) === 1; + $noIndexMatchFull = preg_match('/^' . preg_quote($start, '/') . '\/#\/board\/[0-9]+\/card\/[0-9]+$/', $referenceText) === 1; + $indexMatchFull = preg_match('/^' . preg_quote($startIndex, '/') . '\/#\/board\/[0-9]+\/card\/[0-9]+$/', $referenceText) === 1; // link example: https://nextcloud.local/index.php/apps/deck/card/11 $noIndexMatch = preg_match('/^' . preg_quote($start, '/') . '\/card\/[0-9]+$/', $referenceText) === 1; $indexMatch = preg_match('/^' . preg_quote($startIndex, '/') . '\/card\/[0-9]+$/', $referenceText) === 1; - return $noIndexMatch || $indexMatch; + return $noIndexMatchFull || $indexMatchFull || $noIndexMatch || $indexMatch; } /** diff --git a/tests/unit/Reference/CardReferenceProviderTest.php b/tests/unit/Reference/CardReferenceProviderTest.php new file mode 100644 index 000000000..3824d98af --- /dev/null +++ b/tests/unit/Reference/CardReferenceProviderTest.php @@ -0,0 +1,66 @@ + + * + * @author Julius Härtl + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +namespace Reference; + +use OCA\Deck\Reference\CardReferenceProvider; +use OCA\Deck\Service\BoardService; +use OCA\Deck\Service\CardService; +use OCA\Deck\Service\StackService; +use OCP\IL10N; +use OCP\IURLGenerator; +use Test\TestCase; + +class CardReferenceProviderTest extends TestCase { + public function setUp() : void { + parent::setUp(); + + $this->cardService = $this->createMock(CardService::class); + $this->boardService = $this->createMock(BoardService::class); + $this->stackService = $this->createMock(StackService::class); + $this->urlGenerator = $this->createMock(IURLGenerator::class); + $this->l10n = $this->createMock(IL10N::class); + $this->userId = null; + + $this->provider = new CardReferenceProvider( + $this->cardService, + $this->boardService, + $this->stackService, + $this->urlGenerator, + $this->l10n, + $this->userId, + ); + } + + public function testUrl() { + $this->urlGenerator->expects($this->any()) + ->method('getAbsoluteURL') + ->willReturnCallback(function ($path) { + return 'https://localhost/' . ltrim($path, '/'); + }); + self::assertFalse($this->provider->matchReference('https://nextcloud.com')); + self::assertTrue($this->provider->matchReference('https://localhost/apps/deck/#/board/2/card/11')); + self::assertTrue($this->provider->matchReference('https://localhost/index.php/apps/deck/#/board/2/card/11')); + self::assertTrue($this->provider->matchReference('https://localhost/apps/deck/card/11')); + self::assertTrue($this->provider->matchReference('https://localhost/index.php/apps/deck/card/11')); + } +}