getJson('/api/admin/sms/tariffs'); $r->assertStatus(200); $tariffs = $r->json('tariffs'); expect($tariffs)->toHaveCount(5); expect(collect($tariffs)->pluck('min_qty')->all())->toBe([1, 100, 250, 500, 1000]); expect($tariffs[0]['price_rub'])->toBe('9.00'); expect($r->json('settings.name_fee_rub_per_operator'))->toBe('2500.00'); expect($r->json('settings.name_debt_grace_days'))->toBe(29); }); test('PUT /api/admin/sms/tariffs заменяет весь набор ступеней', function () { $r = $this->putJson('/api/admin/sms/tariffs', [ 'rows' => [ ['min_qty' => 1, 'price_rub' => '10.00'], ['min_qty' => 500, 'price_rub' => '7.50'], ], ]); $r->assertStatus(200); expect(ClientSmsTariff::count())->toBe(2); $rows = ClientSmsTariff::orderBy('min_qty')->get(); expect($rows[0]->min_qty)->toBe(1); expect($rows[0]->price_rub)->toBe('10.00'); expect($rows[1]->min_qty)->toBe(500); expect($rows[1]->price_rub)->toBe('7.50'); $responseTariffs = $r->json('tariffs'); expect($responseTariffs)->toHaveCount(2); expect(collect($responseTariffs)->pluck('min_qty')->all())->toBe([1, 500]); }); test('PUT /api/admin/sms/settings обновляет singleton настроек', function () { $r = $this->putJson('/api/admin/sms/settings', [ 'name_fee_rub_per_operator' => '3000.00', 'name_debt_grace_days' => 14, ]); $r->assertStatus(200); expect($r->json('name_fee_rub_per_operator'))->toBe('3000.00'); expect($r->json('name_debt_grace_days'))->toBe(14); $settings = ClientSmsSettings::first(); expect($settings->name_fee_rub_per_operator)->toBe('3000.00'); expect($settings->name_debt_grace_days)->toBe(14); }); test('PUT /api/admin/sms/tariffs с некорректной ступенью → 422', function () { $r = $this->putJson('/api/admin/sms/tariffs', [ 'rows' => [ ['min_qty' => 0, 'price_rub' => '10.00'], ], ]); $r->assertStatus(422); $r2 = $this->putJson('/api/admin/sms/tariffs', [ 'rows' => [ ['min_qty' => 1, 'price_rub' => '0.00'], ], ]); $r2->assertStatus(422); // Исходные 5 ступеней не тронуты. expect(ClientSmsTariff::count())->toBe(5); });