Files
portal/app/tests/Unit/Sms/MtsSmsProviderTest.php
T

61 lines
1.7 KiB
PHP

<?php
declare(strict_types=1);
use App\Services\Sms\Providers\MtsSmsProvider;
use App\Services\Sms\SmsOutgoing;
use App\Services\Sms\SmsSendException;
use Illuminate\Support\Facades\Http;
function mts_provider(): MtsSmsProvider
{
return new MtsSmsProvider('token-xxx', ['mts'], ['*' => 400]);
}
function mts_message(): SmsOutgoing
{
return new SmsOutgoing(
phone: '79990000001',
body: 'Здравствуйте!',
senderName: 'liderra.ru',
operator: 'МТС',
segments: 1,
);
}
it('обслуживает только МТС', function () {
expect(mts_provider()->servesOperators())->toBe(['mts'])
->and(mts_provider()->key())->toBe('mts');
});
it('успешная отправка возвращает id и цену', function () {
Http::fake(['api.exolve.ru/*' => Http::response(['message_id' => 'abc-1'], 200)]);
$result = mts_provider()->send(mts_message());
expect($result->providerMessageId)->toBe('abc-1')
->and($result->costKopecks)->toBe(400);
});
it('отказ 4xx — terminal', function () {
Http::fake(['api.exolve.ru/*' => Http::response(['error' => 'bad request'], 400)]);
try {
mts_provider()->send(mts_message());
$this->fail('ожидалось SmsSendException');
} catch (SmsSendException $e) {
expect($e->terminal)->toBeTrue();
}
});
it('сбой 5xx — не terminal', function () {
Http::fake(['api.exolve.ru/*' => Http::response('', 503)]);
try {
mts_provider()->send(mts_message());
$this->fail('ожидалось SmsSendException');
} catch (SmsSendException $e) {
expect($e->terminal)->toBeFalse();
}
});