Criação da visão geral da consolidação por motorista
This commit is contained in:
90
spec/requests/totais_por_motorista_spec.rb
Normal file
90
spec/requests/totais_por_motorista_spec.rb
Normal file
@@ -0,0 +1,90 @@
|
||||
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
|
||||
Reference in New Issue
Block a user