diff --git a/tests/src/Protocol/ActivityPub/ProcessorMock.php b/tests/src/Protocol/ActivityPub/ProcessorMock.php new file mode 100644 index 000000000..8d509bf9d --- /dev/null +++ b/tests/src/Protocol/ActivityPub/ProcessorMock.php @@ -0,0 +1,40 @@ +. + * + */ + +namespace Friendica\Test\src\Protocol\ActivityPub; + +use Friendica\Protocol\ActivityPub\Processor; + +/** + * Class ProcessorMock + * + * Exposes protected methods for test in the inherited class + * + * @method static string addMentionLinks(string $body, array $tags) + * @method static string normalizeMentionLinks(string $body) + */ +class ProcessorMock extends Processor +{ + public static function __callStatic($name, $arguments) + { + return self::$name(...$arguments); + } +} diff --git a/tests/src/Protocol/ActivityPub/ProcessorTest.php b/tests/src/Protocol/ActivityPub/ProcessorTest.php new file mode 100644 index 000000000..894e90af2 --- /dev/null +++ b/tests/src/Protocol/ActivityPub/ProcessorTest.php @@ -0,0 +1,87 @@ + [ + 'expected' => '@[url=https://example.com]Example[/url]', + 'body' => '[url=https://example.com]@Example[/url]', + ], + 'one-link-#' => [ + 'expected' => '#[url=https://example.com]Example[/url]', + 'body' => '[url=https://example.com]#Example[/url]', + ], + 'one-link-!' => [ + 'expected' => '![url=https://example.com]Example[/url]', + 'body' => '[url=https://example.com]!Example[/url]', + ], + 'wrong-hash-char' => [ + 'expected' => '[url=https://example.com]%Example[/url]', + 'body' => '[url=https://example.com]%Example[/url]', + ], + 'multiple-links' => [ + 'expected' => '@[url=https://example.com]Example[/url] #[url=https://example.com]Example[/url] ![url=https://example.com]Example[/url]', + 'body' => '[url=https://example.com]@Example[/url] [url=https://example.com]#Example[/url] [url=https://example.com]!Example[/url]', + ], + 'already-correct-format' => [ + 'expected' => '@[url=https://example.com]Example[/url] #[url=https://example.com]Example[/url] ![url=https://example.com]Example[/url]', + 'body' => '@[url=https://example.com]Example[/url] #[url=https://example.com]Example[/url] ![url=https://example.com]Example[/url]', + ], + 'mixed-format' => [ + 'expected' => '@[url=https://example.com]Example[/url] #[url=https://example.com]Example[/url] ![url=https://example.com]Example[/url] @[url=https://example.com]Example[/url] #[url=https://example.com]Example[/url] ![url=https://example.com]Example[/url]', + 'body' => '[url=https://example.com]@Example[/url] [url=https://example.com]#Example[/url] [url=https://example.com]!Example[/url] @[url=https://example.com]Example[/url] #[url=https://example.com]Example[/url] ![url=https://example.com]Example[/url]', + ], + ]; + } + + /** + * @dataProvider dataNormalizeMentionLinks + * + * @param string $expected + * @param string $body + */ + public function testNormalizeMentionLinks(string $expected, string $body) + { + $this->assertEquals($expected, ProcessorMock::normalizeMentionLinks($body)); + } + + public function dataAddMentionLinks(): array + { + return [ + 'issue-10603' => [ + 'expected' => '@[url=https://social.wake.st/users/liaizon]liaizon@social.wake.st[/url] @[url=https://friendica.mrpetovan.com/profile/hypolite]hypolite@friendica.mrpetovan.com[/url] yes

', + 'body' => '@liaizon@social.wake.st @hypolite@friendica.mrpetovan.com yes

', + 'tags' => [ + [ + 'type' => 'Mention', + 'href' => 'https://social.wake.st/users/liaizon', + 'name' => '@liaizon@social.wake.st' + ], + [ + 'type' => 'Mention', + 'href' => 'https://friendica.mrpetovan.com/profile/hypolite', + 'name' => '@hypolite@friendica.mrpetovan.com' + ] + ], + ], + ]; + } + + /** + * @dataProvider dataAddMentionLinks + * + * @param string $expected + * @param string $body + * @param array $tags + */ + public function testAddMentionLinks(string $expected, string $body, array $tags) + { + $this->assertEquals($expected, ProcessorMock::addMentionLinks($body, $tags)); + } +}