seed(AuthorizationSeeder::class); } public function test_authentication_is_required(): void { $this->getJson('/api/v1/adminapp/tenant/help-menus') ->assertUnauthorized(); } public function test_adminapp_user_can_read_help_menu_states(): void { [$tenant] = $this->tenantWithHelpMenus(); Sanctum::actingAs($this->createAdminAppUser($tenant)); $response = $this->getJson('/api/v1/adminapp/tenant/help-menus') ->assertOk(); $states = $response->json('data'); $this->assertFalse($states['help.faq']['is_enabled']); $this->assertTrue($states['help.terms-and-conditions']['is_enabled']); $this->assertSame('¿Cómo compro?', $states['help.faq']['static_content'][0]['pregunta']); $this->assertSame(['html' => ''], $states['help.terms-and-conditions']['static_content']); $this->assertArrayNotHasKey('help.contact', $states); } public function test_toggling_a_help_menu_preserves_its_static_content(): void { [$tenant, $faq, $content] = $this->tenantWithHelpMenus(); Sanctum::actingAs($this->createAdminAppUser($tenant)); $this->patchJson('/api/v1/adminapp/tenant/help-menus/help.faq/toggle') ->assertOk() ->assertJsonPath('data.code', 'help.faq') ->assertJsonPath('data.is_enabled', true); $pivot = $tenant->menues()->where('menues.code', $faq->code)->firstOrFail()->pivot; $this->assertTrue($pivot->is_enabled); $this->assertSame($content, $pivot->static_content); } public function test_an_unrelated_menu_cannot_be_toggled_from_the_help_endpoint(): void { [$tenant] = $this->tenantWithHelpMenus(); Sanctum::actingAs($this->createAdminAppUser($tenant)); $this->patchJson('/api/v1/adminapp/tenant/help-menus/catalog/toggle') ->assertNotFound(); } public function test_contact_menu_cannot_be_toggled(): void { [$tenant] = $this->tenantWithHelpMenus(); Sanctum::actingAs($this->createAdminAppUser($tenant)); $this->patchJson('/api/v1/adminapp/tenant/help-menus/help.contact/toggle') ->assertNotFound(); $this->assertTrue( $tenant->menues()->where('menues.code', 'help.contact')->firstOrFail()->pivot->is_enabled ); } public function test_adminapp_user_can_update_faq_content_without_changing_its_state(): void { [$tenant] = $this->tenantWithHelpMenus(); Sanctum::actingAs($this->createAdminAppUser($tenant)); $content = [[ 'pregunta' => '¿Cuál es el horario?', 'respuesta' => 'De lunes a viernes.', 'is_active' => true, ]]; $this->putJson('/api/v1/adminapp/tenant/help-menus/help.faq/content', [ 'static_content' => $content, ]) ->assertOk() ->assertJsonPath('data.is_enabled', false) ->assertJsonPath('data.static_content.0.pregunta', '¿Cuál es el horario?'); $pivot = $tenant->menues()->where('menues.code', 'help.faq')->firstOrFail()->pivot; $this->assertFalse($pivot->is_enabled); $this->assertSame($content, $pivot->static_content); } public function test_adminapp_user_can_update_terms_content(): void { [$tenant] = $this->tenantWithHelpMenus(); Sanctum::actingAs($this->createAdminAppUser($tenant)); $this->putJson('/api/v1/adminapp/tenant/help-menus/help.terms-and-conditions/content', [ 'static_content' => ['html' => '
Nuevos términos
'], ]) ->assertOk() ->assertJsonPath('data.static_content.html', 'Nuevos términos
'); $this->assertSame( ['html' => 'Nuevos términos
'], $tenant->menues() ->where('menues.code', 'help.terms-and-conditions') ->firstOrFail() ->pivot ->static_content ); } /** @return array{Tenant, Menu, array