require 'rails_helper' # Os nomes aqui são os REAIS, lidos da tela de Planos do SimpliRoute # (Imagens para correção/Imagem colada (11).png) e do cabeçalho do romaneio do # programa antigo: "ENTREGAS EMAD 09.2026", "UBS SUL E LESTE AGOSTO 2026", # "AVULSAS 3 EMAD/SUDESTE AGOSTO 2026". As três diferenças que quebram uma # comparação de texto — conectivo "E", mês abreviado x por extenso, e mês # NUMÉRICO ("09.2026") — estão todas cobertas. RSpec.describe Romaneios::CasadorDeOperacao do # Lista fixa: o teste é do CASAMENTO, não do catálogo do banco. let(:tabelas) do %w[ gade_entregas_emad_ago_2026 gade_entregas_emad_set_2026 gade_entregas_ubs_sul_leste_ago_2026 gade_entregas_ubs_norte_ago_2026 gade_entregas_ubs_oeste_ago_2026 gade_entregas_avulsas_3_emad_sudeste_ago_2026 gade_entregas_sudeste_julho_2026 ] end def casar(nome) = described_class.casar(nome, tabelas: tabelas) it 'casa o mês NUMÉRICO do plano com o mês abreviado da tabela' do # "09" só é lido como mês por vir colado ao ano — ver o "3" de AVULSAS abaixo. expect(casar('ENTREGAS EMAD 09.2026')).to eq('gade_entregas_emad_set_2026') end it 'casa o mês por extenso com a abreviação da tabela' do expect(casar('EMAD SETEMBRO 2026')).to eq('gade_entregas_emad_set_2026') expect(casar('EMAD AGOSTO 2026')).to eq('gade_entregas_emad_ago_2026') end it 'ignora o conectivo "E", que existe no plano e não no nome da tabela' do expect(casar('UBS SUL E LESTE AGOSTO 2026')).to eq('gade_entregas_ubs_sul_leste_ago_2026') end it 'não confunde UBS de regiões diferentes no mesmo mês' do expect(casar('UBS NORTE AGOSTO 2026')).to eq('gade_entregas_ubs_norte_ago_2026') expect(casar('UBS OESTE AGOSTO 2026')).to eq('gade_entregas_ubs_oeste_ago_2026') end it 'trata a barra como separador e não lê o "3" de AVULSAS como março' do expect(casar('AVULSAS 3 EMAD/SUDESTE AGOSTO 2026')) .to eq('gade_entregas_avulsas_3_emad_sudeste_ago_2026') end it 'não depende de maiúsculas nem de acento' do expect(casar('entregas emad 09.2026')).to eq('gade_entregas_emad_set_2026') end # ── O que NÃO pode casar ────────────────────────────────────────────────── # Vincular a operação errada é pior do que não vincular: APARELHO e TELEFONE # sairiam preenchidos com dados de OUTRO mês e ninguém desconfiaria. it 'devolve nil quando o mês não tem tabela' do expect(casar('EMAD DEZEMBRO 2026')).to be_nil end it 'devolve nil quando o mês bate mas a operação não existe' do expect(casar('CARDIOLOGIA AGOSTO 2026')).to be_nil end it 'devolve nil com nome vazio' do expect(casar('')).to be_nil end it 'devolve nil (e diz o motivo) quando duas operações empatam' do resultado = described_class.new( 'EMAD AGOSTO 2026', tabelas: %w[gade_entregas_emad_ago_2026 gade_entregas_emad_agosto_2026] ).resultado expect(resultado.tabela).to be_nil expect(resultado.confianca).to eq(:ambigua) expect(resultado.motivo).to include('escolha na lista') end end