require 'rails_helper' RSpec.describe Notificacao::Renderizador do let(:dados) { { 'contato' => 'Carlos', 'valor' => 'R$ 5.060,00', 'entregas' => '280' } } def render(blocos) = described_class.new(blocos, dados) describe 'as duas saídas do mesmo template' do let(:blocos) do [ { 'tipo' => 'cabecalho', 'titulo' => 'Pagamento fechado', 'subtitulo' => 'UBS Norte' }, { 'tipo' => 'texto', 'texto' => 'Olá {{contato}}!' }, { 'tipo' => 'tabela', 'linhas' => [{ 'rotulo' => 'Entregas', 'valor' => '{{entregas}}' }, { 'rotulo' => 'Valor', 'valor' => '{{valor}}' }] }, { 'tipo' => 'botao', 'rotulo' => 'Ver extrato', 'url' => 'https://app.reem.com.br/motorista' } ] end it 'monta o texto do WhatsApp com negrito e bullets' do texto = render(blocos).texto expect(texto).to include('*Pagamento fechado*') expect(texto).to include('Olá Carlos!') expect(texto).to include('• Entregas: 280') expect(texto).to include('Ver extrato: https://app.reem.com.br/motorista') end it 'monta o HTML do e-mail com estilo inline' do html = render(blocos).html expect(html).to include(' 'texto', 'texto' => 'Oi {{inexistente}}!' }]).texto expect(texto).to eq('Oi !') end # O corpo é digitado numa tela e o preview usa este mesmo renderizador — um # escape faltando atingiria primeiro o próprio admin. it 'escapa HTML do texto digitado e do valor da variável' do r = described_class.new( [{ 'tipo' => 'texto', 'texto' => ' {{contato}}' }], { 'contato' => '' } ) html = r.html expect(html).not_to include('