From 3b2977a330044160fea593188f28d01272b3c56f Mon Sep 17 00:00:00 2001 From: ncoronel Date: Mon, 3 Aug 2026 15:29:14 -0300 Subject: [PATCH] feat: Enhance tenant website extras by adding detailed description HTML for hero and additional info configurations; update related tests for validation --- database/seeders/TenantSeeder.php | 28 ++++++++++- tests/Feature/Seeders/TenantSeederTest.php | 16 +++++-- .../AdminAppWebsiteExtraControllerTest.php | 47 +++++++++++++++++++ 3 files changed, 86 insertions(+), 5 deletions(-) diff --git a/database/seeders/TenantSeeder.php b/database/seeders/TenantSeeder.php index 1882eed..474fe0b 100644 --- a/database/seeders/TenantSeeder.php +++ b/database/seeders/TenantSeeder.php @@ -120,6 +120,7 @@ class TenantSeeder extends Seeder 'extras' => [ 'heroConfig' => [ 'title_html' => '

Fiesta Fútbol Infantil

', + 'description_html' => '

Viví una jornada inolvidable de fútbol infantil.

', 'button_text' => 'Comprar entradas', 'button_href' => '/tickets', 'background_image_id' => $this->uploadedImage( @@ -145,7 +146,32 @@ class TenantSeeder extends Seeder ], ], 'additionalInfoConfig' => [ - 'description' => '

Viví una jornada inolvidable de fútbol infantil.

', + 'description' => <<<'HTML' +
+
+
+
    +
  • + Menores y Accesos: Los niños menores de [X] años ingresan gratis acompañados por un adulto con entrada válida. +
  • +
  • + Jugadores y Accesos: Los niños que participen del torneo ingresan según la acreditación otorgada a su club. +
  • +
+
+
+
    +
  • + Elementos prohibidos: No se permite el ingreso con pirotecnia, objetos cortantes, envases de vidrio ni bebidas alcohólicas. +
  • +
  • + Entradas: No es necesario que imprimas tu entrada. Podés mostrar el código QR directamente desde tu celular. No tienen cambio ni devolución. +
  • +
+
+
+
+ HTML, ], ], ]); diff --git a/tests/Feature/Seeders/TenantSeederTest.php b/tests/Feature/Seeders/TenantSeederTest.php index 06aa3f8..f0495aa 100644 --- a/tests/Feature/Seeders/TenantSeederTest.php +++ b/tests/Feature/Seeders/TenantSeederTest.php @@ -90,7 +90,10 @@ class TenantSeederTest extends TestCase $heroConfig = $extras->get('heroConfig')->config; $this->assertSame('

Fiesta Fútbol Infantil

', $heroConfig['title_html']); - $this->assertArrayNotHasKey('description_html', $heroConfig); + $this->assertSame( + '

Viví una jornada inolvidable de fútbol infantil.

', + $heroConfig['description_html'], + ); $this->assertIsInt($heroConfig['background_image_id']); $this->assertDatabaseHas('attachments', [ 'id' => $heroConfig['background_image_id'], @@ -115,8 +118,13 @@ class TenantSeederTest extends TestCase ], ], $extras->get('eventConfig')->config); - $this->assertSame([ - 'description' => '

Viví una jornada inolvidable de fútbol infantil.

', - ], $extras->get('additionalInfoConfig')->config); + $additionalInfo = $extras->get('additionalInfoConfig')->config['description']; + + $this->assertStringContainsString('class="row g-4 text-start"', $additionalInfo); + $this->assertSame(2, substr_count($additionalInfo, 'class="col-12 col-md-6"')); + $this->assertStringContainsString('Menores y Accesos:', $additionalInfo); + $this->assertStringContainsString('Jugadores y Accesos:', $additionalInfo); + $this->assertStringContainsString('Elementos prohibidos:', $additionalInfo); + $this->assertStringContainsString('Entradas:', $additionalInfo); } } diff --git a/tests/Feature/Tenant/AdminAppWebsiteExtraControllerTest.php b/tests/Feature/Tenant/AdminAppWebsiteExtraControllerTest.php index 94f288f..7ce770e 100644 --- a/tests/Feature/Tenant/AdminAppWebsiteExtraControllerTest.php +++ b/tests/Feature/Tenant/AdminAppWebsiteExtraControllerTest.php @@ -170,6 +170,53 @@ class AdminAppWebsiteExtraControllerTest extends TestCase ); } + public function test_adminapp_user_saves_the_banner_description_in_the_hero_extra(): void + { + $heroDefinition = $this->websiteType->extras()->create([ + 'codigo' => 'heroConfig', + 'nombre' => 'Banner principal', + 'descripcion' => 'Configuración del banner principal.', + 'is_required' => false, + 'config_schema' => [ + 'request_rules' => [ + '$' => 'required|array', + 'title_html' => 'nullable|string', + 'description_html' => 'nullable|string', + 'button_text' => 'nullable|string', + 'button_href' => 'nullable|string', + 'background_image_id' => 'nullable|string', + ], + 'transforms' => [], + ], + ]); + $tenant = $this->createTenant('acme'); + + Sanctum::actingAs($this->createAdminAppUser($tenant)); + + $this->putJson('/api/v1/adminapp/tenant/website-extras/heroConfig', [ + 'config' => [ + 'title_html' => '

Evento

', + 'description_html' => '

Nueva descripción del banner

', + 'button_text' => 'Comprar', + 'button_href' => '/tickets', + 'background_image_id' => null, + ], + ]) + ->assertOk() + ->assertJsonPath( + 'data.extras.heroConfig.description_html', + '

Nueva descripción del banner

' + ); + + $this->assertSame( + '

Nueva descripción del banner

', + $tenant->websiteExtras() + ->where('website_type_extra_id', $heroDefinition->id) + ->firstOrFail() + ->config['description_html'] + ); + } + public function test_update_returns_not_found_for_an_unsupported_extra_code(): void { $tenant = $this->createTenant('acme');