Rev 11 | AutorÃa | Comparar con el anterior | Ultima modificación | Ver Log |
<?php// This file is part of Moodle - http://moodle.org///// Moodle 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.//// Moodle 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/>.namespace enrol_lti\local\ltiadvantage\repository;use enrol_lti\local\ltiadvantage\entity\application_registration;use enrol_lti\local\ltiadvantage\entity\deployment;/*** Tests for deployment_repository.** @package enrol_lti* @copyright 2021 Jake Dallimore <jrhdallimore@gmail.com>* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later* @coversDefaultClass \enrol_lti\local\ltiadvantage\repository\deployment_repository*/final class deployment_repository_test extends \advanced_testcase {/*** Helper to create test deployment objects for use with the repository tests.** @param string $deploymentid the string id of the deployment.* @param int|null $appregistrationid the id of the application registration to which this deployment belongs.* @return deployment the deployment.*/protected function create_test_deployment(string $deploymentid = 'DeployID123',?int $appregistrationid = null): deployment {if (is_null($appregistrationid)) {$registration = application_registration::create('Test','a2c94a2c94',new \moodle_url('http://lms.example.org'),'clientid_123',new \moodle_url('https://example.org/authrequesturl'),new \moodle_url('https://example.org/jwksurl'),new \moodle_url('https://example.org/accesstokenurl'));$registrationrepo = new application_registration_repository();$createdregistration = $registrationrepo->save($registration);$appregistrationid = $createdregistration->get_id();}return deployment::create($appregistrationid,$deploymentid,'Tool deployment on platform x',);}/*** Helper to assert that all the key elements of two deployments (i.e. excluding id) are equal.** @param deployment $expected the deployment whose values are deemed correct.* @param deployment $check the deployment to check.*/protected function assert_same_deployment_values(deployment $expected, deployment $check): void {$this->assertEquals($expected->get_deploymentname(), $check->get_deploymentname());$this->assertEquals($expected->get_deploymentid(), $check->get_deploymentid());$this->assertEquals($expected->get_registrationid(), $check->get_registrationid());$this->assertEquals($expected->get_legacy_consumer_key(), $check->get_legacy_consumer_key());}/*** Helper to assert that all the key elements of a deployment are present in the DB.** @param deployment $expected the deployment whose values are deemed correct.*/protected function assert_deployment_db_values(deployment $expected) {global $DB;$checkrecord = $DB->get_record('enrol_lti_deployment', ['id' => $expected->get_id()]);$this->assertEquals($expected->get_id(), $checkrecord->id);$this->assertEquals($expected->get_deploymentname(), $checkrecord->name);$this->assertEquals($expected->get_deploymentid(), $checkrecord->deploymentid);$this->assertEquals($expected->get_registrationid(), $checkrecord->platformid);$this->assertEquals($expected->get_legacy_consumer_key(), $checkrecord->legacyconsumerkey);$this->assertNotEmpty($checkrecord->timecreated);$this->assertNotEmpty($checkrecord->timemodified);}/*** Test saving a new deployment.** @covers ::save*/public function test_save_new(): void {$this->resetAfterTest();$deploymentrepo = new deployment_repository();$deployment = $this->create_test_deployment();$deployment->set_legacy_consumer_key('test-consumer-key');$saved = $deploymentrepo->save($deployment);$this->assertIsInt($saved->get_id());$this->assert_same_deployment_values($deployment, $saved);$this->assert_deployment_db_values($saved);}/*** Test saving an existing deployment.** @covers ::save*/public function test_save_existing(): void {$this->resetAfterTest();$deploymentrepo = new deployment_repository();$deployment = $this->create_test_deployment();$saved = $deploymentrepo->save($deployment);$saved->set_legacy_consumer_key('added-consumer-key');$saved2 = $deploymentrepo->save($saved);$this->assertEquals($saved->get_id(), $saved2->get_id());$this->assert_same_deployment_values($saved, $saved2);$this->assert_deployment_db_values($saved2);}/*** Test trying to save two deployments of identical nature in sequence.** @covers ::save*/public function test_save_unique_constraints_not_met(): void {$this->resetAfterTest();$deployment1 = $this->create_test_deployment('Deploy_ID_123');$deployment2 = $this->create_test_deployment('Deploy_ID_123', $deployment1->get_registrationid());$deploymentrepo = new deployment_repository();$this->assertInstanceOf(deployment::class, $deploymentrepo->save($deployment1));$this->expectException(\dml_exception::class);$deploymentrepo->save($deployment2);}/*** Test existence of a deployment within the repository.** @covers ::exists*/public function test_exists(): void {$this->resetAfterTest();$deploymentrepo = new deployment_repository();$deployment = $this->create_test_deployment();$saveddeployment = $deploymentrepo->save($deployment);$this->assertTrue($deploymentrepo->exists($saveddeployment->get_id()));$this->assertFalse($deploymentrepo->exists(0));}/*** Test finding a deployment in the repository.** @covers ::find*/public function test_find(): void {$this->resetAfterTest();$deployment = $this->create_test_deployment();$deploymentrepo = new deployment_repository();$saveddeployment = $deploymentrepo->save($deployment);$founddeployment = $deploymentrepo->find($saveddeployment->get_id());$this->assertEquals($saveddeployment->get_id(), $founddeployment->get_id());$this->assert_same_deployment_values($saveddeployment, $founddeployment);$this->assertNull($deploymentrepo->find(0));}/*** Test deleting a deployment object from the repository.** @covers ::delete*/public function test_delete(): void {$this->resetAfterTest();$deployment = $this->create_test_deployment();$deploymentrepo = new deployment_repository();$saveddeployment = $deploymentrepo->save($deployment);$this->assertTrue($deploymentrepo->exists($saveddeployment->get_id()));$deploymentrepo->delete($saveddeployment->get_id());$this->assertFalse($deploymentrepo->exists($saveddeployment->get_id()));$this->assertNull($deploymentrepo->delete($saveddeployment->get_id()));}/*** Test deleting a deployment by registration.** @covers ::delete_by_registration*/public function test_delete_by_registration(): void {$this->resetAfterTest();$deployment = $this->create_test_deployment();$deploymentrepo = new deployment_repository();$saveddeployment = $deploymentrepo->save($deployment);$deployment2 = deployment::create($saveddeployment->get_registrationid(), 'another-deployment-id-1','another deployment 1');$saveddeployment2 = $deploymentrepo->save($deployment2);$deployment3 = deployment::create($saveddeployment->get_registrationid() + 1, 'another-deployment-id-2','another deployment 2');$saveddeployment3 = $deploymentrepo->save($deployment3);$this->assertTrue($deploymentrepo->exists($saveddeployment->get_id()));$this->assertTrue($deploymentrepo->exists($saveddeployment2->get_id()));$this->assertTrue($deploymentrepo->exists($saveddeployment3->get_id()));$deploymentrepo->delete_by_registration($saveddeployment->get_registrationid());$this->assertFalse($deploymentrepo->exists($saveddeployment->get_id()));$this->assertFalse($deploymentrepo->exists($saveddeployment2->get_id()));$this->assertTrue($deploymentrepo->exists($saveddeployment3->get_id()));$this->assertNull($deploymentrepo->delete($saveddeployment->get_id()));}/*** Test counting the number of deployments for a given registration.** @covers ::count_by_registration*/public function test_count_by_registration(): void {$this->resetAfterTest();$deployment = $this->create_test_deployment();$deploymentrepo = new deployment_repository();$saveddeployment = $deploymentrepo->save($deployment);$deployment2 = deployment::create($saveddeployment->get_registrationid(), 'another-deployment-id-1','another deployment 1');$saveddeployment2 = $deploymentrepo->save($deployment2);$deployment3 = deployment::create($saveddeployment->get_registrationid() + 1, 'another-deployment-id-2','another deployment 2');$saveddeployment3 = $deploymentrepo->save($deployment3);$this->assertEquals(2, $deploymentrepo->count_by_registration($saveddeployment->get_registrationid()));$this->assertEquals(1, $deploymentrepo->count_by_registration($saveddeployment3->get_registrationid()));$this->assertEquals(0, $deploymentrepo->count_by_registration(0));}/*** Test confirming a deployment can be found by registration and deploymentid.** @covers ::find_by_registration*/public function test_find_by_registration(): void {$this->resetAfterTest();$deployment = $this->create_test_deployment();$deploymentrepo = new deployment_repository();$saveddeployment = $deploymentrepo->save($deployment);$regid = $saveddeployment->get_registrationid();// Existing registration.$this->assertInstanceOf(deployment::class,$deploymentrepo->find_by_registration($regid, $saveddeployment->get_deploymentid()));// A non-existent registration.$this->assertNull($deploymentrepo->find_by_registration($regid, 'NonExistentDeploymentId'));}/*** Testing that all deployments for a given registration can be fetched.** @covers ::find_all_by_registration*/public function test_find_all_by_registration(): void {$this->resetAfterTest();$registration1 = application_registration::create('Test','a2c94a2c94',new \moodle_url('http://lms.example.org'),'clientid_123',new \moodle_url('https://example.org/authrequesturl'),new \moodle_url('https://example.org/jwksurl'),new \moodle_url('https://example.org/accesstokenurl'));$registration2 = application_registration::create('Test 2','c56bcdc56bcd',new \moodle_url('http://lms2.example.org'),'clientid_345',new \moodle_url('https://example.org/authrequesturl'),new \moodle_url('https://example.org/jwksurl'),new \moodle_url('https://example.org/accesstokenurl'));$registrationrepo = new application_registration_repository();$deploymentrepo = new deployment_repository();$createdregistration1 = $registrationrepo->save($registration1);$createdregistration2 = $registrationrepo->save($registration2);$deployment1 = $createdregistration1->add_tool_deployment('Deployment 1', 'reg1_deploy1');$deployment2 = $createdregistration1->add_tool_deployment('Deployment 2', 'reg1_deploy2');$deployment3 = $createdregistration2->add_tool_deployment('Deployment 3', 'reg2_deploy1');$saveddeployment1 = $deploymentrepo->save($deployment1);$saveddeployment2 = $deploymentrepo->save($deployment2);$saveddeployment3 = $deploymentrepo->save($deployment3);$reg1saveddeployments = [$saveddeployment1->get_id() => $saveddeployment1,$saveddeployment2->get_id() => $saveddeployment2];$reg2saveddeployments = [$saveddeployment3->get_id() => $saveddeployment3];// Registration 1.$reg1founddeployments = $deploymentrepo->find_all_by_registration($createdregistration1->get_id());$this->assertCount(2, $reg1founddeployments);foreach ($reg1founddeployments as $reg1founddeployment) {$this->assertEquals($reg1saveddeployments[$reg1founddeployment->get_id()], $reg1founddeployment);}// Registration 2.$reg2founddeployments = $deploymentrepo->find_all_by_registration($createdregistration2->get_id());$this->assertCount(1, $deploymentrepo->find_all_by_registration($createdregistration2->get_id()));foreach ($reg2founddeployments as $reg2founddeployment) {$this->assertEquals($reg2saveddeployments[$reg2founddeployment->get_id()], $reg2founddeployment);}// A non-existent registration.$nonexistentregdeployments = $deploymentrepo->find_all_by_registration(0);$this->assertEmpty($nonexistentregdeployments);}}