99c1543aa8
The API was incorrectly assuming that all uses of the API were for a course, and that the instanceid of the communication instance was a course id. These assumptions are both entirely wrong. The API is intended to support a range of uses including use at the site, user, and activity levels. Furthermore, if a group were to be used, then the instanceid should be of that group's id, and therefore the contextid would need to be fetched or that group's course instead. The only solution here is to add a new contextid field to the table, and implement it all parts of the API.
129 lines
4.7 KiB
PHP
129 lines
4.7 KiB
PHP
<?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 communication_customlink;
|
|
|
|
use core_communication\processor;
|
|
use core_communication\communication_test_helper_trait;
|
|
|
|
defined('MOODLE_INTERNAL') || die();
|
|
|
|
require_once(__DIR__ . '/../../../tests/communication_test_helper_trait.php');
|
|
|
|
/**
|
|
* Class communication_feature_test to test the custom link features implemented using the core interfaces.
|
|
*
|
|
* @package communication_customlink
|
|
* @category test
|
|
* @copyright 2023 Michael Hawkins <michaelh@moodle.com>
|
|
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
|
* @coversDefaultClass \communication_customlink\communication_feature
|
|
*/
|
|
class communication_feature_test extends \advanced_testcase {
|
|
use communication_test_helper_trait;
|
|
|
|
public function setUp(): void {
|
|
parent::setUp();
|
|
$this->resetAfterTest();
|
|
$this->setup_communication_configs();
|
|
}
|
|
|
|
/**
|
|
* Test create, update and delete chat room.
|
|
*
|
|
* @covers ::load_for_instance
|
|
*/
|
|
public function test_load_for_instance(): void {
|
|
$communicationprocessor = $this->get_test_communication_processor();
|
|
|
|
$instance = communication_feature::load_for_instance($communicationprocessor);
|
|
$this->assertInstanceOf('communication_customlink\communication_feature', $instance);
|
|
}
|
|
|
|
/**
|
|
* Test create, update and delete chat room.
|
|
*
|
|
* @covers ::create_chat_room
|
|
* @covers ::update_chat_room
|
|
* @covers ::delete_chat_room
|
|
*/
|
|
public function test_create_update_delete_chat_room(): void {
|
|
$communicationprocessor = $this->get_test_communication_processor();
|
|
|
|
// Create, update and delete room should always return true because this provider contains
|
|
// a link to a room, but does not manage the existence of the room.
|
|
$createroomresult = $communicationprocessor->get_room_provider()->create_chat_room();
|
|
$updateroomresult = $communicationprocessor->get_room_provider()->update_chat_room();
|
|
$deleteroomresult = $communicationprocessor->get_room_provider()->delete_chat_room();
|
|
$this->assertTrue($createroomresult);
|
|
$this->assertTrue($updateroomresult);
|
|
$this->assertTrue($deleteroomresult);
|
|
}
|
|
|
|
/**
|
|
* Test save form data with provider's custom field and fetching with get_chat_room_url().
|
|
*
|
|
* @covers ::save_form_data
|
|
* @covers ::get_chat_room_url
|
|
*/
|
|
public function test_save_form_data(): void {
|
|
$communicationprocessor = $this->get_test_communication_processor();
|
|
$customlinkurl = 'https://moodle.org/message/index.php';
|
|
$formdatainstance = (object) ['customlinkurl' => $customlinkurl];
|
|
|
|
// Test the custom link URL is saved and can be retrieved as expected.
|
|
$communicationprocessor->get_form_provider()->save_form_data($formdatainstance);
|
|
$fetchedurl = $communicationprocessor->get_room_provider()->get_chat_room_url();
|
|
$this->assertEquals($customlinkurl, $fetchedurl);
|
|
}
|
|
|
|
/**
|
|
* Create a test custom link communication processor object.
|
|
*
|
|
* @return processor
|
|
*/
|
|
protected function get_test_communication_processor(): processor {
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$instanceid = $course->id;
|
|
$context = \core\context\system::instance();
|
|
$component = 'core_course';
|
|
$instancetype = 'coursecommunication';
|
|
$selectedcommunication = 'communication_customlink';
|
|
$communicationroomname = 'communicationroom';
|
|
|
|
$communicationprocessor = processor::create_instance(
|
|
$context,
|
|
$selectedcommunication,
|
|
$instanceid,
|
|
$component,
|
|
$instancetype,
|
|
$communicationroomname,
|
|
);
|
|
|
|
return $communicationprocessor;
|
|
}
|
|
|
|
/**
|
|
* Test if the selected provider is configured.
|
|
*
|
|
* @covers ::is_configured
|
|
*/
|
|
public function test_is_configured(): void {
|
|
$communicationprocessor = $this->get_test_communication_processor();
|
|
$this->assertTrue($communicationprocessor->get_form_provider()->is_configured());
|
|
}
|
|
}
|