Compare commits

..

1 Commits

Author SHA1 Message Date
70d19a7c55 feat: CTA orientação no WhatsApp para indecisos (MAN-127)
All checks were successful
CI / static (pull_request) Successful in 2m25s
CI / unit (pull_request) Successful in 3m4s
CI / feature (pull_request) Successful in 2m53s
CI / container (pull_request) Successful in 1m13s
CI / browser (pull_request) Successful in 5m58s
Banda de modalidades passa a abrir wa.me com mensagem distinta (fallback /briefing). Glossário canônico vive em SPEC.md §8.0.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-13 23:16:05 -03:00
8 changed files with 98 additions and 161 deletions

View File

@@ -37,7 +37,7 @@ No lançamento, o site público premium e o CMS interno formam a superfície ent
## Operating Context
- Atuação em São Paulo, capital.
- Serviços: casamentos, eventos corporativos e celebrações. No site, casamento aparece como três **modalidades** (Essenza, Conduzione, Grand Jour); preço e limites comerciais ficam na proposta, não na página.
- Serviços: casamentos, eventos corporativos e celebrações.
- Operação realizada por assessora principal e equipe pequena.
- Jornada de lançamento: descoberta no site, briefing por e-mail e contato comercial fora da plataforma.
- Jornada futura prevista: qualificação do lead, pipeline comercial, conversão em evento, checklist, fornecedores, orçamento, pagamentos manuais e documentos.

27
SPEC.md
View File

