set('services.sms.sandbox', true); app()->forgetInstance(SmsRouter::class); $router = app(SmsRouter::class); expect($router->pick('mts'))->toBeInstanceOf(FakeSmsProvider::class); }); it('в бою поднимаются только включённые каналы с ключами', function () { config()->set('services.sms.sandbox', false); config()->set('services.smsc.login', 'l'); config()->set('services.smsc.password', 'p'); config()->set('services.sms.mts.token', ''); // ключа нет → канал не встаёт config()->set('services.sms.providers.mts.enabled', true); config()->set('services.sms.providers.smsc.enabled', true); app()->forgetInstance(SmsRouter::class); $router = app(SmsRouter::class); // МТС-ключа нет → МТС-номер уходит универсалу (СМС-центр). expect($router->pick('mts')?->key())->toBe('smsc') ->and($router->pick('')?->key())->toBe('smsc'); }); it('канал Теле2 встаёт, когда включён и есть логин с паролем', function () { config()->set('services.sms.sandbox', false); config()->set('services.smsc.login', 'l'); config()->set('services.smsc.password', 'p'); config()->set('services.sms.providers.smsc.enabled', true); config()->set('services.sms.tele2.login', 'liderra_api'); config()->set('services.sms.tele2.password', 'secret'); config()->set('services.sms.providers.tele2.enabled', true); config()->set('services.sms.providers.tele2.serves', ['tele2']); app()->forgetInstance(SmsRouter::class); // Номер Теле2 уходит своему оператору, чужой — по-прежнему универсалу. expect(app(SmsRouter::class)->pick('tele2')?->key())->toBe('tele2') ->and(app(SmsRouter::class)->pick('beeline')?->key())->toBe('smsc'); }); it('без логина Теле2 канал не встаёт и номер уходит универсалу', function () { config()->set('services.sms.sandbox', false); config()->set('services.smsc.login', 'l'); config()->set('services.smsc.password', 'p'); config()->set('services.sms.providers.smsc.enabled', true); config()->set('services.sms.tele2.login', ''); // ключа нет → канал не встаёт config()->set('services.sms.providers.tele2.enabled', true); config()->set('services.sms.providers.tele2.serves', ['tele2']); app()->forgetInstance(SmsRouter::class); expect(app(SmsRouter::class)->pick('tele2')?->key())->toBe('smsc'); });