diff --git a/app/Domains/Ticketing/Ticket/routes/adminapp.php b/app/Domains/Ticketing/Ticket/routes/adminapp.php index b785612a..17e0329a 100644 --- a/app/Domains/Ticketing/Ticket/routes/adminapp.php +++ b/app/Domains/Ticketing/Ticket/routes/adminapp.php @@ -7,24 +7,24 @@ Route::prefix('v1/adminapp/tenant') ->middleware(['auth:sanctum', 'adminapp.tenant']) ->group(function (): void { Route::get('tickets', [TicketController::class, 'index']) - ->middleware('tenant.menu:adminapp.tickets') + ->middleware('tenant.menu:onticket.adminapp.tickets') ->name('adminapp.tickets.index'); Route::post('tickets/{ticket}/cancel', [TicketController::class, 'cancel']) ->whereNumber('ticket') - ->middleware('tenant.menu:adminapp.tickets') + ->middleware('tenant.menu:onticket.adminapp.tickets') ->name('adminapp.tickets.cancel'); Route::get('tickets/{ticket}/refund', [TicketController::class, 'calculateRefund']) ->whereNumber('ticket') - ->middleware('tenant.menu:adminapp.tickets') + ->middleware('tenant.menu:onticket.adminapp.tickets') ->name('adminapp.tickets.calculate-refund'); Route::post('tickets/{ticket}/refund', [TicketController::class, 'refund']) ->whereNumber('ticket') - ->middleware('tenant.menu:adminapp.tickets') + ->middleware('tenant.menu:onticket.adminapp.tickets') ->name('adminapp.tickets.refund'); Route::get('tickets/pdf', [TicketController::class, 'downloadPdf']) - ->middleware('tenant.menu:adminapp.tickets') + ->middleware('tenant.menu:onticket.adminapp.tickets') ->name('adminapp.tickets.pdf'); Route::get('tickets/excel', [TicketController::class, 'downloadExcel']) - ->middleware('tenant.menu:adminapp.tickets') + ->middleware('tenant.menu:onticket.adminapp.tickets') ->name('adminapp.tickets.excel'); }); diff --git a/app/Shared/Forms/routes/adminapp.php b/app/Shared/Forms/routes/adminapp.php index 6517d639..e77dcc63 100644 --- a/app/Shared/Forms/routes/adminapp.php +++ b/app/Shared/Forms/routes/adminapp.php @@ -23,7 +23,7 @@ Route::prefix('v1/adminapp/forms') Route::get('sale', SaleFormController::class); Route::get('staff', StaffFormController::class); Route::get('tickets-filter', TicketFilterFormController::class) - ->middleware('tenant.menu:adminapp.tickets') + ->middleware('tenant.menu:onticket.adminapp.tickets') ->name('adminapp.forms.tickets-filter'); Route::get( 'fiesta-futbol-infantil/ticket', diff --git a/tests/Feature/Menu/TicketMenuAccessTest.php b/tests/Feature/Menu/TicketMenuAccessTest.php new file mode 100644 index 00000000..a9dae0a2 --- /dev/null +++ b/tests/Feature/Menu/TicketMenuAccessTest.php @@ -0,0 +1,76 @@ + ['onticket.adminapp.tickets', 'current', true], + 'old code' => ['adminapp.tickets', 'current', false], + 'another tenant' => ['onticket.adminapp.tickets', 'other', false], + 'unrelated menu' => ['adminapp.ventas', 'current', false], + ]; + } + + #[DataProvider('menuAssignments')] + public function test_ticket_menu_requires_an_association_with_the_authenticated_tenant(string $menuCode, string $assignedTenant, bool $allowed): void + { + Schema::create('tenants', function (Blueprint $table): void { + $table->id(); + $table->string('codigo'); + }); + Schema::create('menues', function (Blueprint $table): void { + $table->id(); + $table->string('code'); + }); + Schema::create('tenants_menues', function (Blueprint $table): void { + $table->string('tenant_code'); + $table->string('menu_code'); + }); + DB::table('tenants')->insert(['codigo' => 'current']); + DB::table('menues')->insert(['code' => $menuCode]); + DB::table('tenants_menues')->insert(['tenant_code' => $assignedTenant, 'menu_code' => $menuCode]); + + $user = new User(['tenant_codigo' => 'current']); + $request = Request::create('/api/v1/adminapp/tenant/tickets'); + $request->setUserResolver(fn () => $user); + if (! $allowed) { + $this->expectException(HttpException::class); + $this->expectExceptionCode(0); + } + + try { + $response = (new EnsureTenantHasMenu)->handle($request, fn () => response('allowed'), 'onticket.adminapp.tickets'); + $this->assertSame('allowed', $response->getContent()); + } catch (HttpException $exception) { + $this->assertSame(404, $exception->getStatusCode()); + throw $exception; + } + } + + public function test_all_ticket_routes_and_filter_form_use_the_updated_menu_codes(): void + { + foreach ([ + 'adminapp.tickets.index', 'adminapp.tickets.cancel', + 'adminapp.tickets.calculate-refund', 'adminapp.tickets.refund', + 'adminapp.tickets.pdf', 'adminapp.tickets.excel', 'adminapp.forms.tickets-filter', + ] as $name) { + $route = Route::getRoutes()->getByName($name); + $this->assertNotNull($route); + $this->assertContains('tenant.menu:onticket.adminapp.tickets', $route->gatherMiddleware()); + } + } +}