diff --git a/lib/tests/external/test_poll_stored_progress.php b/lib/tests/external/test_poll_stored_progress.php new file mode 100644 index 0000000000000..ed167bfd66ff9 --- /dev/null +++ b/lib/tests/external/test_poll_stored_progress.php @@ -0,0 +1,64 @@ +. +namespace core\external; + +/** + * Unit tests for poll_stored_progress + * + * @package core + * @copyright 2024 onwards Catalyst IT EU {@link https://catalyst-eu.net} + * @author Mark Johnson + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @covers core\external\poll_stored_progress + */ +class test_poll_stored_progress extends \advanced_testcase { + /** + * Throw an exception if the wrong data type is passed for an ID. + */ + public function test_execute_invalid_id(): void { + $debuginfo = 'Invalid external api parameter: the value is "foo", the server was expecting "int" type'; + $pollstoredprogress = new poll_stored_progress(); + $this->expectExceptionObject(new \invalid_parameter_exception($debuginfo)); + $pollstoredprogress->execute(['foo']); + } + + /** + * Passing a list of IDs returns a corresponding list of records. + */ + public function test_execute(): void { + $this->resetAfterTest(); + $generator = $this->getDataGenerator(); + $progress1 = $generator->create_stored_progress(); + $progress2 = $generator->create_stored_progress(); + $falseid = $progress2->id + 1; + + $ids = [ + $progress1->id, + $progress2->id, + $falseid, + ]; + + $pollstoredprogress = new poll_stored_progress(); + $result = $pollstoredprogress->execute($ids); + + $this->assertEquals($progress1->id, $result[$progress1->id]['id']); + $this->assertEquals($progress1->idnumber, $result[$progress1->id]['uniqueid']); + $this->assertEquals($progress2->id, $result[$progress2->id]['id']); + $this->assertEquals($progress2->idnumber, $result[$progress2->id]['uniqueid']); + $this->assertEquals($falseid, $result[$falseid]['id']); + $this->assertEmpty($result[$falseid]['uniqueid']); // Empty when no matching record is found. + } +} \ No newline at end of file