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