@@ -1288,12 +1288,6 @@ Conceito de posicionamento (cuidado, especialização, múltiplos serviços sob
| Finance | Orçamento e pagamentos manuais |
| Identity | Usuários, acesso e auditoria |
Vocabulário público vs persistência (Marketing):
- **Modalidade** é o nome público de cada oferta de acompanhamento de casamento. O visitante vê o nome próprio (Essenza, Conduzione, Grand Jour) e a tag de momento (Completa, Parcial, Final). Persistida em `wedding_packages`.
- **Vertente** é o contexto da marca (Casamentos vs Corporate). A tabela `services` descreve vertentes do catálogo, não as três modalidades.
- **Pacote**, no sentido de SKU com preço e limites operacionais, não é superfície pública. Preço, equipe no dia, teto de fornecedores, quilometragem e ferramentas de terceiros (incluindo gestão de convidados) ficam na proposta, não no registro público da modalidade.
### 8.2 Tabelas obrigatórias
#### `users`
@@ -1354,27 +1348,6 @@ Singleton:
- timestamps;
- soft delete opcional somente se recuperação for necessária.
#### `wedding_packages`
Modalidades públicas de casamento (não confundir com `services`):
- `id`;
- `name`;
- `slug` unique;
- `level` (rótulo de momento, ex. `01 / COMPLETA`);
- `tag` nullable (ex. Assessoria completa);
- `subtitle` nullable;
- `summary`;
- `scope_items` jsonb (bullets de conceito nos cards);
- `cta_label`;
- `compare_heading` nullable;
- `compare_summary` nullable;
- campos editoriais da página `/pacotes/{slug}` (eyebrow, título, hero, benefícios, incluso em alto nível, audiência, CTA final, meta) — todos opcionais salvo o que a publicação exigir;
- `sort_order` integer indexed;
- `published_at` timestamp nullable indexed;
- timestamps;
- **sem** colunas de preço, centavos, equipe, limites de fornecedores/convidados/km ou ferramentas de terceiros.
#### `portfolio_cases`
- `id`;

View File

@@ -8,7 +8,7 @@ use App\Models\SiteSetting;
final class PackageContactLink
{
public const ORIENTATION_MESSAGE = 'Olá, ainda não sei qual modalidade de assessoria faz sentido para o meu casamento e gostaria de orientação.';
private const ORIENTATION_MESSAGE = 'Olá, ainda não sei qual modalidade de acompanhamento combina com o meu casamento e gostaria de orientação da Amare.';
/**
* Resolve the contextual contact link for a wedding package modality.
@@ -25,7 +25,7 @@ final class PackageContactLink
}
/**
* WhatsApp (or briefing fallback) when the visitor does not know which modality to choose.
* Resolve the orientation CTA for visitors who have not chosen a modality yet.
*
* @return array{href: string, isWhatsapp: bool}
*/

View File

@@ -9,10 +9,11 @@ use Illuminate\Database\Seeder;
use Illuminate\Support\Carbon;
/**
* Wedding package modalities shown on the home page, services page and
* `/pacotes/{slug}`. Public copy follows "Apresentação dos serviços Amare"
* (conceito e momento). Commercial limits, price and third-party tools stay
* off this seeder and off the public site.
* Wedding package modalities shown on the home page (03 Amare Casamentos)
* and the services page. Copy is approved from the structural model preview
* (preview(2).html) and remains editable via the Filament resource. Detail
* copy follows the complete-assessoria preview
* (amare-assessoria-completa.html) adapted to each modality.
*/
class WeddingPackagesSeeder extends Seeder
{
@@ -26,147 +27,141 @@ class WeddingPackagesSeeder extends Seeder
'slug' => 'essenza',
'level' => '01 / COMPLETA',
'tag' => 'Assessoria completa',
'subtitle' => 'Do primeiro planejamento ao grande dia.',
'summary' => 'Ideal para casais que desejam contar com a Amare desde o início da organização ou que ainda estão estruturando etapas importantes do casamento.',
'subtitle' => 'Do planejamento ao grande dia.',
'summary' => 'Para casais que desejam contar com a Amare desde o início ou ainda estão estruturando etapas importantes.',
'scope_items' => [
'Estruturação e acompanhamento do planejamento',
'Organização de cronogramas, prazos e prioridades',
'Orientação na contratação e gestão de fornecedores',
'Acompanhamento das etapas do projeto',
'Organização e conferência de contratos e informações',
'Alinhamento entre casal, fornecedores e demais envolvidos',
'Construção do cronograma do grande dia',
'Coordenação e acompanhamento da execução do evento',
'Estruturação do planejamento',
'Cronogramas, prazos e prioridades',
'Orientação e gestão de fornecedores',
'Alinhamento entre os envolvidos',
'Coordenação da execução',
],
'cta_label' => 'Quero conhecer a Essenza',
'compare_heading' => 'Começar com a Amare',
'compare_summary' => 'Acompanhamento do primeiro planejamento ao grande dia.',
'compare_summary' => 'Acompanhamento mais amplo ao longo do planejamento.',
'sort_order' => 1,
'eyebrow' => 'Assessoria',
'title_line' => 'Assessoria',
'title_emphasis' => 'Completa',
'hero_lead' => 'A assessoria completa acompanha o projeto de forma estratégica e próxima, desde a construção do planejamento até a execução do evento.',
'hero_lead' => 'Do planejamento ao grande dia, com calma, precisão e cuidado.',
'benefits' => [
['icon_key' => 'calendar', 'label' => 'Planejamento organizado'],
['icon_key' => 'checklist', 'label' => 'Decisões mais seguras'],
['icon_key' => 'users', 'label' => 'Fornecedores alinhados'],
['icon_key' => 'heart', 'label' => 'Grande dia com leveza'],
['icon_key' => 'calendar', 'label' => 'Organização integral'],
['icon_key' => 'checklist', 'label' => 'Planejamento personalizado'],
['icon_key' => 'users', 'label' => 'Fornecedores selecionados'],
['icon_key' => 'heart', 'label' => 'Experiência leve e inesquecível'],
],
'included_items' => [
['icon_key' => 'checklist', 'title' => 'Estruturação do planejamento', 'description' => 'Organização do projeto desde o início, no ritmo do casal.'],
['icon_key' => 'calendar', 'title' => 'Cronogramas e prioridades', 'description' => 'Prazos e etapas visíveis para decidir com calma.'],
['icon_key' => 'map', 'title' => 'Contratação e gestão de fornecedores', 'description' => 'Orientação e acompanhamento de quem entra no projeto.'],
['icon_key' => 'users', 'title' => 'Alinhamento entre envolvidos', 'description' => 'Casal, fornecedores e demais partes na mesma conversa.'],
['icon_key' => 'spark', 'title' => 'Contratos e informações', 'description' => 'Conferência do que foi combinado antes do grande dia.'],
['icon_key' => 'heart', 'title' => 'Coordenação da execução', 'description' => 'Acompanhamento do evento para o casal viver o momento.'],
['icon_key' => 'heart', 'title' => 'Escuta e briefing', 'description' => 'Cada casal é único; começamos por ouvir.'],
['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.'],
['icon_key' => 'calendar', 'title' => 'Acompanhamento contínuo', 'description' => 'Perto do casal em cada decisão.'],
['icon_key' => 'spark', 'title' => 'Produção e logística', 'description' => 'Dia a dia do evento organizado nos detalhes.'],
['icon_key' => 'users', 'title' => 'Dia do evento', 'description' => 'Coordenação total para o casal viver o momento.'],
],
'audience_heading' => 'Para quem é esta modalidade',
'audience_intro' => 'Para quem deseja ter ao lado uma profissional conduzindo o processo como um todo, com organização, estratégia e tranquilidade.',
'audience_heading' => 'Para quem é este pacote',
'audience_intro' => 'Para quem quer uma assessoria completa, do início ao fim.',
'audience_points' => [
'Casais no início da organização',
'Quem ainda está estruturando etapas importantes',
'Quem quer acompanhamento do planejamento à execução',
'Casamentos',
'Aniversários',
'Eventos sociais e celebrações',
'Eventos corporativos',
],
'final_cta_heading' => 'Vamos nos conhecer?',
'final_cta_body' => 'Antes de definir qualquer caminho, queremos conhecer vocês. Basta entrar em contato para uma conversa.',
'final_cta_heading' => 'Pronta para começar?',
'final_cta_body' => 'Conte seu evento para a Amare e receba uma proposta.',
],
[
'name' => 'Conduzione',
'slug' => 'conduzione',
'level' => '02 / PARCIAL',
'tag' => 'Assessoria parcial',
'subtitle' => 'Para quem já começou, mas quer seguir acompanhado.',
'summary' => 'Indicada para casais que já iniciaram o planejamento e possuem parte dos fornecedores ou decisões definidas, mas desejam organizar o que falta e conduzir as próximas etapas.',
'subtitle' => 'Para quem já começou e quer seguir acompanhado.',
'summary' => 'Para casais que já tomaram decisões e contrataram parte dos fornecedores, mas precisam estruturar o que falta.',
'scope_items' => [
'Diagnóstico do planejamento já realizado',
'Organização das etapas pendentes',
'Gestão e acompanhamento dos fornecedores contratados',
'Orientação sobre as próximas decisões',
'Acompanhamento de prazos e informações',
'Comunicação e alinhamento com fornecedores',
'Organização do cronograma do evento',
'Coordenação da execução no grande dia',
'Diagnóstico do planejamento existente',
'Organização das pendências',
'Gestão dos fornecedores contratados',
'Orientação para próximas decisões',
'Coordenação da execução',
],
'cta_label' => 'Quero conhecer a Conduzione',
'compare_heading' => 'Trazer a Amare para o caminho',
'compare_summary' => 'O planejamento existe; a Amare organiza o que falta e conduz as próximas etapas.',
'compare_summary' => 'O planejamento existe, mas ainda há decisões e gestão pela frente.',
'sort_order' => 2,
'eyebrow' => 'Assessoria',
'title_line' => 'Assessoria',
'title_emphasis' => 'Parcial',
'hero_lead' => 'A Amare entra no momento em que vocês estão, compreende o que já foi construído e assume a gestão das etapas necessárias dentro do planejamento.',
'hero_lead' => 'Para retomar o planejamento, organizar o que falta e seguir com acompanhamento profissional.',
'benefits' => [
['icon_key' => 'checklist', 'label' => 'Diagnóstico do que já existe'],
['icon_key' => 'calendar', 'label' => 'Pendências organizadas'],
['icon_key' => 'users', 'label' => 'Fornecedores acompanhados'],
['icon_key' => 'heart', 'label' => 'Próximas decisões com clareza'],
['icon_key' => 'checklist', 'label' => 'Diagnóstico completo'],
['icon_key' => 'calendar', 'label' => 'Organização integral'],
['icon_key' => 'users', 'label' => 'Fornecedores selecionados'],
['icon_key' => 'heart', 'label' => 'Experiência leve e inesquecível'],
],
'included_items' => [
['icon_key' => 'checklist', 'title' => 'Diagnóstico do planejamento', 'description' => 'Um olhar profissional sobre o que o casal já construiu.'],
['icon_key' => 'calendar', 'title' => 'Etapas pendentes', 'description' => 'O que falta ganha ordem, prazo e prioridade.'],
['icon_key' => 'map', 'title' => 'Fornecedores já contratados', 'description' => 'Gestão e comunicação com quem já está no projeto.'],
['icon_key' => 'spark', 'title' => 'Próximas decisões', 'description' => 'Orientação para seguir sem retrabalho.'],
['icon_key' => 'users', 'title' => 'Cronograma do evento', 'description' => 'A operação do grande dia começa a ficar visível.'],
['icon_key' => 'heart', 'title' => 'Coordenação no grande dia', 'description' => 'Execução acompanhada para o casal viver o momento.'],
['icon_key' => 'checklist', 'title' => 'Diagnóstico do planejamento', 'description' => 'Um olhar profissional sobre o que já existe.'],
['icon_key' => 'calendar', 'title' => 'Organização das pendências', 'description' => 'Prioridades claras, etapa a etapa.'],
['icon_key' => 'map', 'title' => 'Gestão de fornecedores', 'description' => 'Contatos e prazos sob cuidado.'],
['icon_key' => 'spark', 'title' => 'Gestão dos próximos passos', 'description' => 'Um plano para chegar tranquilo ao grande dia.'],
['icon_key' => 'users', 'title' => 'Acompanhamento contínuo', 'description' => 'Perto do casal em cada decisão.'],
['icon_key' => 'heart', 'title' => 'Dia do evento', 'description' => 'Coordenação total para o casal viver o momento.'],
],
'audience_heading' => 'Para quem é esta modalidade',
'audience_intro' => 'Para quem já deu os primeiros passos, mas deseja seguir com mais segurança, organização e tranquilidade.',
'audience_heading' => 'Para quem é este pacote',
'audience_intro' => 'Para quem já começou a planejar e quer retomar as rédeas com acompanhamento profissional.',
'audience_points' => [
'Casais que já iniciaram o planejamento',
'Quem já tem parte dos fornecedores ou decisões definidas',
'Quem quer condução profissional nas etapas que faltam',
'Casamentos em andamento',
'Casais com pouco tempo disponível',
'Quem precisa priorizar pendências',
'Quem busca fornecedores confiáveis',
],
'final_cta_heading' => 'Vamos organizar o que falta?',
'final_cta_body' => 'Conte onde o planejamento está. A Amare entra nesse momento e conduz as próximas etapas.',
'final_cta_heading' => 'Pronta para retomar?',
'final_cta_body' => 'Conte onde seu planejamento está e receba uma proposta.',
],
[
'name' => 'Grand Jour',
'slug' => 'grand-jour',
'level' => '03 / FINAL',
'tag' => 'Assessoria final',
'subtitle' => 'Para quem já planejou e precisa de alguém para assumir a operação.',
'summary' => 'Indicada para casais que estão na reta final dos preparativos e já possuem a maior parte do casamento definida.',
'subtitle' => 'O planejamento está pronto. Agora é hora de viver.',
'summary' => 'Para casais na reta final que precisam de uma equipe para assumir alinhamentos, cronograma e operação.',
'scope_items' => [
'Imersão no planejamento existente',
'Conferência das informações e contratos dos fornecedores',
'Alinhamento e comunicação com os profissionais envolvidos',
'Conferência das informações',
'Alinhamento dos fornecedores',
'Organização do cronograma final',
'Orientação sobre os últimos detalhes',
'Coordenação dos fornecedores no evento',
'Acompanhamento da montagem e dos momentos do casamento',
'Gestão da operação durante o grande dia',
'Gestão da operação do evento',
],
'cta_label' => 'Quero conhecer a Grand Jour',
'compare_heading' => 'Entregar a operação para a Amare',
'compare_summary' => 'O projeto está pronto; o foco passa a ser alinhamento e execução.',
'compare_summary' => 'O projeto está pronto e o foco passa a ser alinhamento e execução.',
'sort_order' => 3,
'eyebrow' => 'Assessoria',
'title_line' => 'Assessoria',
'title_emphasis' => 'Final',
'hero_lead' => 'A Amare assume a condução operacional, mergulha no planejamento construído pelo casal e transforma as informações em uma execução organizada e alinhada.',
'hero_lead' => 'Para assumir os alinhamentos e a operação quando o grande dia está próximo.',
'benefits' => [
['icon_key' => 'checklist', 'label' => 'Imersão no planejamento'],
['icon_key' => 'users', 'label' => 'Fornecedores alinhados'],
['icon_key' => 'checklist', 'label' => 'Imersão no que já existe'],
['icon_key' => 'users', 'label' => 'Alinhamento de fornecedores'],
['icon_key' => 'calendar', 'label' => 'Cronograma final'],
['icon_key' => 'heart', 'label' => 'Operação no grande dia'],
['icon_key' => 'heart', 'label' => 'Operação com leveza'],
],
'included_items' => [
['icon_key' => 'checklist', 'title' => 'Imersão no planejamento', 'description' => 'A Amare mergulha no que o casal já decidiu.'],
['icon_key' => 'map', 'title' => 'Contratos e informações', 'description' => 'Conferência do combinado com cada profissional.'],
['icon_key' => 'users', 'title' => 'Alinhamento dos envolvidos', 'description' => 'Comunicação centralizada na reta final.'],
['icon_key' => 'calendar', 'title' => 'Cronograma final', 'description' => 'A operação do grande dia ganha ordem.'],
['icon_key' => 'spark', 'title' => 'Últimos detalhes', 'description' => 'Orientação para fechar o que ainda falta.'],
['icon_key' => 'heart', 'title' => 'Gestão da operação', 'description' => 'Montagem, momentos e condução no dia do casamento.'],
['icon_key' => 'checklist', 'title' => 'Imersão no planejamento', 'description' => 'Entendemos cada decisão já tomada.'],
['icon_key' => 'map', 'title' => 'Alinhamento de fornecedores', 'description' => 'Contatos e prazos sob cuidado.'],
['icon_key' => 'calendar', 'title' => 'Cronograma final', 'description' => 'Cada etapa posicionada na reta final.'],
['icon_key' => 'spark', 'title' => 'Ensaios e detalhes', 'description' => 'Produção e logística nos detalhes.'],
['icon_key' => 'users', 'title' => 'Operação do evento', 'description' => 'Gestão da equipe e do dia a dia.'],
['icon_key' => 'heart', 'title' => 'Dia do evento', 'description' => 'Coordenação total para o casal viver o momento.'],
],
'audience_heading' => 'Para quem é esta modalidade',
'audience_intro' => 'Porque, na reta final, vocês não precisam de mais tarefas. Precisam de alguém que assuma a condução.',
'audience_heading' => 'Para quem é este pacote',
'audience_intro' => 'Para casais já planejados que querem chegar ao grande dia com equipe e operação no lugar.',
'audience_points' => [
'Casais na reta final dos preparativos',
'Quem já definiu a maior parte do casamento',
'Quem quer entregar a operação do grande dia',
'Casamentos já planejados',
'Casais na reta final',
'Quem precisa de operação no dia',
'Quem quer viver o momento com leveza',
],
'final_cta_heading' => 'Vamos assumir a operação?',
'final_cta_body' => 'Conte a data e o que já está definido. A Amare entra para conduzir o grande dia.',
'final_cta_heading' => 'Pronta para o grande dia?',
'final_cta_body' => 'Conte a data do seu evento e receba uma proposta.',
],
];

View File

@@ -14,6 +14,11 @@
'note' => 'Nomenclaturas exibidas conforme materiais/reunião; confirmar versão final antes da publicação.',
])
@php
$orientationLink = \App\Support\PackageContactLink::forOrientation($settings);
$bandHref = $bandCtaHref ?? $orientationLink['href'];
$bandIsWhatsapp = $bandCtaHref === null && $orientationLink['isWhatsapp'];
@endphp
<section
aria-labelledby="packages-heading"
class="home-chapter border-b border-amare-border bg-amare-bg"
@@ -69,16 +74,12 @@
</div>
@endif
@php($orientationLink = \App\Support\PackageContactLink::forOrientation($settings))
@php($bandHref = filled($bandCtaHref) ? $bandCtaHref : $orientationLink['href'])
@php($bandIsWhatsapp = ! filled($bandCtaHref) && $orientationLink['isWhatsapp'])
<div class="mt-6 flex flex-col justify-between gap-8 bg-amare-accent-deep p-8 text-amare-accent-text md:flex-row md:items-center md:p-12" data-reveal data-reveal-from="up">
<div class="max-w-xl space-y-3">
<h3 class="text-[clamp(1.5625rem,2.7vw,2.125rem)] font-medium leading-tight">Ainda não sabe qual modalidade é ideal?</h3>
<p class="text-amare-accent-text/80">{{ $bandBody }}</p>
</div>
<a
data-testid="package-guidance-cta"
href="{{ $bandHref }}"
@if ($bandIsWhatsapp) target="_blank" rel="noopener noreferrer" @endif
class="inline-flex min-h-[48px] items-center justify-center self-start border border-amare-accent-text px-6 text-xs font-bold uppercase tracking-[0.09em] text-amare-accent-text transition-colors hover:bg-amare-accent-text hover:text-amare-accent-deep md:self-auto"

