Files
Reem-Notas/spec/requests/motorista_dashboard_spec.rb

108 lines
4.0 KiB
Ruby
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
require 'rails_helper'
# Trava a CONTABILIZAÇÃO DAS ENTREGAS SEM SUCESSO no painel do MOTORISTA.
#
# O painel do motorista ficou para trás quando o dashboard administrativo passou
# a usar `atendidas` (ver spec/requests/dashboard_spec.rb): continuava em `pagas`
# (só concluídas) e no eixo `planned_date`. O motorista via um valor MENOR do que
# ia receber — e a diferença só aparecia no fechamento, sem explicação.
#
# ⚠️ Sem sucesso TEM checkout: o motorista foi ao local e fechou a visita com
# motivo de insucesso. O deslocamento teve custo, a empresa paga, e o checkout é
# o eixo de data correto também para essas.
RSpec.describe 'Painel do motorista — contabilização das entregas sem sucesso', type: :request do
include ActiveSupport::Testing::TimeHelpers
include_context 'espelho de rastreio'
# O painel abre no MÊS CORRENTE (a estimativa vai até hoje), então congelamos a
# data: sem isso o spec quebraria sozinho ao rodar no dia 1º, com as datas
# semeadas caindo fora do mês corrente.
let(:hoje) { Date.new(2026, 8, 20) }
let(:preco) { 10.0 }
let(:nome) { 'JOSE DA SILVA' }
before do
travel_to(hoje)
create(:configuracao, chave: 'preco_entrega', valor: preco.to_s)
sign_in create(:motorista, nome: nome)
end
after { travel_back }
def abrir_painel
get motorista_dashboard_path
expect(response).to have_http_status(:ok)
response.body
end
it 'soma a entrega sem sucesso ao valor estimado' do
semear([
{ driver: nome, vehicle: 'GADE_001', status: 'completed',
planned_date: Time.zone.local(2026, 8, 5, 8, 0), checkout: Time.zone.local(2026, 8, 5, 10, 0) },
{ driver: nome, vehicle: 'GADE_001', status: 'failed',
planned_date: Time.zone.local(2026, 8, 6, 8, 0), checkout: Time.zone.local(2026, 8, 6, 11, 0) }
])
corpo = abrir_painel
# 2 atendidas × R$ 10,00 — com a base antiga (`pagas`) seria 1 e R$ 10,00.
expect(corpo).to include('2 entregas atendidas')
expect(corpo).to include('1 entregues · 1 sem sucesso')
expect(corpo).to include('R$ 20,00')
end
it 'conta a sem sucesso pela data do CHECKOUT, não pela planejada' do
# Planejada em 31/07 (fora do mês), fechada em 01/08 (dentro) → entra.
semear([
{ driver: nome, vehicle: 'GADE_002', status: 'failed',
planned_date: Time.zone.local(2026, 7, 31, 8, 0), checkout: Time.zone.local(2026, 8, 1, 9, 0) }
])
corpo = abrir_painel
expect(corpo).to include('1 entregas atendidas')
expect(corpo).to include('0 entregues · 1 sem sucesso')
end
it 'exclui a sem sucesso planejada no mês mas com checkout fora' do
# O espelho do caso acima: planejada em 10/08 (dentro), fechada em 01/09
# (fora) → não entra. Com o eixo antigo (planned_date) entrava.
semear([
{ driver: nome, vehicle: 'GADE_003', status: 'failed',
planned_date: Time.zone.local(2026, 8, 10, 8, 0), checkout: Time.zone.local(2026, 9, 1, 9, 0) }
])
corpo = abrir_painel
expect(corpo).to include('0 entregas atendidas')
expect(corpo).to include('0 entregues · 0 sem sucesso')
end
it 'não conta a entrega pendente, que ainda não tem checkout' do
semear([
{ driver: nome, vehicle: 'GADE_004', status: 'pending',
planned_date: Time.zone.local(2026, 8, 7, 8, 0), checkout: nil }
])
corpo = abrir_painel
expect(corpo).to include('0 entregas atendidas')
expect(corpo).to include('0 entregues · 0 sem sucesso')
end
it 'não mistura a entrega sem sucesso de outro motorista' do
semear([
{ driver: nome, vehicle: 'GADE_005', status: 'completed',
planned_date: Time.zone.local(2026, 8, 4, 8, 0), checkout: Time.zone.local(2026, 8, 4, 10, 0) },
{ driver: 'MARIA SOUZA', vehicle: 'GADE_006', status: 'failed',
planned_date: Time.zone.local(2026, 8, 4, 8, 0), checkout: Time.zone.local(2026, 8, 4, 15, 0) }
])
corpo = abrir_painel
expect(corpo).to include('1 entregas atendidas')
expect(corpo).to include('1 entregues · 0 sem sucesso')
expect(corpo).to include('R$ 10,00')
end
end