diff --git a/database.sql b/database.sql index 12ad6eb2c..bdf928fbe 100644 --- a/database.sql +++ b/database.sql @@ -1,5 +1,5 @@ -- ------------------------------------------ --- Friendica 2021.12-dev (Siberian Iris) +-- Friendica 2021.12-rc (Siberian Iris) -- DB_UPDATE_VERSION 1445 -- ------------------------------------------ diff --git a/src/Content/Text/BBCode.php b/src/Content/Text/BBCode.php index ecaf34527..a1d65add5 100644 --- a/src/Content/Text/BBCode.php +++ b/src/Content/Text/BBCode.php @@ -2322,7 +2322,7 @@ class BBCode break; case '#': default: - return $match[1] . '[url=' . 'https://' . DI::baseUrl() . '/search?tag=' . $match[2] . ']' . $match[2] . '[/url]'; + return $match[1] . '[url=' . DI::baseUrl() . '/search?tag=' . $match[2] . ']' . $match[2] . '[/url]'; } }, $body); } diff --git a/src/Module/BaseApi.php b/src/Module/BaseApi.php index 5c94bc772..c67671954 100644 --- a/src/Module/BaseApi.php +++ b/src/Module/BaseApi.php @@ -67,6 +67,8 @@ class BaseApi extends BaseModule public function __construct(App $app, L10n $l10n, App\BaseURL $baseUrl, App\Arguments $args, LoggerInterface $logger, Profiler $profiler, ApiResponse $response, array $server, array $parameters = []) { parent::__construct($l10n, $baseUrl, $args, $logger, $profiler, $response, $server, $parameters); + + $this->app = $app; } protected function delete() diff --git a/tests/Util/AppDouble.php b/tests/Util/AppDouble.php new file mode 100644 index 000000000..dc9f635c3 --- /dev/null +++ b/tests/Util/AppDouble.php @@ -0,0 +1,31 @@ +isLoggedIn = $isLoggedIn; + } + + public function isLoggedIn() + { + return $this->isLoggedIn; + } +} diff --git a/tests/Util/AppMockTrait.php b/tests/Util/AppMockTrait.php deleted file mode 100644 index ed3a42b26..000000000 --- a/tests/Util/AppMockTrait.php +++ /dev/null @@ -1,161 +0,0 @@ -. - * - */ - -namespace Friendica\Test\Util; - -use Dice\Dice; -use Friendica\App; -use Friendica\Core\Config; -use Friendica\DI; -use Friendica\Network\HTTPException\InternalServerErrorException; -use Friendica\Render\FriendicaSmartyEngine; -use Friendica\Util\Profiler; -use Mockery\MockInterface; -use org\bovigo\vfs\vfsStreamDirectory; - -/** - * Trait to Mock the global App instance - */ -trait AppMockTrait -{ - /** - * @var MockInterface|App The mocked Friendica\App - */ - protected $app; - - /** - * @var MockInterface|Config\Capability\IManageConfigValues The mocked Config Cache - */ - protected $configMock; - - /** - * @var MockInterface|Profiler The mocked profiler - */ - protected $profilerMock; - - /** - * @var MockInterface|App\Mode The mocked App mode - */ - protected $mode; - - /** - * @var MockInterface|Dice The dependency injection library - */ - protected $dice; - - /** - * Mock the App - * - * @param vfsStreamDirectory $root The root directory - * @param bool $raw If true, no config mocking will be done - * - * @throws InternalServerErrorException - */ - public function mockApp(vfsStreamDirectory $root, $raw = false) - { - $this->dice = \Mockery::mock(Dice::class)->makePartial(); - $this->dice = $this->dice->addRules(include __DIR__ . '/../../static/dependencies.config.php'); - - $this->configMock = \Mockery::mock(Config\ValueObject\Cache::class); - $this->dice->shouldReceive('create') - ->with(Config\ValueObject\Cache::class) - ->andReturn($this->configMock); - $this->mode = \Mockery::mock(App\Mode::class); - $this->dice->shouldReceive('create') - ->with(App\Mode::class) - ->andReturn($this->mode); - $configModel= \Mockery::mock(Config\Repository\Config::class); - // Disable the adapter - $configModel->shouldReceive('isConnected')->andReturn(false); - - $config = new Config\Type\JitConfig($this->configMock, $configModel); - $this->dice->shouldReceive('create') - ->with(Config\Capability\IManageConfigValues::class) - ->andReturn($config); - - // Mocking App and most used functions - $this->app = \Mockery::mock(App::class); - $this->dice->shouldReceive('create') - ->with(App::class) - ->andReturn($this->app); - $this->app - ->shouldReceive('getBasePath') - ->andReturn($root->url()); - - $this->profilerMock = \Mockery::mock(Profiler::class); - $this->profilerMock->shouldReceive('startRecording'); - $this->profilerMock->shouldReceive('stopRecording'); - $this->profilerMock->shouldReceive('saveTimestamp'); - $this->dice->shouldReceive('create') - ->with(Profiler::class) - ->andReturn($this->profilerMock); - - $this->app - ->shouldReceive('getConfigCache') - ->andReturn($this->configMock); - $this->app - ->shouldReceive('getTemplateEngine') - ->andReturn(new FriendicaSmartyEngine('frio', [])); - $this->app - ->shouldReceive('getCurrentTheme') - ->andReturn('Smarty3'); - $this->app->shouldReceive('getThemeInfoValue') - ->with('videowidth') - ->andReturn(425); - $this->app->shouldReceive('getThemeInfoValue') - ->with('videoheight') - ->andReturn(350); - - DI::init($this->dice); - - if ($raw) { - return; - } - - $this->configMock - ->shouldReceive('has') - ->andReturn(true); - $this->configMock - ->shouldReceive('get') - ->with('database', 'hostname') - ->andReturn(getenv('MYSQL_HOST')); - $this->configMock - ->shouldReceive('get') - ->with('database', 'username') - ->andReturn(getenv('MYSQL_USERNAME')); - $this->configMock - ->shouldReceive('get') - ->with('database', 'password') - ->andReturn(getenv('MYSQL_PASSWORD')); - $this->configMock - ->shouldReceive('get') - ->with('database', 'database') - ->andReturn(getenv('MYSQL_DATABASE')); - $this->configMock - ->shouldReceive('get') - ->with('config', 'hostname') - ->andReturn('localhost'); - $this->configMock - ->shouldReceive('get') - ->with('system', 'theme') - ->andReturn('system_theme'); - } -} diff --git a/tests/src/Content/SmiliesTest.php b/tests/src/Content/SmiliesTest.php index 2e97b4d40..74d18912f 100644 --- a/tests/src/Content/SmiliesTest.php +++ b/tests/src/Content/SmiliesTest.php @@ -9,27 +9,17 @@ namespace Friendica\Test\src\Content; use Friendica\Content\Smilies; +use Friendica\DI; use Friendica\Network\HTTPException\InternalServerErrorException; -use Friendica\Test\MockedTest; -use Friendica\Test\Util\AppMockTrait; -use Friendica\Test\Util\VFSTrait; +use Friendica\Test\FixtureTest; -class SmiliesTest extends MockedTest +class SmiliesTest extends FixtureTest { - use VFSTrait; - use AppMockTrait; - protected function setUp(): void { parent::setUp(); - $this->setUpVfsDir(); - $this->mockApp($this->root); - $this->configMock->shouldReceive('get') - ->with('system', 'no_smilies') - ->andReturn(false); - $this->configMock->shouldReceive('get') - ->with(false, 'system', 'no_smilies') - ->andReturn(false); + + DI::config()->set('system', 'no_smilies', false); } public function dataLinks() diff --git a/tests/src/Content/Text/BBCodeTest.php b/tests/src/Content/Text/BBCodeTest.php index cb17758c7..97ea18cb0 100644 --- a/tests/src/Content/Text/BBCodeTest.php +++ b/tests/src/Content/Text/BBCodeTest.php @@ -21,61 +21,25 @@ namespace Friendica\Test\src\Content\Text; -use Friendica\App\BaseURL; use Friendica\Content\Text\BBCode; -use Friendica\Core\L10n; +use Friendica\DI; use Friendica\Network\HTTPException\InternalServerErrorException; -use Friendica\Test\MockedTest; -use Friendica\Test\Util\AppMockTrait; -use Friendica\Test\Util\VFSTrait; -use Mockery; +use Friendica\Test\FixtureTest; -class BBCodeTest extends MockedTest +class BBCodeTest extends FixtureTest { - use VFSTrait; - use AppMockTrait; - protected function setUp(): void { parent::setUp(); - $this->setUpVfsDir(); - $this->mockApp($this->root); - $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(''); + DI::config()->set('system', 'remove_multiplicated_lines', false); + DI::config()->set('system', 'no_oembed', false); + DI::config()->set('system', 'allowed_link_protocols', []); + DI::config()->set('system', 'url', 'friendica.local'); + DI::config()->set('system', 'no_smilies', false); + DI::config()->set('system', 'big_emojis', false); + DI::config()->set('system', 'allowed_oembed', ''); - $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(''); - $baseUrlMock->shouldReceive('__toString')->withNoArgs()->andReturn('friendica.local'); + DI::baseUrl()->save('friendica.local', DI::baseUrl()::SSL_POLICY_FULL, ''); $config = \HTMLPurifier_HTML5Config::createDefault(); $config->set('HTML.Doctype', 'HTML5'); diff --git a/tests/src/Content/Text/HTMLTest.php b/tests/src/Content/Text/HTMLTest.php index fb2b95740..8c2577954 100644 --- a/tests/src/Content/Text/HTMLTest.php +++ b/tests/src/Content/Text/HTMLTest.php @@ -24,22 +24,10 @@ namespace Friendica\Test\src\Content\Text; use Exception; use Friendica\Content\Text\HTML; use Friendica\Network\HTTPException\InternalServerErrorException; -use Friendica\Test\MockedTest; -use Friendica\Test\Util\AppMockTrait; -use Friendica\Test\Util\VFSTrait; +use Friendica\Test\FixtureTest; -class HTMLTest extends MockedTest +class HTMLTest extends FixtureTest { - use VFSTrait; - use AppMockTrait; - - protected function setUp(): void - { - parent::setUp(); - $this->setUpVfsDir(); - $this->mockApp($this->root); - } - public function dataHTML() { $inputFiles = glob(__DIR__ . '/../../../datasets/content/text/html/*.html'); diff --git a/tests/src/Content/Text/MarkdownTest.php b/tests/src/Content/Text/MarkdownTest.php index 5fae494d6..f718aa47c 100644 --- a/tests/src/Content/Text/MarkdownTest.php +++ b/tests/src/Content/Text/MarkdownTest.php @@ -23,22 +23,10 @@ namespace Friendica\Test\src\Content\Text; use Exception; use Friendica\Content\Text\Markdown; -use Friendica\Test\MockedTest; -use Friendica\Test\Util\AppMockTrait; -use Friendica\Test\Util\VFSTrait; +use Friendica\Test\FixtureTest; -class MarkdownTest extends MockedTest +class MarkdownTest extends FixtureTest { - use VFSTrait; - use AppMockTrait; - - protected function setUp(): void - { - parent::setUp(); - $this->setUpVfsDir(); - $this->mockApp($this->root); - } - public function dataMarkdown() { $inputFiles = glob(__DIR__ . '/../../../datasets/content/text/markdown/*.md'); diff --git a/tests/src/Module/Api/ApiTest.php b/tests/src/Module/Api/ApiTest.php index c530ace2e..98e9b2a03 100644 --- a/tests/src/Module/Api/ApiTest.php +++ b/tests/src/Module/Api/ApiTest.php @@ -21,12 +21,14 @@ namespace Friendica\Test\src\Module\Api; +use Friendica\App; use Friendica\Core\Addon; use Friendica\Core\Hook; use Friendica\Database\Database; use Friendica\DI; use Friendica\Security\Authentication; use Friendica\Test\FixtureTest; +use Friendica\Test\Util\AppDouble; use Friendica\Test\Util\AuthenticationDouble; abstract class ApiTest extends FixtureTest @@ -51,9 +53,13 @@ abstract class ApiTest extends FixtureTest parent::setUp(); // TODO: Change the autogenerated stub $this->dice = $this->dice - ->addRule(Authentication::class, ['instanceOf' => AuthenticationDouble::class, 'shared' => true]); + ->addRule(Authentication::class, ['instanceOf' => AuthenticationDouble::class, 'shared' => true]) + ->addRule(App::class, ['instanceOf' => AppDouble::class, 'shared' => true]); DI::init($this->dice); + // Manual override to bypass API authentication + DI::app()->setIsLoggedIn(true); + $this->installAuthTest(); } diff --git a/view/lang/C/messages.po b/view/lang/C/messages.po index f16730192..8d1032c9c 100644 --- a/view/lang/C/messages.po +++ b/view/lang/C/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: 2021.12-rc\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 13:40+0000\n" +"POT-Creation-Date: 2021-11-28 13:43+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -126,9 +126,9 @@ msgstr "" #: mod/unfollow.php:50 mod/unfollow.php:82 mod/wall_attach.php:68 #: mod/wall_attach.php:71 mod/wall_upload.php:90 mod/wall_upload.php:93 #: mod/wallmessage.php:36 mod/wallmessage.php:55 mod/wallmessage.php:89 -#: mod/wallmessage.php:109 src/Module/Attach.php:55 src/Module/BaseApi.php:77 -#: src/Module/BaseApi.php:86 src/Module/BaseApi.php:95 -#: src/Module/BaseApi.php:104 src/Module/BaseNotifications.php:97 +#: mod/wallmessage.php:109 src/Module/Attach.php:55 src/Module/BaseApi.php:79 +#: src/Module/BaseApi.php:88 src/Module/BaseApi.php:97 +#: src/Module/BaseApi.php:106 src/Module/BaseNotifications.php:97 #: src/Module/Contact/Advanced.php:60 src/Module/Delegation.php:118 #: src/Module/FollowConfirm.php:18 src/Module/FriendSuggest.php:56 #: src/Module/Group.php:42 src/Module/Group.php:85 src/Module/Invite.php:41 @@ -6932,26 +6932,26 @@ msgstr "" msgid "User registrations waiting for confirmation" msgstr "" -#: src/Module/BaseApi.php:278 src/Module/BaseApi.php:294 -#: src/Module/BaseApi.php:310 +#: src/Module/BaseApi.php:280 src/Module/BaseApi.php:296 +#: src/Module/BaseApi.php:312 msgid "Too Many Requests" msgstr "" -#: src/Module/BaseApi.php:279 +#: src/Module/BaseApi.php:281 #, php-format msgid "Daily posting limit of %d post reached. The post was rejected." msgid_plural "Daily posting limit of %d posts reached. The post was rejected." msgstr[0] "" msgstr[1] "" -#: src/Module/BaseApi.php:295 +#: src/Module/BaseApi.php:297 #, php-format msgid "Weekly posting limit of %d post reached. The post was rejected." msgid_plural "Weekly posting limit of %d posts reached. The post was rejected." msgstr[0] "" msgstr[1] "" -#: src/Module/BaseApi.php:311 +#: src/Module/BaseApi.php:313 #, php-format msgid "Monthly posting limit of %d post reached. The post was rejected." msgstr ""