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

91 lines
3.1 KiB
Ruby

require 'rails_helper'
# Rotas do relatório "total por motorista": quem entra, o que a tela mostra e o
# PDF. O drill-down (?motorista=) é o que responde "de onde vem esse valor".
RSpec.describe 'Totais por motorista', type: :request do
def consolidacao_finalizada(motorista:, valor:, nome: 'Fechamento Junho')
c = create(:consolidacao, nome: nome, status: :finalizada,
data_inicio: Date.new(2026, 6, 1), data_fim: Date.new(2026, 6, 30))
create(:consolidacao_entrega, consolidacao: c, motorista_nome: motorista, valor_aplicado: valor)
create(:consolidacao_motorista, consolidacao: c, motorista_nome: motorista)
c
end
let(:periodo) { { inicio: '2026-06-01', fim: '2026-06-30' } }
describe 'admin — /consolidacoes/totais' do
it 'exige login' do
get totais_consolidacoes_path
expect(response).to redirect_to(new_user_session_path)
end
it 'bloqueia motorista (Pundit)' do
sign_in create(:motorista)
get totais_consolidacoes_path
expect(response).to redirect_to(root_path)
end
it 'mostra o total do motorista no período' do
consolidacao_finalizada(motorista: 'Carlos', valor: 120.0)
sign_in create(:gerente)
get totais_consolidacoes_path(periodo)
expect(response).to have_http_status(:ok)
expect(response.body).to include('Carlos')
end
it 'abre a composição do motorista clicado' do
consolidacao_finalizada(motorista: 'Carlos', valor: 120.0, nome: 'Fechamento Junho')
sign_in create(:gerente)
get totais_consolidacoes_path(periodo.merge(motorista: 'Carlos'))
expect(response.body).to include('Composição de Carlos')
expect(response.body).to include('Fechamento Junho')
end
it 'gera o PDF' do
consolidacao_finalizada(motorista: 'Carlos', valor: 120.0)
sign_in create(:gerente)
get totais_pdf_consolidacoes_path(periodo)
expect(response).to have_http_status(:ok)
expect(response.media_type).to eq('application/pdf')
end
end
describe 'motorista — /motorista/totais' do
it 'mostra só o total dele e as consolidações que o compõem' do
motorista = create(:motorista, nome: 'Carlos')
consolidacao_finalizada(motorista: 'Carlos', valor: 120.0, nome: 'Fechamento Junho')
consolidacao_finalizada(motorista: 'Pedro', valor: 999.0, nome: 'Fechamento do Pedro')
sign_in motorista
get motorista_totais_path(periodo)
expect(response).to have_http_status(:ok)
expect(response.body).to include('Fechamento Junho')
expect(response.body).not_to include('Fechamento do Pedro')
end
it 'gera o PDF do período' do
motorista = create(:motorista, nome: 'Carlos')
consolidacao_finalizada(motorista: 'Carlos', valor: 120.0)
sign_in motorista
get motorista_totais_pdf_path(periodo)
expect(response).to have_http_status(:ok)
expect(response.media_type).to eq('application/pdf')
end
it 'não é acessível por quem não é motorista' do
sign_in create(:gerente)
get motorista_totais_path
expect(response).to redirect_to(dashboard_path)
end
end
end