mirror of
https://github.com/archtechx/tenancy.git
synced 2025-12-12 11:14:04 +00:00
* Replace MailManager singleton with an instance of a custom mail manager which always resolves the mailers instead of getting the cached ones
* Fix code style (php-cs-fixer)
* Add MailTenancyBootstrapper
* Add MailTenancyBootstrapper to tenancy.bootstrappers config (commented out)
* Fix code style (php-cs-fixer)
* Make credentials map a public static property
* Always resolve only the mailers specified in the mailersToNotCache public static property
* Fix typo in comment
* Update TenancyServiceProvider comment
* add todo
* Add comments to TenancyMailManager, rename property
* Remove the configKey array check
* Simplify bootstrap method
* Change $credentialsMap so that config keys are the keys, and the tenant property names are the values
* Rename $mailersToAlwaysResolve to $tenantMailers
* Update comment
* Update comment
* Rename variable in TenancyServiceProvider comment
* Scaffold tests
* Update comments after review
* Uncomment MailTenancyBootstrapper in config
* Use array_key_exists instead of null check
* Split config logic into methods
* Update mapping credentials
* Add tests for the added logic
* Fix code style (php-cs-fixer)
* Delete default 'smtp' mailer in $tenantMailers
* Add separate method to pick the appropriate mail credentials map preset
* Specify test name
* Move mail bootstrapper tests to BootstrapperTest
* Depend less on the default mailer by adding a static `$mailer` property
* Use static property for map presets
* Comment out MailTenancyBootstrapper from config
* Add return types to MailTenancyBootstrapper methods
* Update test name
* Move MailManager extension to MailTenancyBootstrapper
* Fix code style (php-cs-fixer)
* Update config reverting test
* Use `invade()` instead of ReflectionClass
* Fix constructor parameter formatting
* Delete TenancyMailManager, update tests
* Add return type
* Update comment
* Update MailTest
* Delete `group('mailer')`
* Delete bindNewMailManagerInstance()
* Delete remaining `group('mailer')`
* Fix comment
* Fix comment
Co-authored-by: PHP CS Fixer <phpcsfixer@example.com>
Co-authored-by: Samuel Štancl <samuel.stancl@gmail.com>
72 lines
2.5 KiB
PHP
72 lines
2.5 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
use Illuminate\Mail\MailManager;
|
|
use Illuminate\Support\Facades\Event;
|
|
use Stancl\Tenancy\Events\TenancyEnded;
|
|
use Stancl\Tenancy\Events\TenancyInitialized;
|
|
use Stancl\Tenancy\Listeners\BootstrapTenancy;
|
|
use Stancl\Tenancy\Listeners\RevertToCentralContext;
|
|
use Stancl\Tenancy\Bootstrappers\MailTenancyBootstrapper;
|
|
|
|
beforeEach(function() {
|
|
config(['mail.default' => 'smtp']);
|
|
|
|
Event::listen(TenancyInitialized::class, BootstrapTenancy::class);
|
|
Event::listen(TenancyEnded::class, RevertToCentralContext::class);
|
|
});
|
|
|
|
// Initialize tenancy as $tenant and assert that the smtp mailer's transport has the correct password
|
|
function assertMailerTransportUsesPassword(string|null $password) {
|
|
$manager = app(MailManager::class);
|
|
$mailer = invade($manager)->get('smtp');
|
|
$mailerPassword = invade($mailer->getSymfonyTransport())->password;
|
|
|
|
expect($mailerPassword)->toBe((string) $password);
|
|
};
|
|
|
|
test('mailer transport uses the correct credentials', function() {
|
|
config(['mail.default' => 'smtp', 'mail.mailers.smtp.password' => $defaultPassword = 'DEFAULT']);
|
|
MailTenancyBootstrapper::$credentialsMap = ['mail.mailers.smtp.password' => 'smtp_password'];
|
|
|
|
tenancy()->initialize($tenant = Tenant::create());
|
|
assertMailerTransportUsesPassword($defaultPassword); // $tenant->smtp_password is not set, so the default password should be used
|
|
tenancy()->end();
|
|
|
|
// Assert mailer uses the updated password
|
|
$tenant->update(['smtp_password' => $newPassword = 'changed']);
|
|
|
|
tenancy()->initialize($tenant);
|
|
assertMailerTransportUsesPassword($newPassword);
|
|
tenancy()->end();
|
|
|
|
// Assert mailer uses the correct password after switching to a different tenant
|
|
tenancy()->initialize(Tenant::create(['smtp_password' => $newTenantPassword = 'updated']));
|
|
assertMailerTransportUsesPassword($newTenantPassword);
|
|
tenancy()->end();
|
|
|
|
// Assert mailer uses the default password after tenancy ends
|
|
assertMailerTransportUsesPassword($defaultPassword);
|
|
});
|
|
|
|
|
|
test('initializing and ending tenancy binds a fresh MailManager instance without cached mailers', function() {
|
|
$mailers = fn() => invade(app(MailManager::class))->mailers;
|
|
|
|
app(MailManager::class)->mailer('smtp');
|
|
|
|
expect($mailers())->toHaveCount(1);
|
|
|
|
tenancy()->initialize(Tenant::create());
|
|
|
|
expect($mailers())->toHaveCount(0);
|
|
|
|
app(MailManager::class)->mailer('smtp');
|
|
|
|
expect($mailers())->toHaveCount(1);
|
|
|
|
tenancy()->end();
|
|
|
|
expect($mailers())->toHaveCount(0);
|
|
});
|