AutorÃa | Ultima modificación | Ver Log |
<?php// This file is part of Moodle - http://moodle.org///// This program is free software: you can redistribute it and/or modify// it under the terms of the GNU 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 General Public License for more details.//// You should have received a copy of the GNU General Public License// along with Moodle. If not, see <http://www.gnu.org/licenses/>.declare(strict_types=1);// Namespace does not match PSR. But Moodle likes it this way.namespace mod_edusharing;use advanced_testcase;use dml_exception;use EduSharingApiClient\CurlResult;use EduSharingApiClient\EduSharingAuthHelper;use EduSharingApiClient\EduSharingHelperBase;use EduSharingApiClient\EduSharingNodeHelper;use EduSharingApiClient\EduSharingNodeHelperConfig;use EduSharingApiClient\UrlHandling;use SimpleXMLElement;use testUtils\FakeConfig;// phpcs:ignore -- no Moodle internal check needed.global $CFG;require_once($CFG->dirroot . '/mod/edusharing/eduSharingAutoloader.php');/*** Class MetadataLogicTest** @author Marian Ziegler <ziegler@edu-sharing.net>* @package mod_edusharing* @covers \mod_edusharing\MetadataLogic*/class metadata_logic_test extends advanced_testcase {/*** Function test_if_import_metadata_sets_all_config_entries_on_success** @return void* @throws EduSharingUserException* @throws dml_exception*/public function test_if_import_metadata_sets_all_config_entries_on_success(): void {$this->resetAfterTest();global $_SERVER, $CFG;require_once($CFG->dirroot . '/mod/edusharing/tests/testUtils/FakeConfig.php');$_SERVER['SERVER_NAME'] = 'testServer';$metadataurl = 'test.de';$metadataxml = file_get_contents(__DIR__ . '/metadataTest.xml');$basehelper = new EduSharingHelperBase('www.url.de', 'pkey123', 'appid123');$authhelper = new EduSharingAuthHelper($basehelper);$nodeconfig = new EduSharingNodeHelperConfig(new UrlHandling(true));$nodehelper = new EduSharingNodeHelper($basehelper, $nodeconfig);$fakeconfig = new FakeConfig();$fakeconfig->set_entries(['application_appid' => 'app123',]);$utils = new UtilityFunctions($fakeconfig);$servicemock = $this->getMockBuilder(EduSharingService::class)->onlyMethods(['import_metadata'])->setConstructorArgs([$authhelper, $nodehelper])->getMock();$servicemock->expects($this->once())->method('import_metadata')->with($metadataurl)->will($this->returnValue(new CurlResult($metadataxml, 0, [])));$logic = new MetadataLogic($servicemock, $utils);$logic->import_metadata($metadataurl);$this->assertEquals('http', $fakeconfig->get('repository_clientprotocol'));$this->assertEquals('http://test.de/edu-sharing/services/authbyapp',$fakeconfig->get('repository_authenticationwebservice'));$this->assertEquals('http://test.de/edu-sharing/services/usage2', $fakeconfig->get('repository_usagewebservice'));$this->assertEquals('publicKeyTest', $fakeconfig->get('repository_public_key'));$this->assertEquals('http://test.de/esrender/application/esmain/index.php', $fakeconfig->get('repository_contenturl'));$this->assertEquals('local', $fakeconfig->get('repository_appcaption'));$this->assertEquals('8100', $fakeconfig->get('repository_clientport'));$this->assertEquals('8080', $fakeconfig->get('repository_port'));$this->assertEquals('test.de', $fakeconfig->get('repository_domain'));$this->assertEquals('http://test.de/edu-sharing/services/authbyapp?wsdl',$fakeconfig->get('repository_authenticationwebservice_wsdl'));$this->assertEquals('REPOSITORY', $fakeconfig->get('repository_type'));$this->assertEquals('enterprise-docker-maven-fixes-8-0', $fakeconfig->get('repository_appid'));$this->assertEquals('http:/test.de/edu-sharing/services/usage2?wsdl', $fakeconfig->get('repository_usagewebservice_wsdl'));$this->assertEquals('http', $fakeconfig->get('repository_protocol'));$this->assertEquals('repository-service', $fakeconfig->get('repository_host'));}/*** Function test_if_import_metadata_generates_new_app_id_if_none_present** @return void* @throws EduSharingUserException* @throws dml_exception*/public function test_if_import_metadata_generates_new_app_id_if_none_present(): void {$this->resetAfterTest();global $_SERVER, $CFG;require_once($CFG->dirroot . '/mod/edusharing/tests/testUtils/FakeConfig.php');$_SERVER['SERVER_NAME'] = 'testServer';$fakeconfig = new FakeConfig();$metadataurl = 'test.de';$metadataxml = file_get_contents(__DIR__ . '/metadataTest.xml');$basehelper = new EduSharingHelperBase('www.url.de', 'pkey123', 'appid123');$authhelper = new EduSharingAuthHelper($basehelper);$nodeconfig = new EduSharingNodeHelperConfig(new UrlHandling(true));$nodehelper = new EduSharingNodeHelper($basehelper, $nodeconfig);$utils = new UtilityFunctions($fakeconfig);$servicemock = $this->getMockBuilder(EduSharingService::class)->onlyMethods(['import_metadata'])->setConstructorArgs([$authhelper, $nodehelper])->getMock();$servicemock->expects($this->once())->method('import_metadata')->with($metadataurl)->will($this->returnValue(new CurlResult($metadataxml, 0, [])));$logic = new MetadataLogic($servicemock, $utils);$logic->import_metadata($metadataurl);$this->assertTrue(is_string($fakeconfig->get('application_appid')), 'application_appid was not set');$this->assertTrue(str_contains($fakeconfig->get('application_appid'), 'moodle_'),'application_appid does not contain moodle prefix');}/*** Function test_if_import_metadata_uses_configured_app_id_if_found** @return void* @throws EduSharingUserException* @throws dml_exception*/public function test_if_import_metadata_uses_configured_app_id_if_found(): void {$this->resetAfterTest();global $_SERVER, $CFG;require_once($CFG->dirroot . '/mod/edusharing/tests/testUtils/FakeConfig.php');$_SERVER['SERVER_NAME'] = 'testServer';$fakeconfig = new FakeConfig();$fakeconfig->set_entries(['application_appid' => 'testId',]);$metadataurl = 'test.de';$metadataxml = file_get_contents(__DIR__ . '/metadataTest.xml');$basehelper = new EduSharingHelperBase('www.url.de', 'pkey123', 'appid123');$authhelper = new EduSharingAuthHelper($basehelper);$nodeconfig = new EduSharingNodeHelperConfig(new UrlHandling(true));$nodehelper = new EduSharingNodeHelper($basehelper, $nodeconfig);$servicemock = $this->getMockBuilder(EduSharingService::class)->onlyMethods(['import_metadata'])->setConstructorArgs([$authhelper, $nodehelper])->getMock();$servicemock->expects($this->once())->method('import_metadata')->with($metadataurl)->will($this->returnValue(new CurlResult($metadataxml, 0, [])));$utils = new UtilityFunctions($fakeconfig);$logic = new MetadataLogic($servicemock, $utils);$logic->import_metadata($metadataurl);$this->assertEquals('testId', $fakeconfig->get('application_appid'));}/*** Function test_if_import_metadata_uses_app_id_class_variable_if_set** @return void* @throws EduSharingUserException* @throws dml_exception*/public function test_if_import_metadata_uses_app_id_class_variable_if_set(): void {$this->resetAfterTest();global $_SERVER, $CFG;require_once($CFG->dirroot . '/mod/edusharing/tests/testUtils/FakeConfig.php');$_SERVER['SERVER_NAME'] = 'testServer';$metadataurl = 'test.de';$metadataxml = file_get_contents(__DIR__ . '/metadataTest.xml');$basehelper = new EduSharingHelperBase('www.url.de', 'pkey123', 'appid123');$authhelper = new EduSharingAuthHelper($basehelper);$nodeconfig = new EduSharingNodeHelperConfig(new UrlHandling(true));$nodehelper = new EduSharingNodeHelper($basehelper, $nodeconfig);$servicemock = $this->getMockBuilder(EduSharingService::class)->onlyMethods(['import_metadata'])->setConstructorArgs([$authhelper, $nodehelper])->getMock();$servicemock->expects($this->once())->method('import_metadata')->with($metadataurl)->will($this->returnValue(new CurlResult($metadataxml, 0, [])));$fakeconfig = new FakeConfig();$utils = new UtilityFunctions($fakeconfig);$logic = new MetadataLogic($servicemock, $utils);$logic->set_app_id('testId');$logic->import_metadata($metadataurl);$this->assertEquals('testId', $fakeconfig->get('application_appid'));}/*** Function test_if_import_metadata_does_not_set_host_aliases_if_none_are_set** @return void* @throws EduSharingUserException* @throws dml_exception*/public function test_if_import_metadata_does_not_set_host_aliases_if_none_are_set(): void {$this->resetAfterTest();global $_SERVER, $CFG;require_once($CFG->dirroot . '/mod/edusharing/tests/testUtils/FakeConfig.php');$_SERVER['SERVER_NAME'] = 'testServer';$metadataurl = 'test.de';$metadataxml = file_get_contents(__DIR__ . '/metadataTest.xml');$basehelper = new EduSharingHelperBase('www.url.de', 'pkey123', 'appid123');$authhelper = new EduSharingAuthHelper($basehelper);$nodeconfig = new EduSharingNodeHelperConfig(new UrlHandling(true));$nodehelper = new EduSharingNodeHelper($basehelper, $nodeconfig);$servicemock = $this->getMockBuilder(EduSharingService::class)->onlyMethods(['import_metadata'])->setConstructorArgs([$authhelper, $nodehelper])->getMock();$servicemock->expects($this->once())->method('import_metadata')->with($metadataurl)->will($this->returnValue(new CurlResult($metadataxml, 0, [])));$fakeconfig = new FakeConfig();$fakeconfig->set_entries(['application_appid' => 'testId',]);$utils = new UtilityFunctions($fakeconfig);$logic = new MetadataLogic($servicemock, $utils);$logic->import_metadata($metadataurl);$this->assertFalse($fakeconfig->get('application_host_aliases'));}/*** Function test_if_import_metadata_sets_host_aliases_if_set_as_class_variables** @return void* @throws EduSharingUserException* @throws dml_exception*/public function test_if_import_metadata_sets_host_aliases_if_set_as_class_variables(): void {$this->resetAfterTest();global $_SERVER, $CFG;require_once($CFG->dirroot . '/mod/edusharing/tests/testUtils/FakeConfig.php');$_SERVER['SERVER_NAME'] = 'testServer';$metadataurl = 'test.de';$metadataxml = file_get_contents(__DIR__ . '/metadataTest.xml');$basehelper = new EduSharingHelperBase('www.url.de', 'pkey123', 'appid123');$authhelper = new EduSharingAuthHelper($basehelper);$nodeconfig = new EduSharingNodeHelperConfig(new UrlHandling(true));$nodehelper = new EduSharingNodeHelper($basehelper, $nodeconfig);$servicemock = $this->getMockBuilder(EduSharingService::class)->onlyMethods(['import_metadata'])->setConstructorArgs([$authhelper, $nodehelper])->getMock();$servicemock->expects($this->once())->method('import_metadata')->with($metadataurl)->will($this->returnValue(new CurlResult($metadataxml, 0, [])));$fakeconfig = new FakeConfig();$fakeconfig->set_entries(['application_appid' => 'testId',]);$utils = new UtilityFunctions($fakeconfig);$logic = new MetadataLogic($servicemock, $utils);$logic->set_host_aliases('hostAliasesTest');$logic->import_metadata($metadataurl);$this->assertEquals('hostAliasesTest', $fakeconfig->get('application_host_aliases'));}/*** Function test_if_import_metadata_does_not_set_wlo_guest_user_if_none_provided** @return void* @throws EduSharingUserException* @throws dml_exception**/public function test_if_import_metadata_does_not_set_wlo_guest_user_if_none_provided(): void {$this->resetAfterTest();global $_SERVER, $CFG;require_once($CFG->dirroot . '/mod/edusharing/tests/testUtils/FakeConfig.php');$_SERVER['SERVER_NAME'] = 'testServer';$metadataurl = 'test.de';$metadataxml = file_get_contents(__DIR__ . '/metadataTest.xml');$basehelper = new EduSharingHelperBase('www.url.de', 'pkey123', 'appid123');$authhelper = new EduSharingAuthHelper($basehelper);$nodeconfig = new EduSharingNodeHelperConfig(new UrlHandling(true));$nodehelper = new EduSharingNodeHelper($basehelper, $nodeconfig);$servicemock = $this->getMockBuilder(EduSharingService::class)->onlyMethods(['import_metadata'])->setConstructorArgs([$authhelper, $nodehelper])->getMock();$servicemock->expects($this->once())->method('import_metadata')->with($metadataurl)->will($this->returnValue(new CurlResult($metadataxml, 0, [])));$fakeconfig = new FakeConfig();$fakeconfig->set_entries(['application_appid' => 'testId',]);$utils = new UtilityFunctions($fakeconfig);$logic = new MetadataLogic($servicemock, $utils);$logic->import_metadata($metadataurl);$this->assertFalse($fakeconfig->get('edu_guest_guest_id'));$this->assertFalse($fakeconfig->get('wlo_guest_option'));}/*** Function test_if_import_metadata_does_set_wlo_guest_user_if_class_variable_is_set** @return void* @throws EduSharingUserException* @throws dml_exception**/public function test_if_import_metadata_does_set_wlo_guest_user_if_class_variable_is_set(): void {$this->resetAfterTest();global $_SERVER, $CFG;require_once($CFG->dirroot . '/mod/edusharing/tests/testUtils/FakeConfig.php');$_SERVER['SERVER_NAME'] = 'testServer';$metadataurl = 'test.de';$metadataxml = file_get_contents(__DIR__ . '/metadataTest.xml');$basehelper = new EduSharingHelperBase('www.url.de', 'pkey123', 'appid123');$authhelper = new EduSharingAuthHelper($basehelper);$nodeconfig = new EduSharingNodeHelperConfig(new UrlHandling(true));$nodehelper = new EduSharingNodeHelper($basehelper, $nodeconfig);$servicemock = $this->getMockBuilder(EduSharingService::class)->onlyMethods(['import_metadata'])->setConstructorArgs([$authhelper, $nodehelper])->getMock();$servicemock->expects($this->once())->method('import_metadata')->with($metadataurl)->will($this->returnValue(new CurlResult($metadataxml, 0, [])));$fakeconfig = new FakeConfig();$fakeconfig->set_entries(['application_appid' => 'testId',]);$utils = new UtilityFunctions($fakeconfig);$logic = new MetadataLogic($servicemock, $utils);$logic->set_wlo_guest_user('wloGuestTest');$logic->import_metadata($metadataurl);$this->assertEquals('wloGuestTest', $fakeconfig->get('edu_guest_guest_id'));$this->assertEquals('1', $fakeconfig->get('wlo_guest_option'));}/*** Function test_if_import_metadata_generates_new_key_pair_if_none_found** @return void* @throws EduSharingUserException* @throws dml_exception**/public function test_if_import_metadata_generates_new_key_pair_if_none_found(): void {$this->resetAfterTest();global $_SERVER, $CFG;require_once($CFG->dirroot . '/mod/edusharing/tests/testUtils/FakeConfig.php');$_SERVER['SERVER_NAME'] = 'testServer';$metadataurl = 'test.de';$metadataxml = file_get_contents(__DIR__ . '/metadataTestWithoutKey.xml');$basehelper = new EduSharingHelperBase('www.url.de', 'pkey123', 'appid123');$authhelper = new EduSharingAuthHelper($basehelper);$nodeconfig = new EduSharingNodeHelperConfig(new UrlHandling(true));$nodehelper = new EduSharingNodeHelper($basehelper, $nodeconfig);$servicemock = $this->getMockBuilder(EduSharingService::class)->onlyMethods(['import_metadata'])->setConstructorArgs([$authhelper, $nodehelper])->getMock();$servicemock->expects($this->once())->method('import_metadata')->with($metadataurl)->will($this->returnValue(new CurlResult($metadataxml, 0, [])));$fakeconfig = new FakeConfig();$fakeconfig->set_entries(['application_appid' => 'testId',]);$utils = new UtilityFunctions($fakeconfig);$logic = new MetadataLogic($servicemock, $utils);$logic->set_wlo_guest_user('wloGuestTest');$logic->import_metadata($metadataurl);$this->assertNotEmpty($fakeconfig->get('application_private_key'));$this->assertNotEmpty($fakeconfig->get('application_public_key'));}/*** Function test_if_create_xml_metadata_creates_xml_with_all_needed_entries** @return void** @throws dml_exception*/public function test_if_create_xml_metadata_creates_xml_with_all_needed_entries(): void {$this->resetAfterTest();global $CFG;require_once($CFG->dirroot . '/mod/edusharing/tests/testUtils/FakeConfig.php');$CFG->wwwroot = 'https://www.example.com/moodle';$fakeconfig = new FakeConfig();$fakeconfig->set_entries(['application_appid' => 'testAppId','application_type' => 'testType','application_host' => 'testHost','application_host_aliases' => 'testHostAliases','application_public_key' => 'testPublicKey','EDU_AUTH_AFFILIATION_NAME' => 'testAffiliationName','edu_guest_guest_id' => 'testGuestId','wlo_guest_option' => '1',]);$basehelper = new EduSharingHelperBase('www.url.de', 'testPublicKey', 'testAppId');$authhelper = new EduSharingAuthHelper($basehelper);$nodeconfig = new EduSharingNodeHelperConfig(new UrlHandling(true));$nodehelper = new EduSharingNodeHelper($basehelper, $nodeconfig);$logic = new MetadataLogic(new EduSharingService($authhelper, $nodehelper), new UtilityFunctions($fakeconfig));$xmlstring = $logic->create_xml_metadata();$xml = new SimpleXMLElement($xmlstring);$this->assertEquals(11, $xml->count());$this->assertEquals('testAppId', $xml->xpath('entry[@key="appid"]')[0]);$this->assertEquals('testType', $xml->xpath('entry[@key="type"]')[0]);$this->assertEquals('moodle', $xml->xpath('entry[@key="subtype"]')[0]);$this->assertEquals('www.example.com', $xml->xpath('entry[@key="domain"]')[0]);$this->assertEquals('testHost', $xml->xpath('entry[@key="host"]')[0]);$this->assertEquals('testHostAliases', $xml->xpath('entry[@key="host_aliases"]')[0]);$this->assertEquals('true', $xml->xpath('entry[@key="trustedclient"]')[0]);$this->assertEquals('moodle:course/update', $xml->xpath('entry[@key="hasTeachingPermission"]')[0]);$this->assertEquals('testPublicKey', $xml->xpath('entry[@key="public_key"]')[0]);$this->assertEquals('testAffiliationName', $xml->xpath('entry[@key="appcaption"]')[0]);$this->assertEquals('testGuestId', $xml->xpath('entry[@key="auth_by_app_user_whitelist"]')[0]);}}