91 lines
3.1 KiB
Ruby
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
|