Files
portal/app/database/factories/SupplierProjectFactory.php
T
Дмитрий 0f820c4569 feat(admin): Plan 4 Task 10 — AdminSuppliersController + AdminSupplierPricesView (B1/B2/B3 cost editor)
Backend AdminSuppliersController:
- GET /api/admin/suppliers — все 3 поставщика (B1/B2/B3).
- PATCH /api/admin/suppliers/{id} — обновляет cost_rub / quality_score / is_active.
- Validation: cost_rub >= 0, quality_score 0..9.99.
- Audit trail saas_admin_audit_log (stub admin via system-supplier@liderra.local).
- 4 Pest integration tests.

Frontend AdminSupplierPricesView (Vue 3 + Vuetify 3):
- v-data-table 3 строки с inline-editing cost_rub/quality_score/is_active.
- Forest-palette + JetBrains Mono tnum.
- 3 Vitest tests + Histoire story.

Router /admin/supplier-prices route.

Drive-by fix: SupplierProjectFactory.definition() default signal_type
ограничен ['site','call'] — иначе при ->create(['platform' => 'B1']) с
оригинальным random 'sms' нарушается CHECK chk_supplier_projects_b1_not_for_sms
(flaky parallel-pest race condition). Тесты, которым нужен 'sms', продолжают
явно передавать signal_type вместе с B2/B3.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 11:28:03 +03:00

42 lines
1.5 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
declare(strict_types=1);
namespace Database\Factories;
use App\Models\SupplierProject;
use Illuminate\Database\Eloquent\Factories\Factory;
/**
* @extends Factory<SupplierProject>
*/
class SupplierProjectFactory extends Factory
{
protected $model = SupplierProject::class;
public function definition(): array
{
$platform = fake()->randomElement(['B1', 'B2', 'B3']);
// Default signal_type ограничен ['site','call'] — это безопасно для
// всех трёх платформ (B1 не поддерживает sms по
// chk_supplier_projects_b1_not_for_sms). Тесты, которым нужен 'sms',
// должны явно передавать ['signal_type' => 'sms'] вместе с B2/B3.
// Иначе при ->create(['platform' => 'B1']) signal_type 'sms' из
// оригинального randomElement остаётся и нарушает CHECK constraint.
$signal = fake()->randomElement(['site', 'call']);
return [
'platform' => $platform,
'signal_type' => $signal,
'unique_key' => fake()->unique()->domainName(),
'supplier_external_id' => (string) fake()->numberBetween(1_000_000, 99_999_999),
'current_limit' => 0,
'current_workdays' => [1, 2, 3, 4, 5, 6, 7],
'current_regions' => null,
'sync_status' => 'pending',
'last_synced_at' => null,
'inactive_since' => null,
];
}
}