Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions src/Providers/ModuleServiceProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Str;
use InterNACHI\Modular\Support\ModuleRegistry;
use Saucebase\Core\CoreServiceProvider;

abstract class ModuleServiceProvider extends ServiceProvider
{
Expand Down Expand Up @@ -37,6 +38,11 @@ public function boot(): void
*/
public function register(): void
{
// Laravel registers discovered packages alphabetically, so a module named
// before "core" gets here first and moduleName() would find no registry.
// Registering an already-registered provider is a no-op.
$this->app->register(CoreServiceProvider::class);

// Config is merged here rather than in boot() because every register() runs
// before any boot(): a provider that reads a module's config while booting —
// Filament resolving its panels, for one — would otherwise race the merge and
Expand Down
27 changes: 27 additions & 0 deletions tests/Feature/ModuleBootOrderTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<?php

namespace Saucebase\Core\Tests\Feature;

use Saucebase\Core\Tests\Concerns\InteractsWithFixtureModules;
use Saucebase\Core\Tests\TestCase;

/**
* A module registers before core when its package name sorts first.
*
* Laravel registers discovered packages alphabetically, so `saucebase/auth` reaches
* its provider's register() before `saucebase/core` has bound the module registry.
*/
class ModuleBootOrderTest extends TestCase
{
use InteractsWithFixtureModules;

protected function getPackageProviders($app): array
{
return [...$this->fixtureModuleProviders(), ...parent::getPackageProviders($app)];
}

public function test_a_module_registered_before_core_still_merges_its_config(): void
{
$this->assertSame('Module Test Fixture', config('module-test-fixture.name'));
}
}
Loading