From a234dab130a78c54f0c79d3ff18781e9db0d52d4 Mon Sep 17 00:00:00 2001 From: wakqasahmed Date: Tue, 8 Sep 2026 20:49:41 +0200 Subject: [PATCH] fix(testing): register extenders before enabling test extensions OverrideExtensionManagerForTests called enable() before extend(), so any resolving() callback an extender registers on ExtensionManager during extend() (e.g. Extend\Locales, which hooks LocaleManager) was registered too late -- enable() had already resolved the singleton via onEnable(), and a resolving() callback never fires retroactively. In practice this meant extension-shipped locale files never loaded into the translator during integration tests. Registering extenders first fixes that, but naively also moving enable() after 'booted = true' breaks isEnabled()'s early return in ExtensionManagerIncludeCurrent, which gates on booted specifically so enable() runs its full body (migrations, assets, Enabling/Enabled events) instead of being treated as already enabled. So this toggles booted off again around the enable() loop, then back on once it's done -- extenders are registered first, but enable()'s own internal ordering (dependency check, migrate, publish assets, persist enabled state, onEnable(), dispatch Enabled) is unchanged. Added a regression test: a fake extension shipping a locale file via Extend\Locales, asserting its translation key resolves to the real value instead of being echoed back. --- .../Extend/OverrideExtensionManagerForTests.php | 8 ++++++-- php-packages/testing/tests/extend.php | 1 + php-packages/testing/tests/locale/en.yml | 2 ++ .../testing/tests/tests/integration/TestCaseTest.php | 11 +++++++++++ 4 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 php-packages/testing/tests/locale/en.yml diff --git a/php-packages/testing/src/integration/Extend/OverrideExtensionManagerForTests.php b/php-packages/testing/src/integration/Extend/OverrideExtensionManagerForTests.php index 3e1b988074..75664cdd1d 100644 --- a/php-packages/testing/src/integration/Extend/OverrideExtensionManagerForTests.php +++ b/php-packages/testing/src/integration/Extend/OverrideExtensionManagerForTests.php @@ -34,13 +34,17 @@ public function extend(Container $container, ?Extension $extension = null): void $container->singleton(ExtensionManager::class, ExtensionManagerIncludeCurrent::class); $extensionManager = $container->make(ExtensionManager::class); + $extensionManager->booted = true; + $extensionManager->extend($container); + + // Let enable() run instead of treating the test-selected extensions as already enabled. + $extensionManager->booted = false; + foreach ($this->extensions as $extension) { $extensionManager->enable($extension); } $extensionManager->booted = true; - - $extensionManager->extend($container); } } } diff --git a/php-packages/testing/tests/extend.php b/php-packages/testing/tests/extend.php index 5e6c674727..f037db5189 100644 --- a/php-packages/testing/tests/extend.php +++ b/php-packages/testing/tests/extend.php @@ -12,6 +12,7 @@ use Flarum\Extend; return [ + new Extend\Locales(__DIR__.'/locale'), (new Extend\Settings)->serializeToForum('notARealSetting', 'not.a.real.setting'), (new Extend\Frontend('forum'))->route('/added-by-extension', 'added-by-extension') ]; diff --git a/php-packages/testing/tests/locale/en.yml b/php-packages/testing/tests/locale/en.yml new file mode 100644 index 0000000000..b9eba9cbf1 --- /dev/null +++ b/php-packages/testing/tests/locale/en.yml @@ -0,0 +1,2 @@ +flarum-testing-tests: + test: Translation from extension diff --git a/php-packages/testing/tests/tests/integration/TestCaseTest.php b/php-packages/testing/tests/tests/integration/TestCaseTest.php index 90523ac20c..173407273b 100644 --- a/php-packages/testing/tests/tests/integration/TestCaseTest.php +++ b/php-packages/testing/tests/tests/integration/TestCaseTest.php @@ -12,6 +12,7 @@ use Flarum\Extend; use Flarum\Extension\ExtensionManager; use Flarum\Foundation\Config; +use Flarum\Locale\Translator; use Flarum\Settings\DefaultSettingsRepository; use Flarum\Settings\SettingsRepositoryInterface; use Flarum\Testing\integration\TestCase; @@ -121,6 +122,16 @@ public function current_extension_considered_enabled_after_boot() $this->assertTrue($enabled); } + #[Test] + public function current_extension_locales_applied_if_specified() + { + $this->extension('flarum-testing-tests'); + + $translator = $this->app()->getContainer()->make(Translator::class); + + $this->assertEquals('Translation from extension', $translator->trans('flarum-testing-tests.test')); + } + #[Test] public function can_apply_extenders() {