Files
portal/app/tests/Feature/ClientTg/AdminTgApiTest.php
T

79 lines
3.2 KiB
PHP
Raw Normal View History

<?php
declare(strict_types=1);
use App\Models\ClientTg\Setting;
use App\Models\ClientTg\Tariff;
use Illuminate\Foundation\Testing\DatabaseTransactions;
/**
* SaaS-admin «Клиентская Telegram-реклама» — тарифная сетка (client_tg_tariffs) и
* общие настройки (client_tg_settings, singleton). План §Сессия 4, задача 4.4.
* Зеркало AdminTariffTest (СМС). Гейт группы — saas-admin,admin-db (crm_admin_user);
* admin-db переключает соединение на pgsql_admin, а SharesAdminPdo (глобально в
* Pest.php) отдаёт ему ту же PDO-сессию, что у default (видимость засеянной схемы).
*
* Сидированы миграциями: 5 ступеней (1/0.45, 1000/0.42, 5000/0.40, 10000/0.38,
* 50000/0.36) + settings (fee 2500.00/мес, grace 29 дней).
*/
uses(DatabaseTransactions::class);
test('GET /api/admin/telegram/tariffs возвращает сидированные ступени и настройки', function () {
$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');
expect($r->json('settings.name_fee_rub_per_month'))->toBe('2500.00');
expect($r->json('settings.name_debt_grace_days'))->toBe(29);
});
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/settings обновляет singleton настроек', function () {
$r = $this->putJson('/api/admin/telegram/settings', [
'name_fee_rub_per_month' => '3000.00',
'name_debt_grace_days' => 14,
]);
$r->assertStatus(200);
expect($r->json('name_fee_rub_per_month'))->toBe('3000.00');
expect($r->json('name_debt_grace_days'))->toBe(14);
$settings = Setting::first();
expect($settings->name_fee_rub_per_month)->toBe('3000.00');
expect($settings->name_debt_grace_days)->toBe(14);
});
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);
});