Files
Reem-Notas/spec/services/romaneios/casador_de_operacao_spec.rb

79 lines
3.2 KiB
Ruby

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