Files
amare/tests/Feature/PublicSite/PackageDetailTest.php
manoel freitas 400c147a74 feat: CTA dos cards e faixa de modalidades enviam ao WhatsApp com mensagem por pacote
Campo whatsapp_message editável por modalidade (Filament) com fallback para
template padrão. Cards da home, faixa 'Conversar com a Amare' e CTA final
da página de detalhe abrem o WhatsApp diretamente quando número configurado,
mantendo briefing como fallback.
2026-08-12 10:11:06 -03:00

139 lines
5.1 KiB
PHP

<?php
declare(strict_types=1);
namespace Tests\Feature\PublicSite;
use App\Models\SiteSetting;
use App\Models\WeddingPackage;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
class PackageDetailTest extends TestCase
{
use RefreshDatabase;
public function test_published_package_renders_all_detail_sections(): void
{
SiteSetting::instance();
$package = WeddingPackage::factory()->published()->create([
'slug' => 'essenza',
'eyebrow' => 'Assessoria',
'title_line' => 'Assessoria',
'title_emphasis' => 'Completa',
'hero_lead' => 'Do planejamento ao grande dia, com calma, precisão e cuidado.',
'benefits' => [
['icon_key' => 'calendar', 'label' => 'Organização integral'],
['icon_key' => 'users', 'label' => 'Fornecedores selecionados'],
],
'included_items' => [
['icon_key' => 'checklist', 'title' => 'Planejamento completo', 'description' => 'Cada etapa mapeada com clareza.'],
['icon_key' => 'map', 'title' => 'Gestão de fornecedores', 'description' => 'Contatos e prazos sob cuidado.'],
],
'audience_heading' => 'Para quem é este pacote',
'audience_intro' => 'Para quem quer uma assessoria completa, do início ao fim.',
'audience_points' => ['Casamentos', 'Eventos corporativos'],
'final_cta_heading' => 'Pronta para começar?',
'final_cta_body' => 'Conte seu evento para a Amare e receba uma proposta.',
]);
$response = $this->get(route('packages.show', $package->slug));
$response
->assertOk()
->assertSee('Assessoria')
->assertSee('Completa')
->assertSee('Do planejamento ao grande dia, com calma, precisão e cuidado.')
->assertSee('Organização integral')
->assertSee('Fornecedores selecionados')
->assertSee('O que está incluso')
->assertSee('Planejamento completo')
->assertSee('Cada etapa mapeada com clareza.')
->assertSee('Gestão de fornecedores')
->assertSee('Para quem é este pacote')
->assertSee('Casamentos')
->assertSee('Eventos corporativos')
->assertSee('Pronta para começar?')
->assertSee('Conte seu evento para a Amare e receba uma proposta.')
->assertSee('Solicitar proposta');
}
public function test_draft_package_returns_404(): void
{
SiteSetting::instance();
$package = WeddingPackage::factory()->create([
'slug' => 'rascunho-interno',
'title_line' => 'Rascunho',
]);
$response = $this->get(route('packages.show', $package->slug));
$response->assertNotFound();
}
public function test_unknown_slug_returns_404(): void
{
SiteSetting::instance();
$this->get(route('packages.show', 'inexistente'))->assertNotFound();
}
public function test_package_cta_uses_whatsapp_when_a_number_is_configured(): void
{
SiteSetting::instance()->update(['whatsapp_number' => '+55 11 98888-7777']);
$package = WeddingPackage::factory()->published()->create([
'name' => 'Essenza',
]);
$response = $this->get(route('packages.show', $package->slug));
$response
->assertOk()
->assertSee(
'https://wa.me/5511988887777?text='.rawurlencode('Olá, gostaria de conversar sobre a modalidade Essenza para meu casamento.'),
false,
)
->assertSee('target="_blank"', false)
->assertDontSee(route('briefing', ['servico_interesse' => 'Essenza']), false);
}
public function test_package_final_cta_uses_custom_whatsapp_message_when_provided(): void
{
SiteSetting::instance()->update(['whatsapp_number' => '+55 11 98888-7777']);
$package = WeddingPackage::factory()->published()->create([
'name' => 'Essenza',
'whatsapp_message' => 'Olá, tenho interesse na assessoria Essenza. Podem me passar mais detalhes?',
]);
$response = $this->get(route('packages.show', $package->slug));
$response
->assertOk()
->assertSee(
'https://wa.me/5511988887777?text='.rawurlencode('Olá, tenho interesse na assessoria Essenza. Podem me passar mais detalhes?'),
false,
)
->assertDontSee('gostaria de conversar sobre a modalidade Essenza para meu casamento', false);
}
public function test_package_cta_falls_back_to_briefing_without_whatsapp_number(): void
{
SiteSetting::instance();
$package = WeddingPackage::factory()->published()->create([
'name' => 'Essenza',
]);
$response = $this->get(route('packages.show', $package->slug));
$response
->assertOk()
->assertSee(route('briefing', ['servico_interesse' => 'Essenza']), false)
->assertDontSee('wa.me/', false);
}
}