544 lines
20 KiB
PHP
544 lines
20 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 core_communication;
|
|
|
|
use communication_matrix\matrix_test_helper_trait;
|
|
|
|
defined('MOODLE_INTERNAL') || die();
|
|
|
|
require_once(__DIR__ . '/../provider/matrix/tests/matrix_test_helper_trait.php');
|
|
require_once(__DIR__ . '/communication_test_helper_trait.php');
|
|
|
|
/**
|
|
* Class processor_test to test the communication internal api and its associated methods.
|
|
*
|
|
* @package core_communication
|
|
* @category test
|
|
* @copyright 2023 Safat Shahin <safat.shahin@moodle.com>
|
|
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
|
* @coversDefaultClass \core_communication\processor
|
|
*/
|
|
class processor_test extends \advanced_testcase {
|
|
use matrix_test_helper_trait;
|
|
use communication_test_helper_trait;
|
|
|
|
public function setUp(): void {
|
|
parent::setUp();
|
|
$this->resetAfterTest();
|
|
$this->setup_communication_configs();
|
|
$this->initialise_mock_server();
|
|
}
|
|
|
|
/**
|
|
* Test create instance.
|
|
*
|
|
* @covers ::create_instance
|
|
* @covers ::get_id
|
|
* @covers ::get_instance
|
|
* @covers ::get_room_name
|
|
*/
|
|
public function test_create_instance(): void {
|
|
global $DB;
|
|
$this->resetAfterTest();
|
|
|
|
// Sample test data.
|
|
$instanceid = 10;
|
|
$context = \core\context\system::instance();
|
|
$component = 'core';
|
|
$instancetype = 'mycommunication';
|
|
$selectedcommunication = 'communication_matrix';
|
|
$communicationroomname = 'communicationroom';
|
|
|
|
$communicationprocessor = processor::create_instance(
|
|
$context,
|
|
$selectedcommunication,
|
|
$instanceid,
|
|
$component,
|
|
$instancetype,
|
|
$communicationroomname,
|
|
);
|
|
|
|
// Now test the record against the database.
|
|
$communicationrecord = $DB->get_record(
|
|
'communication',
|
|
['instanceid' => $instanceid, 'component' => $component, 'instancetype' => $instancetype]
|
|
);
|
|
|
|
// Test against the set data.
|
|
$this->assertNotEmpty($communicationrecord);
|
|
$this->assertEquals($context->id, $communicationrecord->contextid);
|
|
$this->assertEquals($instanceid, $communicationrecord->instanceid);
|
|
$this->assertEquals($component, $communicationrecord->component);
|
|
$this->assertEquals($selectedcommunication, $communicationrecord->provider);
|
|
$this->assertEquals($communicationroomname, $communicationrecord->roomname);
|
|
$this->assertEquals($instancetype, $communicationrecord->instancetype);
|
|
|
|
// Test against the object.
|
|
$this->assertEquals($context->id, $communicationprocessor->get_context_id());
|
|
$this->assertEquals($context, $communicationprocessor->get_context());
|
|
$this->assertEquals($communicationprocessor->get_id(), $communicationrecord->id);
|
|
$this->assertEquals($communicationprocessor->get_provider(), $communicationrecord->provider);
|
|
$this->assertEquals($communicationprocessor->get_room_name(), $communicationrecord->roomname);
|
|
}
|
|
|
|
/**
|
|
* Test update instance.
|
|
*
|
|
* @covers ::update_instance
|
|
* @covers ::is_instance_active
|
|
* @covers ::get_id
|
|
* @covers ::get_room_name
|
|
*/
|
|
public function test_update_instance(): void {
|
|
global $DB;
|
|
$this->resetAfterTest();
|
|
|
|
// Sameple test data.
|
|
$instanceid = 10;
|
|
$context = \core\context\system::instance();
|
|
$component = 'core';
|
|
$instancetype = 'mycommunication';
|
|
$selectedcommunication = 'communication_matrix';
|
|
$communicationroomname = 'communicationroom';
|
|
|
|
$communicationprocessor = processor::create_instance(
|
|
$context,
|
|
$selectedcommunication,
|
|
$instanceid,
|
|
$component,
|
|
$instancetype,
|
|
$communicationroomname,
|
|
);
|
|
|
|
$selectedcommunication = 'none';
|
|
$communicationroomname = 'communicationroomedited';
|
|
|
|
$communicationprocessor->update_instance(processor::PROVIDER_INACTIVE, $communicationroomname);
|
|
|
|
// Now test the record against the database.
|
|
$communicationrecord = $DB->get_record('communication', [
|
|
'instanceid' => $instanceid,
|
|
'component' => $component,
|
|
'instancetype' => $instancetype,
|
|
]);
|
|
|
|
// Test against the set data.
|
|
$this->assertNotEmpty($communicationrecord);
|
|
$this->assertEquals($context->id, $communicationrecord->contextid);
|
|
$this->assertEquals($instanceid, $communicationrecord->instanceid);
|
|
$this->assertEquals($component, $communicationrecord->component);
|
|
$this->assertEquals(processor::PROVIDER_INACTIVE, $communicationrecord->active);
|
|
$this->assertEquals($communicationroomname, $communicationrecord->roomname);
|
|
$this->assertEquals($instancetype, $communicationrecord->instancetype);
|
|
|
|
// Test against the object.
|
|
$this->assertEquals($context->id, $communicationprocessor->get_context_id());
|
|
$this->assertEquals($context, $communicationprocessor->get_context());
|
|
$this->assertEquals($communicationprocessor->get_id(), $communicationrecord->id);
|
|
$this->assertEquals($communicationprocessor->is_instance_active(), $communicationrecord->active);
|
|
$this->assertEquals($communicationprocessor->get_room_name(), $communicationrecord->roomname);
|
|
}
|
|
|
|
/**
|
|
* Test delete instance.
|
|
*
|
|
* @covers ::delete_instance
|
|
* @covers ::create_instance
|
|
* @covers ::load_by_instance
|
|
*/
|
|
public function test_delete_instance(): void {
|
|
global $DB;
|
|
$this->resetAfterTest();
|
|
|
|
// Sameple test data.
|
|
$instanceid = 10;
|
|
$context = \core\context\system::instance();
|
|
$component = 'core';
|
|
$instancetype = 'mycommunication';
|
|
$selectedcommunication = 'communication_matrix';
|
|
$communicationroomname = 'communicationroom';
|
|
|
|
$communicationprocessor = processor::create_instance(
|
|
$context,
|
|
$selectedcommunication,
|
|
$instanceid,
|
|
$component,
|
|
$instancetype,
|
|
$communicationroomname,
|
|
);
|
|
|
|
$communicationprocessor->delete_instance();
|
|
|
|
// Now test the record against the database.
|
|
$communicationrecord = $DB->get_record('communication', [
|
|
'instanceid' => $instanceid,
|
|
'component' => $component,
|
|
'instancetype' => $instancetype,
|
|
]);
|
|
|
|
// Test against the set data.
|
|
$this->assertEmpty($communicationrecord);
|
|
|
|
// Test against the object.
|
|
$communicationprocessor = processor::load_by_instance(
|
|
context: $context,
|
|
component: $component,
|
|
instancetype: $instancetype,
|
|
instanceid: $instanceid,
|
|
);
|
|
$this->assertNull($communicationprocessor);
|
|
}
|
|
|
|
/**
|
|
* Test load by id.
|
|
*
|
|
* @covers ::load_by_instance
|
|
* @covers ::get_room_provider
|
|
*/
|
|
public function test_load_by_instance(): void {
|
|
$this->resetAfterTest();
|
|
$course = $this->get_course();
|
|
$context = \core\context\course::instance($course->id);
|
|
|
|
// Test the communication record exists.
|
|
$communicationprocessor = processor::load_by_instance(
|
|
context: $context,
|
|
component: 'core_course',
|
|
instancetype: 'coursecommunication',
|
|
instanceid: $course->id,
|
|
);
|
|
|
|
$this->assertNotNull($communicationprocessor);
|
|
$this->assertInstanceOf(communication_provider::class, $communicationprocessor->get_room_provider());
|
|
$this->assertInstanceOf(room_chat_provider::class, $communicationprocessor->get_room_provider());
|
|
$this->assertInstanceOf(room_user_provider::class, $communicationprocessor->get_room_provider());
|
|
$this->assertInstanceOf(user_provider::class, $communicationprocessor->get_room_provider());
|
|
}
|
|
|
|
/**
|
|
* Test load by id.
|
|
*
|
|
* @covers ::load_by_id
|
|
* @covers ::get_room_provider
|
|
* @covers ::load_by_instance
|
|
*/
|
|
public function test_load_by_id(): void {
|
|
$this->resetAfterTest();
|
|
$course = $this->get_course();
|
|
$context = \core\context\course::instance($course->id);
|
|
|
|
// Test the communication record exists.
|
|
$communicationprocessor = processor::load_by_instance(
|
|
context: $context,
|
|
component: 'core_course',
|
|
instancetype: 'coursecommunication',
|
|
instanceid: $course->id,
|
|
);
|
|
|
|
$communicationprocessorbyid = processor::load_by_id($communicationprocessor->get_id());
|
|
|
|
$this->assertNotNull($communicationprocessorbyid);
|
|
$this->assertInstanceOf(communication_provider::class, $communicationprocessorbyid->get_room_provider());
|
|
$this->assertInstanceOf(room_chat_provider::class, $communicationprocessorbyid->get_room_provider());
|
|
$this->assertInstanceOf(room_user_provider::class, $communicationprocessorbyid->get_room_provider());
|
|
$this->assertInstanceOf(user_provider::class, $communicationprocessorbyid->get_room_provider());
|
|
}
|
|
|
|
/**
|
|
* Test get component.
|
|
*
|
|
* @covers ::get_component
|
|
* @covers ::load_by_instance
|
|
*/
|
|
public function test_get_component(): void {
|
|
$this->resetAfterTest();
|
|
$course = $this->get_course();
|
|
$context = \core\context\course::instance($course->id);
|
|
|
|
// Test the communication record exists.
|
|
$communicationprocessor = processor::load_by_instance(
|
|
context: $context,
|
|
component: 'core_course',
|
|
instancetype: 'coursecommunication',
|
|
instanceid: $course->id,
|
|
);
|
|
|
|
$this->assertEquals('core_course', $communicationprocessor->get_component());
|
|
}
|
|
|
|
/**
|
|
* Test get provider.
|
|
*
|
|
* @covers ::get_provider
|
|
* @covers ::load_by_instance
|
|
*/
|
|
public function test_get_provider(): void {
|
|
$this->resetAfterTest();
|
|
$course = $this->get_course();
|
|
$context = \core\context\course::instance($course->id);
|
|
|
|
// Test the communication record exists when fetching the active provider.
|
|
$communicationprocessor = processor::load_by_instance(
|
|
context: $context,
|
|
component: 'core_course',
|
|
instancetype: 'coursecommunication',
|
|
instanceid: $course->id,
|
|
);
|
|
|
|
$this->assertEquals('communication_matrix', $communicationprocessor->get_provider());
|
|
|
|
// Test the communication record exists when specifying the provider.
|
|
$communicationprocessor = processor::load_by_instance(
|
|
context: $context,
|
|
component: 'core_course',
|
|
instancetype: 'coursecommunication',
|
|
instanceid: $course->id,
|
|
provider: 'communication_matrix',
|
|
);
|
|
|
|
$this->assertEquals('communication_matrix', $communicationprocessor->get_provider());
|
|
|
|
// Test the communication record exists when the provider is not active.
|
|
$communicationprocessor->update_instance(processor::PROVIDER_INACTIVE);
|
|
$communicationprocessor = processor::load_by_instance(
|
|
context: $context,
|
|
component: 'core_course',
|
|
instancetype: 'coursecommunication',
|
|
instanceid: $course->id,
|
|
provider: 'communication_matrix',
|
|
);
|
|
|
|
$this->assertEquals('communication_matrix', $communicationprocessor->get_provider());
|
|
}
|
|
|
|
/**
|
|
* Test get room name.
|
|
*
|
|
* @covers ::get_room_name
|
|
* @covers ::load_by_instance
|
|
*/
|
|
public function test_get_room_name(): void {
|
|
$this->resetAfterTest();
|
|
$course = $this->get_course();
|
|
$context = \core\context\course::instance($course->id);
|
|
|
|
// Test the communication record exists.
|
|
$communicationprocessor = processor::load_by_instance(
|
|
context: $context,
|
|
component: 'core_course',
|
|
instancetype: 'coursecommunication',
|
|
instanceid: $course->id,
|
|
);
|
|
|
|
$this->assertEquals('Sampleroom', $communicationprocessor->get_room_name());
|
|
}
|
|
|
|
/**
|
|
* Test get room provider.
|
|
*
|
|
* @covers ::get_room_provider
|
|
* @covers ::require_room_features
|
|
* @covers ::supports_room_features
|
|
* @covers ::load_by_instance
|
|
*/
|
|
public function test_get_room_provider(): void {
|
|
$this->resetAfterTest();
|
|
$course = $this->get_course();
|
|
$context = \core\context\course::instance($course->id);
|
|
|
|
// Test the communication record exists.
|
|
$communicationprocessor = processor::load_by_instance(
|
|
context: $context,
|
|
component: 'core_course',
|
|
instancetype: 'coursecommunication',
|
|
instanceid: $course->id,
|
|
);
|
|
|
|
$this->assertInstanceOf(room_chat_provider::class, $communicationprocessor->get_room_provider());
|
|
}
|
|
|
|
/**
|
|
* Test get user provider.
|
|
*
|
|
* @covers ::get_user_provider
|
|
* @covers ::require_user_features
|
|
* @covers ::supports_user_features
|
|
* @covers ::load_by_instance
|
|
*/
|
|
public function test_get_user_provider(): void {
|
|
$this->resetAfterTest();
|
|
$course = $this->get_course();
|
|
$context = \core\context\course::instance($course->id);
|
|
|
|
// Test the communication record exists.
|
|
$communicationprocessor = processor::load_by_instance(
|
|
context: $context,
|
|
component: 'core_course',
|
|
instancetype: 'coursecommunication',
|
|
instanceid: $course->id,
|
|
);
|
|
|
|
$this->assertInstanceOf(user_provider::class, $communicationprocessor->get_room_provider());
|
|
}
|
|
|
|
/**
|
|
* Test get room user provider.
|
|
*
|
|
* @covers ::get_room_user_provider
|
|
* @covers ::require_room_features
|
|
* @covers ::require_room_user_features
|
|
* @covers ::supports_room_user_features
|
|
* @covers ::supports_room_features
|
|
* @covers ::load_by_instance
|
|
*/
|
|
public function test_get_room_user_provider(): void {
|
|
$this->resetAfterTest();
|
|
$course = $this->get_course();
|
|
$context = \core\context\course::instance($course->id);
|
|
|
|
// Test the communication record exists.
|
|
$communicationprocessor = processor::load_by_instance(
|
|
context: $context,
|
|
component: 'core_course',
|
|
instancetype: 'coursecommunication',
|
|
instanceid: $course->id,
|
|
);
|
|
|
|
$this->assertInstanceOf(room_user_provider::class, $communicationprocessor->get_room_user_provider());
|
|
}
|
|
|
|
/**
|
|
* Test get avatar.
|
|
*
|
|
* @covers ::get_avatar
|
|
* @covers ::load_by_instance
|
|
* @covers ::get_avatar_filename
|
|
* @covers ::set_avatar_filename
|
|
* @covers ::set_avatar_synced_flag
|
|
*/
|
|
public function test_get_avatar(): void {
|
|
$this->resetAfterTest();
|
|
$this->setAdminUser();
|
|
|
|
global $CFG;
|
|
$course = $this->get_course('Sampleroom', 'none');
|
|
|
|
// Sample data.
|
|
$communicationroomname = 'Sampleroom';
|
|
$selectedcommunication = 'communication_matrix';
|
|
$avatar = $this->create_communication_file(
|
|
'moodle_logo.jpg',
|
|
'moodle_logo.jpg',
|
|
);
|
|
|
|
$communication = \core_communication\api::load_by_instance(
|
|
context: \core\context\course::instance($course->id),
|
|
component: 'core_course',
|
|
instancetype: 'coursecommunication',
|
|
instanceid: $course->id,
|
|
provider: $selectedcommunication,
|
|
);
|
|
$communication->create_and_configure_room($communicationroomname, $avatar);
|
|
|
|
$communicationprocessor = processor::load_by_instance(
|
|
context: \core\context\course::instance($course->id),
|
|
component: 'core_course',
|
|
instancetype: 'coursecommunication',
|
|
instanceid: $course->id,
|
|
);
|
|
|
|
$avatar = $communicationprocessor->get_avatar();
|
|
|
|
$this->assertNotNull($avatar);
|
|
$this->assertEquals($avatar->get_component(), 'core_communication');
|
|
$this->assertEquals($avatar->get_filearea(), 'avatar');
|
|
$this->assertEquals($avatar->get_itemid(), $communicationprocessor->get_id());
|
|
$this->assertEquals($avatar->get_filepath(), '/');
|
|
$this->assertEquals($avatar->get_filearea(), 'avatar');
|
|
$this->assertEquals($avatar->get_filename(), $communicationprocessor->get_avatar_filename());
|
|
|
|
// Change the avatar file name to something else and check it was set.
|
|
$communicationprocessor->set_avatar_filename('newname.svg');
|
|
|
|
$communicationprocessor = processor::load_by_instance(
|
|
context: \core\context\course::instance($course->id),
|
|
component: 'core_course',
|
|
instancetype: 'coursecommunication',
|
|
instanceid: $course->id,
|
|
);
|
|
$this->assertEquals($communicationprocessor->get_avatar_filename(), 'newname.svg');
|
|
}
|
|
|
|
/**
|
|
* Test if the provider is enabled and configured, or disabled.
|
|
*
|
|
* @covers ::is_provider_available
|
|
*/
|
|
public function test_is_provider_available(): void {
|
|
$this->resetAfterTest();
|
|
$communicationprovider = 'communication_matrix';
|
|
$this->assertTrue(processor::is_provider_available($communicationprovider));
|
|
|
|
// Now test is disabling the plugin returns false.
|
|
set_config('disabled', 1, $communicationprovider);
|
|
$this->assertFalse(processor::is_provider_available($communicationprovider));
|
|
}
|
|
|
|
/**
|
|
* Test delete flagged user id's return correct users.
|
|
*
|
|
* @covers ::get_all_delete_flagged_userids
|
|
*/
|
|
public function test_get_all_delete_flagged_userids(): void {
|
|
$this->resetAfterTest();
|
|
|
|
$course = $this->get_course('Sampleroom', 'none');
|
|
$user1 = $this->getDataGenerator()->create_user()->id;
|
|
$user2 = $this->getDataGenerator()->create_user()->id;
|
|
|
|
// Sample data.
|
|
$communicationroomname = 'Sampleroom';
|
|
$selectedcommunication = 'communication_matrix';
|
|
$component = 'core_course';
|
|
$instancetype = 'coursecommunication';
|
|
|
|
// Load the communication api.
|
|
$communication = \core_communication\api::load_by_instance(
|
|
context: \core\context\course::instance($course->id),
|
|
component: $component,
|
|
instancetype: $instancetype,
|
|
instanceid: $course->id,
|
|
provider: $selectedcommunication,
|
|
);
|
|
$communication->create_and_configure_room($communicationroomname);
|
|
$communication->add_members_to_room([$user1, $user2]);
|
|
|
|
// Now remove user1 from the room.
|
|
$communication->remove_members_from_room([$user1]);
|
|
|
|
// Test against the object.
|
|
$communicationprocessor = processor::load_by_instance(
|
|
context: \core\context\course::instance($course->id),
|
|
component: $component,
|
|
instancetype: $instancetype,
|
|
instanceid: $course->id,
|
|
);
|
|
|
|
$this->assertEquals([$user1], $communicationprocessor->get_all_delete_flagged_userids());
|
|
}
|
|
}
|