require 'rails_helper' RSpec.describe ConsolidacaoEntrega, type: :model do describe 'validações' do it 'exige tracking_id, motorista_nome, tipo e valor_aplicado' do ce = ConsolidacaoEntrega.new ce.valid? expect(ce.errors[:tracking_id]).to be_present expect(ce.errors[:motorista_nome]).to be_present expect(ce.errors[:valor_aplicado]).to be_present end it 'rejeita valor_aplicado negativo' do expect(build(:consolidacao_entrega, valor_aplicado: -1)).not_to be_valid end it 'não permite o mesmo tracking_id com o MESMO tipo na consolidação' do consolidacao = create(:consolidacao) create(:consolidacao_entrega, consolidacao: consolidacao, tracking_id: 'TRK-1', tipo: :entrega_normal) dup = build(:consolidacao_entrega, consolidacao: consolidacao, tracking_id: 'TRK-1', tipo: :entrega_normal) expect(dup).not_to be_valid end it 'permite o mesmo tracking_id com pilares DIFERENTES (multi-pilar)' do consolidacao = create(:consolidacao) create(:consolidacao_entrega, consolidacao: consolidacao, tracking_id: 'TRK-1', tipo: :entrega_normal) outro = build(:consolidacao_entrega, consolidacao: consolidacao, tracking_id: 'TRK-1', tipo: :bonus) expect(outro).to be_valid end it 'permite o mesmo tracking_id em consolidações diferentes' do create(:consolidacao_entrega, tracking_id: 'TRK-X') outra = build(:consolidacao_entrega, tracking_id: 'TRK-X') expect(outra).to be_valid end end describe '#tipo_cor' do it 'retorna o mapa de cores do tipo' do ce = build(:consolidacao_entrega, tipo: :retirada) expect(ce.tipo_cor[:label]).to eq('Retirada') end end end