AutorÃa | 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/>.declare(strict_types=1);namespace core_badges;/*** Unit tests for backpack_api class.** @package core_badges* @copyright 2025 Sara Arjona <sara@moodle.com>* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later*/#[\PHPUnit\Framework\Attributes\CoversClass(backpack_api::class)]final class backpack_api_test extends \advanced_testcase {/*** Test get_providers function.*/public function test_get_providers(): void {global $CFG;$providers = backpack_api::get_providers();$this->assertCount(2, $providers);$this->assertArrayHasKey(backpack_api::PROVIDER_CANVAS_CREDENTIALS, $providers);$this->assertArrayHasKey(backpack_api::PROVIDER_OTHER, $providers);}/*** Test get_regions function.*/public function test_get_regions(): void {global $CFG;$this->resetAfterTest();// Default: 5 regions (Canvas Credentials).$regions = backpack_api::get_regions();$this->assertCount(5, $regions);// No regions.$CFG->badges_canvasregions = '';$regions = backpack_api::get_regions();$this->assertEmpty($regions);// One region.$CFG->badges_canvasregions = 'Australia|https://au.badgr.io|https://api.au.badgr.io/v2';$regions = backpack_api::get_regions();$this->assertCount(1, $regions);$this->assertEquals('Australia', $regions[0]['name']);$this->assertEquals('https://au.badgr.io', $regions[0]['url']);$this->assertEquals('https://api.au.badgr.io/v2', $regions[0]['apiurl']);// Two regions + empty lines + invalid line.$CFG->badges_canvasregions = "\nUnited States|https://badgr.io|https://api.badgr.io/v2\ninvalidline\n" .'Europe|https://eu.badgr.io|https://api.eu.badgr.io/v2' . "\n";$regions = backpack_api::get_regions();$this->assertCount(2, $regions);$expected = [['name' => 'United States','url' => 'https://badgr.io','apiurl' => 'https://api.badgr.io/v2',],['name' => 'Europe','url' => 'https://eu.badgr.io','apiurl' => 'https://api.eu.badgr.io/v2',],];$this->assertEquals($expected, $regions);}/*** Test display_canvas_credentials_fields function.*/public function test_display_canvas_credentials_fields(): void {global $CFG;$this->resetAfterTest();// By default, the fields should be displayed (5 regions).$this->assertTrue(backpack_api::display_canvas_credentials_fields());// No regions configured, fields should not be displayed.$CFG->badges_canvasregions = '';$this->assertFalse(backpack_api::display_canvas_credentials_fields());// One region configured, fields should be displayed.$CFG->badges_canvasregions = 'Australia|https://au.badgr.io|https://api.au.badgr.io/v2';$this->assertTrue(backpack_api::display_canvas_credentials_fields());}/*** Test get_region_url and get_region_api_url functions.*/public function test_get_region_urls(): void {global $CFG;$this->resetAfterTest();// Default: 5 regions (Canvas Credentials).$regions = backpack_api::get_regions();$this->assertCount(5, $regions);$this->assertEquals('https://au.badgr.io', backpack_api::get_region_url(0));$this->assertEquals('https://ca.badgr.io', backpack_api::get_region_url(1));$this->assertEquals('https://eu.badgr.io', backpack_api::get_region_url(2));$this->assertEquals('https://sg.badgr.io', backpack_api::get_region_url(3));$this->assertEquals('https://badgr.io', backpack_api::get_region_url(4));$this->assertEquals('https://api.au.badgr.io/v2', backpack_api::get_region_api_url(0));$this->assertEquals('https://api.ca.badgr.io/v2', backpack_api::get_region_api_url(1));$this->assertEquals('https://api.eu.badgr.io/v2', backpack_api::get_region_api_url(2));$this->assertEquals('https://api.sg.badgr.io/v2', backpack_api::get_region_api_url(3));$this->assertEquals('https://api.badgr.io/v2', backpack_api::get_region_api_url(4));// Wrong index.$this->assertNull(backpack_api::get_region_url(10));$this->assertNull(backpack_api::get_region_api_url(10));// No regions.$CFG->badges_canvasregions = '';$this->assertNull(backpack_api::get_region_url(0));$this->assertNull(backpack_api::get_region_api_url(0));}/*** Test get_regionid_from_url function.*/public function test_get_regionid_from_url(): void {global $CFG;$this->resetAfterTest();// Default: 5 regions (Canvas Credentials).$regions = backpack_api::get_regions();$this->assertCount(5, $regions);$this->assertEquals(0, backpack_api::get_regionid_from_url('https://au.badgr.io'));$this->assertEquals(1, backpack_api::get_regionid_from_url('https://ca.badgr.io'));$this->assertEquals(2, backpack_api::get_regionid_from_url('https://eu.badgr.io'));$this->assertEquals(3, backpack_api::get_regionid_from_url('https://sg.badgr.io'));$this->assertEquals(4, backpack_api::get_regionid_from_url('https://badgr.io'));// Test with trailing slash.$this->assertEquals(0, backpack_api::get_regionid_from_url('https://au.badgr.io/'));// Wrong URL.$this->assertEquals(4, backpack_api::get_regionid_from_url('https://unknown.badgr.io'));// One region.$CFG->badges_canvasregions = 'Australia|https://au.badgr.io|https://api.au.badgr.io/v2';$regions = backpack_api::get_regions();$this->assertEquals(0, backpack_api::get_regionid_from_url('https://au.badgr.io'));// No regions.$CFG->badges_canvasregions = '';$this->assertEquals(backpack_api::REGION_EMPTY, backpack_api::get_regionid_from_url('https://au.badgr.io'));}/*** Test is_canvas_credentials_region function.*/public function test_is_canvas_credentials_region(): void {global $CFG;$this->resetAfterTest();// Default: 5 regions (Canvas Credentials).$regions = backpack_api::get_regions();$this->assertCount(5, $regions);$this->assertTrue(backpack_api::is_canvas_credentials_region('https://au.badgr.io'));$this->assertTrue(backpack_api::is_canvas_credentials_region('https://ca.badgr.io'));$this->assertTrue(backpack_api::is_canvas_credentials_region('https://eu.badgr.io'));$this->assertTrue(backpack_api::is_canvas_credentials_region('https://sg.badgr.io'));$this->assertTrue(backpack_api::is_canvas_credentials_region('https://badgr.io'));// Non Canvas URL.$this->assertFalse(backpack_api::is_canvas_credentials_region('https://unknown.badgr.io'));// No regions.$CFG->badges_canvasregions = '';$this->assertFalse(backpack_api::is_canvas_credentials_region('https://au.badgr.io'));}}