|
8 | 8 | use Stancl\Tenancy\Events\TenancyInitialized; |
9 | 9 | use Stancl\Tenancy\Listeners\BootstrapTenancy; |
10 | 10 | use Stancl\Tenancy\Listeners\RevertToCentralContext; |
11 | | -use Stancl\Tenancy\Bootstrappers\LogTenancyBootstrapper; |
| 11 | +use Stancl\Tenancy\Bootstrappers\LogChannelBootstrapper; |
12 | 12 | use Stancl\Tenancy\Bootstrappers\FilesystemTenancyBootstrapper; |
13 | 13 | use Illuminate\Support\Facades\Log; |
14 | 14 |
|
15 | 15 | afterEach($cleanup = function () { |
16 | | - LogTenancyBootstrapper::$channelOverrides = []; |
17 | | - LogTenancyBootstrapper::$storagePathChannels = ['single', 'daily']; |
| 16 | + LogChannelBootstrapper::$channelOverrides = []; |
| 17 | + LogChannelBootstrapper::$storagePathChannels = ['single', 'daily']; |
18 | 18 |
|
19 | 19 | $logFiles = array_merge( |
20 | 20 | glob(storage_path('logs/*.log')) ?: [], |
|
31 | 31 | beforeEach(function () use ($cleanup) { |
32 | 32 | config([ |
33 | 33 | 'tenancy.bootstrappers' => [ |
34 | | - LogTenancyBootstrapper::class, |
| 34 | + LogChannelBootstrapper::class, |
35 | 35 | ], |
36 | 36 | ]); |
37 | 37 |
|
|
42 | 42 | }); |
43 | 43 |
|
44 | 44 | test('storage path channels get tenant-specific paths by default', function () { |
45 | | - // Note that for LogTenancyBootstrapper to change the paths correctly by default, |
| 45 | + // Note that for LogChannelBootstrapper to change the paths correctly by default, |
46 | 46 | // the bootstrapper MUST run after FilesystemTenancyBootstrapper. |
47 | 47 | config([ |
48 | 48 | 'tenancy.bootstrappers' => [ |
49 | 49 | FilesystemTenancyBootstrapper::class, |
50 | | - LogTenancyBootstrapper::class, |
| 50 | + LogChannelBootstrapper::class, |
51 | 51 | ], |
52 | 52 | ]); |
53 | 53 |
|
54 | 54 | $centralStoragePath = storage_path(); |
55 | 55 | $tenant = Tenant::create(); |
56 | 56 |
|
57 | 57 | // Storage path channels are 'single' and 'daily' by default. |
58 | | - // This can be customized via LogTenancyBootstrapper::$storagePathChannels. |
59 | | - foreach (LogTenancyBootstrapper::$storagePathChannels as $channel) { |
| 58 | + // This can be customized via LogChannelBootstrapper::$storagePathChannels. |
| 59 | + foreach (LogChannelBootstrapper::$storagePathChannels as $channel) { |
60 | 60 | $originalPath = config("logging.channels.{$channel}.path"); |
61 | 61 |
|
62 | 62 | tenancy()->initialize($tenant); |
|
78 | 78 | config([ |
79 | 79 | 'tenancy.bootstrappers' => [ |
80 | 80 | FilesystemTenancyBootstrapper::class, |
81 | | - LogTenancyBootstrapper::class, |
| 81 | + LogChannelBootstrapper::class, |
82 | 82 | ], |
83 | 83 | 'logging.channels.stack' => [ |
84 | 84 | 'driver' => 'stack', |
|
132 | 132 | $tenant = Tenant::create(['webhookUrl' => 'tenant-webhook']); |
133 | 133 |
|
134 | 134 | // Channel override closures must return an array, otherwise an exception is thrown |
135 | | - LogTenancyBootstrapper::$channelOverrides['slack'] = fn (Tenant $tenant, array $channel) => 'invalid override'; |
| 135 | + LogChannelBootstrapper::$channelOverrides['slack'] = fn (Tenant $tenant, array $channel) => 'invalid override'; |
136 | 136 |
|
137 | 137 | expect(fn() => tenancy()->initialize($tenant))->toThrow(InvalidArgumentException::class); |
138 | 138 |
|
139 | 139 | // Test both array mapping and closure-based overrides |
140 | | - LogTenancyBootstrapper::$channelOverrides = [ |
| 140 | + LogChannelBootstrapper::$channelOverrides = [ |
141 | 141 | 'slack' => ['url' => 'webhookUrl'], // slack.url will be mapped to $tenant->webhookUrl |
142 | 142 | 'single' => function (Tenant $tenant, array $channel) use ($centralStoragePath) { |
143 | 143 | return array_merge($channel, ['path' => $centralStoragePath . "/logs/override-{$tenant->id}.log"]); |
|
165 | 165 | test('channel config keys remain unchanged if the specified tenant override attribute is null', function() { |
166 | 166 | config(['logging.channels.slack.username' => 'Default username']); |
167 | 167 |
|
168 | | - LogTenancyBootstrapper::$channelOverrides = [ |
| 168 | + LogChannelBootstrapper::$channelOverrides = [ |
169 | 169 | 'slack' => ['username' => 'nonExistentAttribute'], // $tenant->nonExistentAttribute |
170 | 170 | ]; |
171 | 171 |
|
|
178 | 178 | test('channel overrides take precedence over the default storage path channel updating logic', function () { |
179 | 179 | $tenant = Tenant::create(['id' => 'tenant1']); |
180 | 180 |
|
181 | | - LogTenancyBootstrapper::$storagePathChannels = ['single']; |
| 181 | + LogChannelBootstrapper::$storagePathChannels = ['single']; |
182 | 182 |
|
183 | | - LogTenancyBootstrapper::$channelOverrides = [ |
| 183 | + LogChannelBootstrapper::$channelOverrides = [ |
184 | 184 | 'single' => function (Tenant $tenant, array $channel) { |
185 | 185 | return array_merge($channel, ['path' => storage_path("logs/override-{$tenant->id}.log")]); |
186 | 186 | }, |
|
196 | 196 | config([ |
197 | 197 | 'tenancy.bootstrappers' => [ |
198 | 198 | FilesystemTenancyBootstrapper::class, |
199 | | - LogTenancyBootstrapper::class, |
| 199 | + LogChannelBootstrapper::class, |
200 | 200 | ], |
201 | 201 | ]); |
202 | 202 |
|
|
232 | 232 | config([ |
233 | 233 | 'tenancy.bootstrappers' => [ |
234 | 234 | FilesystemTenancyBootstrapper::class, |
235 | | - LogTenancyBootstrapper::class, |
| 235 | + LogChannelBootstrapper::class, |
236 | 236 | ], |
237 | 237 | ]); |
238 | 238 |
|
|
284 | 284 | // Channel overrides also override the default behavior for the storage path-based channels |
285 | 285 | $tenant = Tenant::create(['id' => 'override-tenant']); |
286 | 286 |
|
287 | | - LogTenancyBootstrapper::$channelOverrides = [ |
| 287 | + LogChannelBootstrapper::$channelOverrides = [ |
288 | 288 | 'single' => function (Tenant $tenant, array $channel) { |
289 | 289 | // The tenant log path will be set to storage/tenantoverride-tenant/logs/custom-override-tenant.log |
290 | 290 | return array_merge($channel, ['path' => storage_path("logs/custom-{$tenant->id}.log")]); |
|
303 | 303 | config([ |
304 | 304 | 'tenancy.bootstrappers' => [ |
305 | 305 | FilesystemTenancyBootstrapper::class, |
306 | | - LogTenancyBootstrapper::class, |
| 306 | + LogChannelBootstrapper::class, |
307 | 307 | ], |
308 | 308 | 'logging.channels.stack' => [ |
309 | 309 | 'driver' => 'stack', |
|
353 | 353 | config([ |
354 | 354 | 'tenancy.bootstrappers' => [ |
355 | 355 | FilesystemTenancyBootstrapper::class, |
356 | | - LogTenancyBootstrapper::class, |
| 356 | + LogChannelBootstrapper::class, |
357 | 357 | ], |
358 | 358 | 'logging.channels.custom_stack' => [ |
359 | 359 | 'driver' => 'stack', |
|
436 | 436 | $tenant2 = Tenant::create(['id' => 'tenant2', 'logging' => ['slackUrl' => 'tenant2-webhook']]); |
437 | 437 |
|
438 | 438 | // Attribute mapping using nested attributes (dot notation) works |
439 | | - LogTenancyBootstrapper::$channelOverrides = [ |
| 439 | + LogChannelBootstrapper::$channelOverrides = [ |
440 | 440 | 'slack' => ['url' => 'logging.slackUrl'], |
441 | 441 | ]; |
442 | 442 |
|
|
456 | 456 | config([ |
457 | 457 | 'tenancy.bootstrappers' => [ |
458 | 458 | FilesystemTenancyBootstrapper::class, |
459 | | - LogTenancyBootstrapper::class, |
| 459 | + LogChannelBootstrapper::class, |
460 | 460 | ], |
461 | 461 | 'logging.channels.stack' => [ |
462 | 462 | 'driver' => 'stack', |
|
502 | 502 |
|
503 | 503 | // Valid override first, the config will be updated properly, |
504 | 504 | // then an invalid override that will cause the configuration to fail and throw an exception. |
505 | | - LogTenancyBootstrapper::$channelOverrides = [ |
| 505 | + LogChannelBootstrapper::$channelOverrides = [ |
506 | 506 | 'single' => ['path' => 'loggingPath'], // Valid override |
507 | 507 | 'slack' => fn () => 'invalid override', |
508 | 508 | ]; |
|
0 commit comments