seed(AuthorizationSeeder::class); WebsiteType::query()->create(['codigo' => 'onticket', 'nombre' => 'OnTicket']); $tenant = $this->createTenant('acme'); $category = Category::query()->create([ 'tenant_code' => $tenant->codigo, 'nombre' => 'Entradas de carga', ]); $catalogItem = CatalogItem::query()->create([ 'tenant_code' => $tenant->codigo, 'category_id' => $category->id, 'slug' => 'entrada-load-test', 'nombre' => 'Entrada load test', 'descripcion' => 'Ticket descartable', 'precio' => 100, 'has_tickets' => true, ]); $exitCode = Artisan::call('load-test:tickets:prepare', [ 'tenant' => $tenant->codigo, '--tickets' => 4, '--scanners' => 2, '--owners' => 2, '--catalog-item' => $catalogItem->id, '--run' => 'test-run', '--output' => 'load-tests/test-run.postman.json', ]); $this->assertSame(0, $exitCode, Artisan::output()); Storage::disk('local')->assertExists('load-tests/test-run.postman.json'); $rows = json_decode( Storage::disk('local')->get('load-tests/test-run.postman.json'), true, flags: JSON_THROW_ON_ERROR, ); $this->assertCount(4, $rows); $this->assertCount(4, collect($rows)->pluck('ticket_uuid')->unique()); $this->assertCount(2, collect($rows)->pluck('scanner_token')->unique()); $this->assertSame([200], collect($rows)->pluck('expected_status')->unique()->values()->all()); $this->assertDatabaseCount('tickets', 4); $this->assertCount(2, Ticket::query()->distinct()->pluck('user_id')); $this->assertDatabaseCount('category_scanners', 2); $first = $rows[0]; $this->withToken($first['scanner_token']) ->postJson("/api/v1/scanner/tickets/{$first['ticket_uuid']}/scan") ->assertOk() ->assertJsonPath('data.ticket', $first['ticket_uuid']); $this->assertNotNull( Ticket::query()->where('ticket', $first['ticket_uuid'])->firstOrFail()->used_at ); } private function createTenant(string $code): Tenant { $logo = Attachment::query()->create([ 'key' => (string) Str::uuid(), 'path' => "tests/{$code}-logo.png", 'filename' => "{$code}-logo.png", 'type' => 'image', 'mime_type' => 'image/png', 'extension' => 'png', 'size' => 1, ]); return Tenant::query()->create([ 'codigo' => $code, 'nombre' => ucfirst($code), 'dominio' => "{$code}.test", 'primary_color' => '#ff7006', 'secondary_color' => '#777777', 'danger_color' => '#e04a4a', 'success_color' => '#81bc73', 'header_bg_color' => '#313131', 'footer_bg_color' => '#313131', 'header_logo_id' => $logo->id, 'footer_logo_id' => $logo->id, 'website_type_code' => 'onticket', ]); } }