79 lines
3.2 KiB
Ruby
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
|