From c4ff695f2e33b86fc5afd7195af458f8e767c784 Mon Sep 17 00:00:00 2001 From: ncoronel Date: Thu, 3 Sep 2026 14:30:38 -0300 Subject: [PATCH] refactor(ticket): simplify tenant validation and update command documentation --- .../Services/LoadTestTicketDatasetService.php | 11 ++--------- app/Domains/Ticket/documentacion/README.md | 4 ++-- routes/console.php | 2 +- .../PrepareLoadTestTicketsCommandTest.php | 19 ++++++------------- 4 files changed, 11 insertions(+), 25 deletions(-) diff --git a/app/Domains/Ticket/Services/LoadTestTicketDatasetService.php b/app/Domains/Ticket/Services/LoadTestTicketDatasetService.php index 4b170dd..89bf279 100644 --- a/app/Domains/Ticket/Services/LoadTestTicketDatasetService.php +++ b/app/Domains/Ticket/Services/LoadTestTicketDatasetService.php @@ -122,10 +122,6 @@ class LoadTestTicketDatasetService int $scannerCount, int $ownerCount, ): void { - if (! str_starts_with($tenantCode, 'loadtest-')) { - throw new InvalidArgumentException('El tenant debe comenzar con `loadtest-`.'); - } - foreach ([ 'tickets' => [$ticketCount, 100_000], 'scanners' => [$scannerCount, 10_000], @@ -189,7 +185,7 @@ class LoadTestTicketDatasetService private function scanners(Tenant $tenant, CatalogItem $catalogItem, int $count): Collection { return Collection::times($count, function (int $number) use ($tenant, $catalogItem): User { - $scanner = User::withTrashed()->updateOrCreate( + $scanner = User::query()->updateOrCreate( ['email' => $this->email($tenant, 'scanner', $number)], [ 'nombre_apellido' => "Load test scanner {$number}", @@ -198,8 +194,6 @@ class LoadTestTicketDatasetService 'tenant_codigo' => $tenant->codigo, ], ); - $scanner->restore(); - if ($tenant->requiresScannerCategoryValidation()) { $scanner->scanCategories()->syncWithoutDetaching([$catalogItem->category_id]); } @@ -212,7 +206,7 @@ class LoadTestTicketDatasetService private function owners(Tenant $tenant, int $count): Collection { return Collection::times($count, function (int $number) use ($tenant): User { - $owner = User::withTrashed()->updateOrCreate( + $owner = User::query()->updateOrCreate( ['email' => $this->email($tenant, 'owner', $number)], [ 'nombre_apellido' => "Load test owner {$number}", @@ -221,7 +215,6 @@ class LoadTestTicketDatasetService 'tenant_codigo' => $tenant->codigo, ], ); - $owner->restore(); return $owner; }); diff --git a/app/Domains/Ticket/documentacion/README.md b/app/Domains/Ticket/documentacion/README.md index a8456ed..cda2241 100644 --- a/app/Domains/Ticket/documentacion/README.md +++ b/app/Domains/Ticket/documentacion/README.md @@ -37,8 +37,8 @@ php artisan load-test:tickets:prepare loadtest-evento \ --run=evento-001 ``` -El tenant debe existir, ser exclusivo para carga y comenzar con `loadtest-`. Si no se indica -`--catalog-item`, se usa el primer producto estándar del tenant con tickets habilitados. `--variant` +El tenant debe existir y se recomienda que sea exclusivo para carga. Si no se indica `--catalog-item`, +se usa el primer producto estándar del tenant con tickets habilitados. `--variant` es opcional; al indicarlo, su configuración de vigencia debe estar activa y ser resoluble. Sin variante, los tickets tienen vigencia irrestricta. diff --git a/routes/console.php b/routes/console.php index 22daf52..1d98696 100644 --- a/routes/console.php +++ b/routes/console.php @@ -28,7 +28,7 @@ Schedule::command('reservations:expire') Artisan::command( 'load-test:tickets:prepare - {tenant : Código de un tenant dedicado con prefijo loadtest-} + {tenant : Código del tenant que recibirá los datos de carga} {--tickets=1000 : Cantidad de tickets válidos} {--scanners=10 : Cantidad de identidades scanner} {--owners=100 : Cantidad de propietarios de tickets} diff --git a/tests/Feature/Ticket/PrepareLoadTestTicketsCommandTest.php b/tests/Feature/Ticket/PrepareLoadTestTicketsCommandTest.php index 29d6d76..b7e2867 100644 --- a/tests/Feature/Ticket/PrepareLoadTestTicketsCommandTest.php +++ b/tests/Feature/Ticket/PrepareLoadTestTicketsCommandTest.php @@ -8,32 +8,23 @@ use App\Domains\Catalog\Models\Category; use App\Domains\Tenant\Models\Tenant; use App\Domains\Tenant\Models\WebsiteType; use App\Domains\Ticket\Models\Ticket; -use App\Domains\Ticket\Services\LoadTestTicketDatasetService; use Database\Seeders\AuthorizationSeeder; use Illuminate\Foundation\Testing\RefreshDatabase; +use Illuminate\Support\Facades\Artisan; use Illuminate\Support\Facades\Storage; use Illuminate\Support\Str; -use InvalidArgumentException; use Tests\TestCase; class PrepareLoadTestTicketsCommandTest extends TestCase { use RefreshDatabase; - public function test_it_rejects_a_tenant_that_is_not_dedicated_to_load_testing(): void - { - $this->expectException(InvalidArgumentException::class); - $this->expectExceptionMessage('loadtest-'); - - app(LoadTestTicketDatasetService::class)->prepare('production', 1, 1, 1); - } - public function test_it_generates_a_postman_dataset_that_can_scan_the_tickets(): void { Storage::fake('local'); $this->seed(AuthorizationSeeder::class); WebsiteType::query()->create(['codigo' => 'onticket', 'nombre' => 'OnTicket']); - $tenant = $this->createTenant('loadtest-acme'); + $tenant = $this->createTenant('acme'); $category = Category::query()->create([ 'tenant_code' => $tenant->codigo, 'nombre' => 'Entradas de carga', @@ -48,7 +39,7 @@ class PrepareLoadTestTicketsCommandTest extends TestCase 'has_tickets' => true, ]); - $this->artisan('load-test:tickets:prepare', [ + $exitCode = Artisan::call('load-test:tickets:prepare', [ 'tenant' => $tenant->codigo, '--tickets' => 4, '--scanners' => 2, @@ -56,7 +47,9 @@ class PrepareLoadTestTicketsCommandTest extends TestCase '--catalog-item' => $catalogItem->id, '--run' => 'test-run', '--output' => 'load-tests/test-run.postman.json', - ])->assertSuccessful(); + ]); + + $this->assertSame(0, $exitCode, Artisan::output()); Storage::disk('local')->assertExists('load-tests/test-run.postman.json'); $rows = json_decode(