correção de bugs na area de Dashbord
This commit is contained in:
@@ -120,3 +120,101 @@ RSpec.describe 'Dashboard — contabilização de falhas', type: :request do
|
||||
expect(corpo).to include('R$ 30,00') # total estimado do período
|
||||
end
|
||||
end
|
||||
|
||||
# Trava a ABA "CONSOLIDADO" do card de motoristas.
|
||||
#
|
||||
# O card tem duas abas sobre o mesmo ranking e elas mostram números diferentes de
|
||||
# propósito: "Estimado" = atendidas × preço; "Consolidado" = o que realmente foi
|
||||
# fechado (com bônus/desconto/retirada) + a quantidade de entregas do fechamento.
|
||||
# Confundir as duas é justamente o que este spec impede.
|
||||
RSpec.describe 'Dashboard — aba Consolidado do ranking de motoristas', type: :request do
|
||||
include_context 'espelho de rastreio'
|
||||
|
||||
let(:inicio) { '2026-08-01' }
|
||||
let(:fim) { '2026-08-14' }
|
||||
|
||||
before do
|
||||
create(:configuracao, chave: 'preco_entrega', valor: '10.0')
|
||||
sign_in create(:gerente)
|
||||
end
|
||||
|
||||
# Só o conteúdo da aba consolidada: a aba estimada renderiza o MESMO markup
|
||||
# (moeda + "N entregas"), então asserção no body inteiro passaria por acidente.
|
||||
def painel_consolidado
|
||||
get dashboard_path, params: { inicio: inicio, fim: fim }
|
||||
expect(response).to have_http_status(:ok)
|
||||
Nokogiri::HTML(response.body).at_css('#ranking-painel-consolidado').text
|
||||
end
|
||||
|
||||
# cria as entregas ANTES do motorista: ConsolidacaoMotorista#recalcular_valor
|
||||
# (before_save) soma as consolidacao_entregas do mesmo nome — sem elas o
|
||||
# valor_total nasceria zerado.
|
||||
def consolidar!(nome, linhas, consolidacao)
|
||||
linhas.each { |l| create(:consolidacao_entrega, { consolidacao: consolidacao, motorista_nome: nome }.merge(l)) }
|
||||
create(:consolidacao_motorista, consolidacao: consolidacao, motorista_nome: nome)
|
||||
end
|
||||
|
||||
let(:consolidacao) do
|
||||
create(:consolidacao, status: :finalizada,
|
||||
data_inicio: Date.new(2026, 8, 1), data_fim: Date.new(2026, 8, 14))
|
||||
end
|
||||
|
||||
it 'mostra o valor fechado e a quantidade exata de entregas de cada motorista' do
|
||||
# JOSE: 2 entregas (TRK-A e TRK-B). TRK-A tem DOIS pilares (normal + bônus),
|
||||
# então são 3 linhas para 2 entregas — é o caso que quebra se alguém contar
|
||||
# linhas em vez de tracking_id distinto.
|
||||
consolidar!('JOSE DA SILVA', [
|
||||
{ tracking_id: 'TRK-A', tipo: :entrega_normal, valor_aplicado: 10.0 },
|
||||
{ tracking_id: 'TRK-A', tipo: :bonus, valor_aplicado: 5.0 },
|
||||
{ tracking_id: 'TRK-B', tipo: :entrega_normal, valor_aplicado: 10.0 }
|
||||
], consolidacao)
|
||||
|
||||
consolidar!('MARIA SOUZA', [
|
||||
{ tracking_id: 'TRK-C', tipo: :entrega_normal, valor_aplicado: 10.0 }
|
||||
], consolidacao)
|
||||
|
||||
texto = painel_consolidado
|
||||
|
||||
expect(texto).to include('JOSE DA SILVA')
|
||||
expect(texto).to include('R$ 25,00') # 10 + 5 + 10, valor REAL do fechamento
|
||||
expect(texto).to include('2 entregas') # e NÃO 3: TRK-A conta uma vez só
|
||||
|
||||
expect(texto).to include('MARIA SOUZA')
|
||||
expect(texto).to include('R$ 10,00')
|
||||
expect(texto).to include('1 entregas')
|
||||
end
|
||||
|
||||
it 'subtrai o desconto do valor fechado' do
|
||||
consolidar!('JOSE DA SILVA', [
|
||||
{ tracking_id: 'TRK-A', tipo: :entrega_normal, valor_aplicado: 10.0 },
|
||||
{ tracking_id: 'TRK-A', tipo: :desconto, valor_aplicado: 4.0 }
|
||||
], consolidacao)
|
||||
|
||||
expect(painel_consolidado).to include('R$ 6,00')
|
||||
end
|
||||
|
||||
it 'não lista motorista arquivado, que saiu do fechamento' do
|
||||
consolidar!('JOSE DA SILVA', [
|
||||
{ tracking_id: 'TRK-A', tipo: :entrega_normal, valor_aplicado: 10.0 }
|
||||
], consolidacao)
|
||||
cm = consolidar!('MARIA SOUZA', [
|
||||
{ tracking_id: 'TRK-C', tipo: :entrega_normal, valor_aplicado: 10.0 }
|
||||
], consolidacao)
|
||||
cm.arquivar!(nil)
|
||||
|
||||
texto = painel_consolidado
|
||||
|
||||
expect(texto).to include('JOSE DA SILVA')
|
||||
expect(texto).not_to include('MARIA SOUZA')
|
||||
end
|
||||
|
||||
it 'ignora consolidação em rascunho — só entra o que foi finalizado' do
|
||||
rascunho = create(:consolidacao, status: :rascunho,
|
||||
data_inicio: Date.new(2026, 8, 1), data_fim: Date.new(2026, 8, 14))
|
||||
consolidar!('JOSE DA SILVA', [
|
||||
{ tracking_id: 'TRK-A', tipo: :entrega_normal, valor_aplicado: 10.0 }
|
||||
], rascunho)
|
||||
|
||||
expect(painel_consolidado).to include('Nenhuma consolidação finalizada neste período')
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user