View File

@@ -38,33 +38,6 @@ class WeddingPackageTest extends TestCase
['Essenza', 'Conduzione', 'Grand Jour'],
WeddingPackage::query()->published()->orderBy('sort_order')->pluck('name')->all(),
);
$essenza = WeddingPackage::query()->where('name', 'Essenza')->first();
$this->assertNotNull($essenza);
$this->assertSame('Assessoria completa', $essenza->tag);
$this->assertSame('Do primeiro planejamento ao grande dia.', $essenza->subtitle);
$this->assertStringContainsString('desde o início da organização', (string) $essenza->summary);
$this->assertContains('Estruturação e acompanhamento do planejamento', $essenza->scope_items);
$this->assertSame(
['Casais no início da organização', 'Quem ainda está estruturando etapas importantes', 'Quem quer acompanhamento do planejamento à execução'],
$essenza->audience_points,
);
$publicCopy = WeddingPackage::query()->published()->get()->map(fn (WeddingPackage $package): string => json_encode([
$package->summary,
$package->subtitle,
$package->hero_lead,
$package->scope_items,
$package->included_items,
$package->audience_intro,
$package->final_cta_body,
], JSON_THROW_ON_ERROR))->implode(' ');
$this->assertStringNotContainsString('R$', $publicCopy);
$this->assertStringNotContainsString('3.500', $publicCopy);
$this->assertStringNotContainsString('Assessoria VIP', $publicCopy);
$this->assertStringNotContainsString('90 km', $publicCopy);
$this->assertStringNotContainsString('3,49%', $publicCopy);
}
public function test_factory_generates_a_slug_and_autofills_blank_slug_from_name(): void

