48 lines
1.8 KiB
Ruby
48 lines
1.8 KiB
Ruby
require 'rails_helper'
|
|
|
|
# É o que dispensa a SEGUNDA PLANILHA do programa Python: o STATUS (NOVO/RECORRENTE)
|
|
# já está na tabela da operação.
|
|
RSpec.describe Romaneios::EnriquecimentoGade do
|
|
include_context 'tabela de operação'
|
|
|
|
let(:tabela) { "#{Operacao::PREFIXO}teste_jan_2026" }
|
|
|
|
it 'marca APARELHO = SIM só para quem está como NOVO' do
|
|
criar_operacao!(tabela)
|
|
semear_operacao!(tabela, [
|
|
{ nota_fiscal: '1', nome_completo: 'Novo Paciente', telefones: '(11) 1',
|
|
status: 'NOVO' },
|
|
{ nota_fiscal: '2', nome_completo: 'Velho Paciente', telefones: '(11) 2',
|
|
status: 'RECORRENTE' }
|
|
])
|
|
|
|
dados = described_class.new(tabela).para_notas(%w[1 2])
|
|
|
|
expect(dados['1'][:aparelho]).to eq('SIM')
|
|
expect(dados['2'][:aparelho]).to eq('')
|
|
expect(dados['1'][:nome]).to eq('NOVO PACIENTE')
|
|
expect(dados['2'][:telefones]).to eq('(11) 2')
|
|
end
|
|
|
|
it 'não quebra quando a operação não tem a coluna status — e AVISA qual falta' do
|
|
criar_operacao!(tabela, colunas: %i[nome_completo telefones])
|
|
semear_operacao!(tabela, [{ nota_fiscal: '1', nome_completo: 'Fulano', telefones: '(11) 1' }])
|
|
|
|
servico = described_class.new(tabela)
|
|
|
|
expect(servico.colunas_ausentes).to eq(['status'])
|
|
expect(servico.para_notas(['1'])['1'][:aparelho]).to eq('')
|
|
end
|
|
|
|
it 'omite a NF que não está na operação (é o plano avulso / de inclusão)' do
|
|
criar_operacao!(tabela)
|
|
semear_operacao!(tabela, [{ nota_fiscal: '1', status: 'NOVO' }])
|
|
|
|
expect(described_class.new(tabela).para_notas(%w[1 999])).not_to have_key('999')
|
|
end
|
|
|
|
it 'recusa nome de tabela fora da whitelist de operações' do
|
|
expect { described_class.new('users; DROP TABLE users') }.to raise_error(ArgumentError)
|
|
end
|
|
end
|