2026-07-27 18:40:14 +03:00
|
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
|
|
declare(strict_types=1);
|
|
|
|
|
|
|
|
|
|
|
|
use App\Models\ClientTg\Tariff;
|
|
|
|
|
|
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
2026-07-29 06:26:07 +03:00
|
|
|
|
* SaaS-admin «Клиентская Telegram-реклама» — тарифная сетка (client_tg_tariffs).
|
|
|
|
|
|
* План §Сессия 4, задача 4.4. Зеркало AdminTariffTest (СМС). Гейт группы —
|
|
|
|
|
|
* saas-admin,admin-db (crm_admin_user); admin-db переключает соединение на
|
|
|
|
|
|
* pgsql_admin, а SharesAdminPdo (глобально в Pest.php) отдаёт ему ту же PDO-сессию,
|
|
|
|
|
|
* что у default (видимость засеянной схемы).
|
2026-07-27 18:40:14 +03:00
|
|
|
|
*
|
2026-07-29 06:26:07 +03:00
|
|
|
|
* Сидированы миграциями: 5 ступеней (1/0.45, 1000/0.42, 5000/0.40, 10000/0.38, 50000/0.36).
|
2026-07-27 18:40:14 +03:00
|
|
|
|
*/
|
|
|
|
|
|
uses(DatabaseTransactions::class);
|
|
|
|
|
|
|
2026-07-29 06:26:07 +03:00
|
|
|
|
test('GET /api/admin/telegram/tariffs возвращает сидированные ступени', function () {
|
2026-07-27 18:40:14 +03:00
|
|
|
|
$r = $this->getJson('/api/admin/telegram/tariffs');
|
|
|
|
|
|
$r->assertStatus(200);
|
|
|
|
|
|
|
|
|
|
|
|
$tariffs = $r->json('tariffs');
|
|
|
|
|
|
expect($tariffs)->toHaveCount(5);
|
|
|
|
|
|
expect(collect($tariffs)->pluck('min_qty')->all())->toBe([1, 1000, 5000, 10000, 50000]);
|
|
|
|
|
|
expect($tariffs[0]['price_rub'])->toBe('0.45');
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
test('PUT /api/admin/telegram/tariffs заменяет весь набор ступеней', function () {
|
|
|
|
|
|
$r = $this->putJson('/api/admin/telegram/tariffs', [
|
|
|
|
|
|
'rows' => [
|
|
|
|
|
|
['min_qty' => 1, 'price_rub' => '0.50'],
|
|
|
|
|
|
['min_qty' => 5000, 'price_rub' => '0.35'],
|
|
|
|
|
|
],
|
|
|
|
|
|
]);
|
|
|
|
|
|
$r->assertStatus(200);
|
|
|
|
|
|
|
|
|
|
|
|
expect(Tariff::count())->toBe(2);
|
|
|
|
|
|
$rows = Tariff::orderBy('min_qty')->get();
|
|
|
|
|
|
expect($rows[0]->min_qty)->toBe(1);
|
|
|
|
|
|
expect($rows[0]->price_rub)->toBe('0.50');
|
|
|
|
|
|
expect($rows[1]->min_qty)->toBe(5000);
|
|
|
|
|
|
expect($rows[1]->price_rub)->toBe('0.35');
|
|
|
|
|
|
|
|
|
|
|
|
expect(collect($r->json('tariffs'))->pluck('min_qty')->all())->toBe([1, 5000]);
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
test('PUT /api/admin/telegram/tariffs с некорректной ступенью → 422', function () {
|
|
|
|
|
|
$this->putJson('/api/admin/telegram/tariffs', [
|
|
|
|
|
|
'rows' => [['min_qty' => 0, 'price_rub' => '0.50']],
|
|
|
|
|
|
])->assertStatus(422);
|
|
|
|
|
|
|
|
|
|
|
|
$this->putJson('/api/admin/telegram/tariffs', [
|
|
|
|
|
|
'rows' => [['min_qty' => 1, 'price_rub' => '0.00']],
|
|
|
|
|
|
])->assertStatus(422);
|
|
|
|
|
|
|
|
|
|
|
|
// Исходные 5 ступеней не тронуты.
|
|
|
|
|
|
expect(Tariff::count())->toBe(5);
|
|
|
|
|
|
});
|