72 lines
3.1 KiB
PHP
72 lines
3.1 KiB
PHP
|
|
<?php
|
||
|
|
|
||
|
|
declare(strict_types=1);
|
||
|
|
|
||
|
|
use App\Models\SmsGlobalOptout;
|
||
|
|
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Строки листа 1.4 и 1.5: владелец вносит номер в общий стоп-лист портала
|
||
|
|
* (с комментарием, зачем), видит список внесённых и может номер убрать.
|
||
|
|
* Закрытый номер перестаёт получать СМС у ВСЕХ клиентов сразу — проверка
|
||
|
|
* самого отсева живёт в RecipientSelectorTest.
|
||
|
|
*/
|
||
|
|
uses(DatabaseTransactions::class);
|
||
|
|
|
||
|
|
test('владелец вносит номер в общий стоп-лист с комментарием', function () {
|
||
|
|
$this->postJson('/api/admin/sms/global-optouts', [
|
||
|
|
'phone' => '+7 900 111-22-33',
|
||
|
|
'reason' => 'жалоба через МТС',
|
||
|
|
])->assertStatus(201);
|
||
|
|
|
||
|
|
$row = SmsGlobalOptout::find('79001112233');
|
||
|
|
|
||
|
|
expect($row)->not->toBeNull()
|
||
|
|
->and($row->reason)->toBe('жалоба через МТС');
|
||
|
|
});
|
||
|
|
|
||
|
|
test('номер принимается в любом виде — 8, +7, со скобками', function () {
|
||
|
|
foreach (['8 (900) 111-22-44', '+79001112255', '9001112266'] as $raw) {
|
||
|
|
$this->postJson('/api/admin/sms/global-optouts', ['phone' => $raw])->assertStatus(201);
|
||
|
|
}
|
||
|
|
|
||
|
|
expect(SmsGlobalOptout::whereIn('phone', ['79001112244', '79001112255', '79001112266'])->count())
|
||
|
|
->toBe(3);
|
||
|
|
});
|
||
|
|
|
||
|
|
test('непонятый номер отклоняется внятно, а не молча', function () {
|
||
|
|
$this->postJson('/api/admin/sms/global-optouts', ['phone' => 'абырвалг'])
|
||
|
|
->assertStatus(422)
|
||
|
|
->assertJsonPath('message', 'Не понял номер телефона');
|
||
|
|
|
||
|
|
expect(SmsGlobalOptout::count())->toBe(0);
|
||
|
|
});
|
||
|
|
|
||
|
|
test('повторное внесение того же номера не ломается и не плодит записей', function () {
|
||
|
|
$this->postJson('/api/admin/sms/global-optouts', ['phone' => '79001112233', 'reason' => 'первая'])
|
||
|
|
->assertStatus(201);
|
||
|
|
$this->postJson('/api/admin/sms/global-optouts', ['phone' => '79001112233', 'reason' => 'вторая'])
|
||
|
|
->assertStatus(201);
|
||
|
|
|
||
|
|
expect(SmsGlobalOptout::where('phone', '79001112233')->count())->toBe(1)
|
||
|
|
->and(SmsGlobalOptout::find('79001112233')->reason)->toBe('первая');
|
||
|
|
});
|
||
|
|
|
||
|
|
test('владелец видит список внесённых номеров', function () {
|
||
|
|
SmsGlobalOptout::create(['phone' => '79001112233', 'reason' => 'жалоба оператору']);
|
||
|
|
SmsGlobalOptout::create(['phone' => '79001112244']);
|
||
|
|
|
||
|
|
$r = $this->getJson('/api/admin/sms/global-optouts')->assertStatus(200);
|
||
|
|
|
||
|
|
expect($r->json('total'))->toBe(2)
|
||
|
|
->and($r->json('items'))->toHaveCount(2);
|
||
|
|
});
|
||
|
|
|
||
|
|
test('владелец убирает номер из общего стоп-листа', function () {
|
||
|
|
SmsGlobalOptout::create(['phone' => '79001112233']);
|
||
|
|
|
||
|
|
$this->deleteJson('/api/admin/sms/global-optouts/79001112233')->assertStatus(200);
|
||
|
|
|
||
|
|
expect(SmsGlobalOptout::find('79001112233'))->toBeNull();
|
||
|
|
});
|