. * */ namespace Friendica\Test\src\Content\Text; use Friendica\App\BaseURL; use Friendica\Content\Text\BBCode; use Friendica\Core\L10n; use Friendica\Network\HTTPException\InternalServerErrorException; use Friendica\Test\MockedTest; use Friendica\Test\Util\AppMockTrait; use Friendica\Test\Util\VFSTrait; use Mockery; class BBCodeTest extends MockedTest { use VFSTrait; use AppMockTrait; protected function setUp(): void { parent::setUp(); $this->setUpVfsDir(); $this->mockApp($this->root); $this->app->setThemeInfoValue('videowidth', 425); $this->app->setThemeInfoValue('videoheight', 350); $this->configMock->shouldReceive('get') ->with('system', 'remove_multiplicated_lines') ->andReturn(false); $this->configMock->shouldReceive('get') ->with('system', 'no_oembed') ->andReturn(false); $this->configMock->shouldReceive('get') ->with('system', 'allowed_link_protocols') ->andReturn(null); $this->configMock->shouldReceive('get') ->with('system', 'url') ->andReturn('friendica.local'); $this->configMock->shouldReceive('get') ->with('system', 'no_smilies') ->andReturn(false); $this->configMock->shouldReceive('get') ->with('system', 'big_emojis') ->andReturn(false); $this->configMock->shouldReceive('get') ->with('system', 'allowed_oembed') ->andReturn(''); $l10nMock = Mockery::mock(L10n::class); $l10nMock->shouldReceive('t')->withAnyArgs()->andReturnUsing(function ($args) { return $args; }); $this->dice->shouldReceive('create') ->with(L10n::class) ->andReturn($l10nMock); $baseUrlMock = Mockery::mock(BaseURL::class); $baseUrlMock->shouldReceive('get')->withAnyArgs()->andReturn('friendica.local'); $this->dice->shouldReceive('create') ->with(BaseURL::class) ->andReturn($baseUrlMock); $baseUrlMock->shouldReceive('getHostname')->withNoArgs()->andReturn('friendica.local'); $baseUrlMock->shouldReceive('getUrlPath')->withNoArgs()->andReturn(''); $config = \HTMLPurifier_HTML5Config::createDefault(); $config->set('HTML.Doctype', 'HTML5'); $config->set('Attr.AllowedRel', [ 'noreferrer' => true, 'noopener' => true, ]); $config->set('Attr.AllowedFrameTargets', [ '_blank' => true, ]); $this->HTMLPurifier = new \HTMLPurifier($config); } public function dataLinks() { return [ /** @see https://github.com/friendica/friendica/issues/2487 */ 'bug-2487-1' => [ 'data' => 'https://de.wikipedia.org/wiki/Juha_Sipilä', 'assertHTML' => true, ], 'bug-2487-2' => [ 'data' => 'https://de.wikipedia.org/wiki/Dnepr_(Motorradmarke)', 'assertHTML' => true, ], 'bug-2487-3' => [ 'data' => 'https://friendica.wäckerlin.ch/friendica', 'assertHTML' => true, ], 'bug-2487-4' => [ 'data' => 'https://mastodon.social/@morevnaproject', 'assertHTML' => true, ], /** @see https://github.com/friendica/friendica/issues/5795 */ 'bug-5795' => [ 'data' => 'https://social.nasqueron.org/@liw/100798039015010628', 'assertHTML' => true, ], /** @see https://github.com/friendica/friendica/issues/6095 */ 'bug-6095' => [ 'data' => 'https://en.wikipedia.org/wiki/Solid_(web_decentralization_project)', 'assertHTML' => true, ], 'no-protocol' => [ 'data' => 'example.com/path', 'assertHTML' => false ], 'wrong-protocol' => [ 'data' => 'ftp://example.com', 'assertHTML' => false ], 'wrong-domain-without-path' => [ 'data' => 'http://example', 'assertHTML' => false ], 'wrong-domain-with-path' => [ 'data' => 'http://example/path', 'assertHTML' => false ], 'bug-6857-domain-start' => [ 'data' => "http://\nexample.com", 'assertHTML' => false ], 'bug-6857-domain-end' => [ 'data' => "http://example\n.com", 'assertHTML' => false ], 'bug-6857-tld' => [ 'data' => "http://example.\ncom", 'assertHTML' => false ], 'bug-6857-end' => [ 'data' => "http://example.com\ntest", 'assertHTML' => false ], 'bug-6901' => [ 'data' => "http://example.com