61 lines
1.7 KiB
PHP
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();
|
|
}
|
|
});
|