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