Files
compras/tests/Concurrency/bank-worker.php
T
nala 70163c0184
tests / ci (push) Canceled after 0s
commit2
2026-10-28 14:35:06 +02:00

37 lines
1.5 KiB
PHP

<?php
use App\Models\Supplier;
use App\Models\SupplierBankDetail;
use App\Models\User;
use App\Services\SupplierBankWorkflow;
use Illuminate\Contracts\Console\Kernel;
use Illuminate\Support\Facades\DB;
use Illuminate\Validation\ValidationException;
require __DIR__.'/../../vendor/autoload.php';
$database = $argv[1] ?? '';
if (! preg_match('/^compras_receipts_test_[a-f0-9]{12}$/', $database)) {
throw new LogicException('Base de teste inválida.');
}
$app = require __DIR__.'/../../bootstrap/app.php';
$app->make(Kernel::class)->bootstrap();
if (! $app->environment('testing') || DB::connection()->getDatabaseName() !== $database) {
throw new LogicException('Worker não isolado.');
}
DB::select('select set_config(?, ?, false)', ['application_name', 'sgc_bank_'.$argv[4]]);
$pid = DB::selectOne('select pg_backend_pid() as pid')->pid;
$user = User::query()->findOrFail($argv[2]);
auth()->guard()->setUser($user);
$payload = json_decode(stream_get_contents(STDIN), true, 512, JSON_THROW_ON_ERROR);
try {
if ($payload['action'] === 'propose') {
app(SupplierBankWorkflow::class)->propose($user, Supplier::query()->findOrFail($argv[3]), $payload['data']);
} else {
app(SupplierBankWorkflow::class)->review($user, SupplierBankDetail::query()->findOrFail($argv[3]), 'approved', 'Conferência isolada de teste');
}
$status = 200;
} catch (ValidationException) {
$status = 422;
}
echo json_encode(['status' => $status, 'backend_pid' => $pid], JSON_THROW_ON_ERROR);