View File

@@ -8,7 +8,6 @@ use App\Models\PortfolioCase;
use App\Models\SiteSetting;
use App\Models\Testimonial;
use App\Models\WeddingPackage;
use App\Support\PackageContactLink;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
@@ -215,9 +214,8 @@ class HomePageContentTest extends TestCase
)
->assertSee('target="_blank"', false)
->assertDontSee(route('briefing', ['servico_interesse' => 'Grand Jour']), false)
->assertSee('data-testid="package-guidance-cta"', false)
->assertSee(
'https://wa.me/5511988887777?text='.rawurlencode(PackageContactLink::ORIENTATION_MESSAGE),
'https://wa.me/5511988887777?text='.rawurlencode('Olá, ainda não sei qual modalidade de acompanhamento combina com o meu casamento e gostaria de orientação da Amare.'),
false,
);
}
@@ -231,7 +229,10 @@ class HomePageContentTest extends TestCase
$response
->assertOk()
->assertSee('href="'.route('briefing').'"', false)
->assertDontSee(PackageContactLink::ORIENTATION_MESSAGE, false);
->assertDontSee(
'Olá, ainda não sei qual modalidade de acompanhamento combina com o meu casamento e gostaria de orientação da Amare.',
false,
);
}
public function test_corporate_steps_and_placeholder_render_from_settings(): void

View File

@@ -6,7 +6,6 @@ namespace Tests\Feature\PublicSite;
use App\Models\SiteSetting;
use App\Models\WeddingPackage;
use App\Support\PackageContactLink;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
@@ -32,12 +31,7 @@ class ServicesPageCtaTest extends TestCase
false,
)
->assertSee('target="_blank"', false)
->assertDontSee(route('briefing', ['servico_interesse' => 'Grand Jour']), false)
->assertSee('data-testid="package-guidance-cta"', false)
->assertSee(
'https://wa.me/5511988887777?text='.rawurlencode(PackageContactLink::ORIENTATION_MESSAGE),
false,
);
->assertDontSee(route('briefing', ['servico_interesse' => 'Grand Jour']), false);
}
public function test_package_cta_falls_back_to_briefing_without_whatsapp_number(): void
@@ -66,7 +60,7 @@ class ServicesPageCtaTest extends TestCase
$response
->assertOk()
->assertSee(
'https://wa.me/5511988887777?text='.rawurlencode(PackageContactLink::ORIENTATION_MESSAGE),
'https://wa.me/5511988887777?text='.rawurlencode('Olá, ainda não sei qual modalidade de acompanhamento combina com o meu casamento e gostaria de orientação da Amare.'),
false,
);
}