| Línea 15... | Línea 15... | 
          
            | 15 | // along with Moodle.  If not, see <https://www.gnu.org/licenses/>.
 | 15 | // along with Moodle.  If not, see <https://www.gnu.org/licenses/>.
 | 
          
            | Línea 16... | Línea 16... | 
          
            | 16 |  
 | 16 |  
 | 
          
            | Línea 17... | Línea 17... | 
          
            | 17 | namespace core\hook;
 | 17 | namespace core\hook;
 | 
          
            | - |   | 18 |  
 | 
          
            | Línea 18... | Línea 19... | 
          
            | 18 |  
 | 19 | use core\di;
 | 
          
            | 19 | use core\di;
 | 20 | use core\tests\fake_plugins_test_trait;
 | 
          
            | 20 |  
 | 21 |  
 | 
          
            | 21 | /**
 | 22 | /**
 | 
          
            | Línea 26... | Línea 27... | 
          
            | 26 |  * @copyright 2022 Open LMS
 | 27 |  * @copyright 2022 Open LMS
 | 
          
            | 27 |  * @license   https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 | 28 |  * @license   https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 | 
          
            | 28 |  * @covers \core\hook\manager
 | 29 |  * @covers \core\hook\manager
 | 
          
            | 29 |  */
 | 30 |  */
 | 
          
            | 30 | final class manager_test extends \advanced_testcase {
 | 31 | final class manager_test extends \advanced_testcase {
 | 
          
            | - |   | 32 |  
 | 
          
            | - |   | 33 |     use fake_plugins_test_trait;
 | 
          
            | - |   | 34 |  
 | 
          
            | 31 |     /**
 | 35 |     /**
 | 
          
            | 32 |      * Test public factory method to get hook manager.
 | 36 |      * Test public factory method to get hook manager.
 | 
          
            | 33 |      */
 | 37 |      */
 | 
          
            | 34 |     public function test_get_instance(): void {
 | 38 |     public function test_get_instance(): void {
 | 
          
            | 35 |         $manager = manager::get_instance();
 | 39 |         $manager = manager::get_instance();
 | 
          
            | Línea 346... | Línea 350... | 
          
            | 346 |         // Confirm the deprecated callback is called as expected.
 | 350 |         // Confirm the deprecated callback is called as expected.
 | 
          
            | 347 |         $this->assertEquals(
 | 351 |         $this->assertEquals(
 | 
          
            | 348 |             'Called deprecated callback',
 | 352 |             'Called deprecated callback',
 | 
          
            | 349 |             component_callback('fake_hooktest', 'old_callback', [], null, true)
 | 353 |             component_callback('fake_hooktest', 'old_callback', [], null, true)
 | 
          
            | 350 |         );
 | 354 |         );
 | 
          
            | - |   | 355 |         $this->assertDebuggingNotCalled();
 | 
          
            | - |   | 356 |  
 | 
          
            | - |   | 357 |         // Forcefully modify the PHPUnit flag on the manager to ensure the debugging message is output.
 | 
          
            | - |   | 358 |         $manager = di::get(manager::class);
 | 
          
            | - |   | 359 |         $rp = new \ReflectionProperty($manager, 'phpunit');
 | 
          
            | - |   | 360 |         $rp->setValue($manager, false);
 | 
          
            | - |   | 361 |  
 | 
          
            | - |   | 362 |         component_callback('fake_hooktest', 'old_callback', [], null, true);
 | 
          
            | - |   | 363 |  
 | 
          
            | 351 |         $this->assertDebuggingCalled(
 | 364 |         $this->assertDebuggingCalled(
 | 
          
            | 352 |             'Callback old_callback in fake_hooktest component should be migrated to new hook ' .
 | 365 |             'Callback old_callback in fake_hooktest component should be migrated to new hook ' .
 | 
          
            | 353 |                 'callback for fake_hooktest\hook\hook_replacing_callback'
 | 366 |                 'callback for fake_hooktest\hook\hook_replacing_callback',
 | 
          
            | 354 |         );
 | 367 |         );
 | 
          
            | 355 |     }
 | 368 |     }
 | 
          
            | Línea 356... | Línea 369... | 
          
            | 356 |  
 | 369 |  
 | 
          
            | 357 |     /**
 | 370 |     /**
 | 
          
            | Línea 419... | Línea 432... | 
          
            | 419 |         // Confirm the deprecated class callback is called as expected.
 | 432 |         // Confirm the deprecated class callback is called as expected.
 | 
          
            | 420 |         $this->assertEquals(
 | 433 |         $this->assertEquals(
 | 
          
            | 421 |             'Called deprecated class callback',
 | 434 |             'Called deprecated class callback',
 | 
          
            | 422 |             component_class_callback('fake_hooktest\callbacks', 'old_class_callback', [], null, true)
 | 435 |             component_class_callback('fake_hooktest\callbacks', 'old_class_callback', [], null, true)
 | 
          
            | 423 |         );
 | 436 |         );
 | 
          
            | - |   | 437 |         $this->assertDebuggingNotCalled();
 | 
          
            | - |   | 438 |  
 | 
          
            | - |   | 439 |         // Forcefully modify the PHPUnit flag on the manager to ensure the debugging message is output.
 | 
          
            | - |   | 440 |         $manager = di::get(manager::class);
 | 
          
            | - |   | 441 |         $rp = new \ReflectionProperty($manager, 'phpunit');
 | 
          
            | - |   | 442 |         $rp->setValue($manager, false);
 | 
          
            | - |   | 443 |  
 | 
          
            | - |   | 444 |         component_class_callback('fake_hooktest\callbacks', 'old_class_callback', [], null, true);
 | 
          
            | 424 |         $this->assertDebuggingCalled(
 | 445 |         $this->assertDebuggingCalled(
 | 
          
            | 425 |             'Callback callbacks::old_class_callback in fake_hooktest component should be migrated to new hook ' .
 | 446 |             'Callback callbacks::old_class_callback in fake_hooktest component should be migrated to new hook ' .
 | 
          
            | 426 |                 'callback for fake_hooktest\hook\hook_replacing_class_callback'
 | 447 |                 'callback for fake_hooktest\hook\hook_replacing_class_callback',
 | 
          
            | 427 |         );
 | 448 |         );
 | 
          
            | 428 |     }
 | 449 |     }
 | 
          
            | Línea 429... | Línea 450... | 
          
            | 429 |  
 | 450 |  
 | 
          
            | 430 |     /**
 | 451 |     /**
 | 
          
            | Línea 463... | Línea 484... | 
          
            | 463 |         $this->assertNull(component_class_callback('fake_hooktest\callbacks', 'old_class_callback', [], null, true));
 | 484 |         $this->assertNull(component_class_callback('fake_hooktest\callbacks', 'old_class_callback', [], null, true));
 | 
          
            | 464 |         $this->assertDebuggingNotCalled();
 | 485 |         $this->assertDebuggingNotCalled();
 | 
          
            | 465 |     }
 | 486 |     }
 | 
          
            | Línea 466... | Línea 487... | 
          
            | 466 |  
 | 487 |  
 | 
          
            | - |   | 488 |     /**
 | 
          
            | - |   | 489 |      * Test verifying that callbacks for deprecated plugins are not returned and hook dispatching won't call into these plugins.
 | 
          
            | - |   | 490 |      *
 | 
          
            | - |   | 491 |      * @runInSeparateProcess
 | 
          
            | - |   | 492 |      * @return void
 | 
          
            | - |   | 493 |      */
 | 
          
            | - |   | 494 |     public function test_get_callbacks_for_hook_deprecated_plugintype(): void {
 | 
          
            | - |   | 495 |         $this->resetAfterTest();
 | 
          
            | - |   | 496 |  
 | 
          
            | - |   | 497 |         // Inject the fixture 'fake' plugin type into component sources, which includes a single 'fake_fullfeatured' plugin.
 | 
          
            | - |   | 498 |         // This 'fake_fullfeatured' plugin is an available plugin at this stage (not yet deprecated).
 | 
          
            | - |   | 499 |         $this->add_full_mocked_plugintype(
 | 
          
            | - |   | 500 |             plugintype: 'fake',
 | 
          
            | - |   | 501 |             path: 'lib/tests/fixtures/fakeplugins/fake',
 | 
          
            | - |   | 502 |         );
 | 
          
            | - |   | 503 |  
 | 
          
            | - |   | 504 |         // Force reset the static instance cache \core\hook\manager::$instance so that a fresh instance is instantiated, ensuring
 | 
          
            | - |   | 505 |         // the component lists are re-run and the hook manager can see the injected mock plugin and it's callbacks.
 | 
          
            | - |   | 506 |         // Note: we can't use \core\hook\manager::phpunit_get_instance() because that doesn't load in component callbacks from disk.
 | 
          
            | - |   | 507 |         $hookmanrc = new \ReflectionClass(\core\hook\manager::class);
 | 
          
            | - |   | 508 |         $hookmanrc->setStaticPropertyValue('instance', null);
 | 
          
            | - |   | 509 |         $manager = \core\hook\manager::get_instance();
 | 
          
            | - |   | 510 |  
 | 
          
            | - |   | 511 |         // Get all registered callbacks for the hook listened to by the mock plugin (after_course_created).
 | 
          
            | - |   | 512 |         $listeners = $manager->get_callbacks_for_hook(\core_course\hook\after_course_created::class);
 | 
          
            | - |   | 513 |         $componentswithcallbacks = array_column($listeners, 'component');
 | 
          
            | - |   | 514 |  
 | 
          
            | - |   | 515 |         // Verify the available mock plugin is returned as a listener.
 | 
          
            | - |   | 516 |         $this->assertContains('fake_fullfeatured', $componentswithcallbacks);
 | 
          
            | - |   | 517 |  
 | 
          
            | - |   | 518 |         // Deprecate the 'fake' plugin type.
 | 
          
            | - |   | 519 |         $this->deprecate_full_mocked_plugintype('fake');
 | 
          
            | - |   | 520 |  
 | 
          
            | - |   | 521 |         // Force a fresh plugin manager instance, again to ensure the up-to-date component lists are used.
 | 
          
            | - |   | 522 |         $hookmanrc->setStaticPropertyValue('instance', null);
 | 
          
            | - |   | 523 |         $manager = \core\hook\manager::get_instance();
 | 
          
            | - |   | 524 |  
 | 
          
            | - |   | 525 |         // And verify the plugin is now not returned as a listener, since it's deprecated.
 | 
          
            | - |   | 526 |         $listeners = $manager->get_callbacks_for_hook(\core_course\hook\after_course_created::class);
 | 
          
            | - |   | 527 |         $componentswithcallbacks = array_column($listeners, 'component');
 | 
          
            | - |   | 528 |         $this->assertNotContains('fake_fullfeatured', $componentswithcallbacks);
 | 
          
            | - |   | 529 |     }
 | 
          
            | - |   | 530 |  
 | 
          
            | 467 |     /**
 | 531 |     /**
 | 
          
            | 468 |      * Normalise the sort order of callbacks to help with asserts.
 | 532 |      * Normalise the sort order of callbacks to help with asserts.
 | 
          
            | 469 |      *
 | 533 |      *
 | 
          
            | 470 |      * @param array $callbacks
 | 534 |      * @param array $callbacks
 | 
          
            | 471 |      */
 | 535 |      */
 |