* * @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 OCA\Talk\Tests\php\Settings\Admin; use OCA\Talk\Config; use OCA\Talk\MatterbridgeManager; use OCA\Talk\Service\CommandService; use OCA\Talk\Settings\Admin\AdminSettings; use OCP\AppFramework\Services\IAppConfig; use OCP\AppFramework\Services\IInitialState; use OCP\ICacheFactory; use OCP\IConfig; use OCP\IGroupManager; use OCP\IL10N; use OCP\IUserSession; use OCP\L10N\IFactory; use PHPUnit\Framework\Assert; use PHPUnit\Framework\MockObject\MockObject; use Test\TestCase; class AdminSettingsTest extends TestCase { protected Config&MockObject $talkConfig; protected IConfig&MockObject $serverConfig; protected IAppConfig&MockObject $appConfig; protected CommandService&MockObject $commandService; protected IInitialState&MockObject $initialState; protected ICacheFactory&MockObject $cacheFactory; protected IGroupManager&MockObject $groupManager; protected MatterbridgeManager&MockObject $matterbridgeManager; protected IUserSession&MockObject $userSession; protected IL10N&MockObject $l10n; protected IFactory&MockObject $l10nFactory; protected ?AdminSettings $admin = null; public function setUp(): void { parent::setUp(); $this->talkConfig = $this->createMock(Config::class); $this->serverConfig = $this->createMock(IConfig::class); $this->appConfig = $this->createMock(IAppConfig::class); $this->commandService = $this->createMock(CommandService::class); $this->initialState = $this->createMock(IInitialState::class); $this->cacheFactory = $this->createMock(ICacheFactory::class); $this->groupManager = $this->createMock(IGroupManager::class); $this->matterbridgeManager = $this->createMock(MatterbridgeManager::class); $this->userSession = $this->createMock(IUserSession::class); $this->l10n = $this->createMock(IL10N::class); $this->l10nFactory = $this->createMock(IFactory::class); $this->admin = $this->getAdminSettings(); } /** * @param string[] $methods * @return AdminSettings|MockObject */ protected function getAdminSettings(array $methods = []): AdminSettings { if (empty($methods)) { return new AdminSettings( $this->talkConfig, $this->serverConfig, $this->appConfig, $this->commandService, $this->initialState, $this->cacheFactory, $this->groupManager, $this->matterbridgeManager, $this->userSession, $this->l10n, $this->l10nFactory ); } return $this->getMockBuilder(AdminSettings::class) ->setConstructorArgs([ $this->talkConfig, $this->serverConfig, $this->appConfig, $this->commandService, $this->initialState, $this->cacheFactory, $this->groupManager, $this->matterbridgeManager, $this->userSession, $this->l10n, $this->l10nFactory, ]) ->onlyMethods($methods) ->getMock(); } public function testGetSection(): void { $admin = $this->getAdminSettings(); $this->assertNotEmpty($admin->getSection()); } public function testGetPriority(): void { $admin = $this->getAdminSettings(); $this->assertEquals(0, $admin->getPriority()); } public function testGetForm(): void { $admin = $this->getAdminSettings([ 'initGeneralSettings', 'initAllowedGroups', 'initCommands', 'initStunServers', 'initTurnServers', 'initSignalingServers', 'initRequestSignalingServerTrial', ]); $admin->expects($this->once()) ->method('initGeneralSettings'); $admin->expects($this->once()) ->method('initAllowedGroups'); $admin->expects($this->once()) ->method('initCommands'); $admin->expects($this->once()) ->method('initStunServers'); $admin->expects($this->once()) ->method('initTurnServers'); $admin->expects($this->once()) ->method('initSignalingServers'); $admin->expects($this->once()) ->method('initRequestSignalingServerTrial'); $form = $admin->getForm(); $this->assertSame('settings/admin-settings', $form->getTemplateName()); $this->assertSame('', $form->getRenderAs()); $this->assertCount(0, $form->getParams()); } public function testInitStunServers(): void { $this->talkConfig->expects($this->once()) ->method('getStunServers') ->willReturn(['getStunServers']); $this->serverConfig->expects($this->once()) ->method('getSystemValueBool') ->with('has_internet_connection', true) ->willReturn(true); $i = 0; $expectedCalls = [ ['stun_servers', ['getStunServers']], ['has_internet_connection', true], ]; $this->initialState->expects($this->exactly(2)) ->method('provideInitialState') ->willReturnCallback(function () use ($expectedCalls, &$i) { Assert::assertArrayHasKey($i, $expectedCalls); Assert::assertSame($expectedCalls[$i], func_get_args()); $i++; }); $admin = $this->getAdminSettings(); self::invokePrivate($admin, 'initStunServers'); } public function testInitTurnServers(): void { $this->talkConfig->expects($this->once()) ->method('getTurnServers') ->willReturn(['getTurnServers']); $this->initialState->expects($this->once()) ->method('provideInitialState') ->with('turn_servers', ['getTurnServers']); $admin = $this->getAdminSettings(); self::invokePrivate($admin, 'initTurnServers'); } }