Implandação da customização das permissões dos usuarios e das notificaçoes
This commit is contained in:
89
spec/requests/controle_de_acesso_spec.rb
Normal file
89
spec/requests/controle_de_acesso_spec.rb
Normal file
@@ -0,0 +1,89 @@
|
||||
require 'rails_helper'
|
||||
|
||||
# As três falhas de acesso que existiam antes dos perfis. Cada exemplo aqui é um
|
||||
# furo real que foi fechado — se algum voltar a passar "verde ao contrário", o
|
||||
# sistema regrediu para o estado em que qualquer usuário virava admin.
|
||||
RSpec.describe 'Controle de acesso', type: :request do
|
||||
describe 'auto-promoção a administrador' do
|
||||
it 'ignora role e perfil enviados por quem edita a PRÓPRIA ficha' do
|
||||
operador = create(:operador)
|
||||
perfil_total = create(:perfil_acesso, permissoes: Permissao.chaves)
|
||||
sign_in operador
|
||||
|
||||
patch admin_usuario_path(operador), params: {
|
||||
user: { nome: 'Nome Novo', role: 'admin', perfil_acesso_id: perfil_total.id }
|
||||
}
|
||||
|
||||
operador.reload
|
||||
expect(operador.nome).to eq('Nome Novo') # o que ele PODE mudar, mudou
|
||||
expect(operador.role).to eq('operador') # o que ele não pode, não mudou
|
||||
expect(operador.perfil_acesso_id).to be_nil
|
||||
expect(operador.pode?('admin.usuarios_gerenciar')).to be(false)
|
||||
end
|
||||
|
||||
it 'quem administra usuários continua podendo trocar o perfil de outra pessoa' do
|
||||
perfil_admin = create(:perfil_acesso, permissoes: Permissao.chaves)
|
||||
admin = create(:admin, perfil_acesso: perfil_admin)
|
||||
alvo = create(:operador)
|
||||
novo = create(:perfil_acesso, nome: 'Financeiro', permissoes: ['consolidacao.ver'])
|
||||
sign_in admin
|
||||
|
||||
patch admin_usuario_path(alvo), params: { user: { nome: alvo.nome, perfil_acesso_id: novo.id } }
|
||||
|
||||
expect(alvo.reload.perfil_acesso_id).to eq(novo.id)
|
||||
end
|
||||
end
|
||||
|
||||
describe 'papel externo no dashboard' do
|
||||
it 'entra no dashboard mas não vê custo nem pagamento' do
|
||||
sign_in create(:externo)
|
||||
|
||||
get dashboard_path
|
||||
expect(response).to have_http_status(:ok)
|
||||
expect(response.body).not_to include('Consolidado / Pago')
|
||||
expect(response.body).not_to include('Ticket médio')
|
||||
end
|
||||
|
||||
it 'não baixa o relatório financeiro nem abre as entregas em aberto' do
|
||||
sign_in create(:externo)
|
||||
|
||||
get dashboard_relatorio_financeiro_path
|
||||
expect(response).to have_http_status(:redirect)
|
||||
|
||||
get dashboard_pendentes_path
|
||||
expect(response).to have_http_status(:redirect)
|
||||
end
|
||||
|
||||
it 'gerente continua vendo o financeiro' do
|
||||
sign_in create(:gerente)
|
||||
|
||||
get dashboard_path
|
||||
expect(response.body).to include('Consolidado / Pago')
|
||||
end
|
||||
end
|
||||
|
||||
describe 'conta desativada' do
|
||||
it 'não faz login por e-mail e senha' do
|
||||
usuario = create(:gerente, ativo: false, password: 'Gade@2026!')
|
||||
|
||||
post user_session_path, params: { user: { email: usuario.email, password: 'Gade@2026!' } }
|
||||
|
||||
expect(response).not_to redirect_to(dashboard_path)
|
||||
expect(controller.current_user).to be_nil
|
||||
end
|
||||
end
|
||||
|
||||
describe 'sem nenhuma permissão' do
|
||||
it 'cai na tela de sem-acesso em vez de entrar em loop com a raiz' do
|
||||
usuario = create(:operador, perfil_acesso: create(:perfil_acesso, permissoes: []))
|
||||
sign_in usuario
|
||||
|
||||
get dashboard_path
|
||||
expect(response).to redirect_to(sem_acesso_path)
|
||||
|
||||
get sem_acesso_path
|
||||
expect(response).to have_http_status(:ok)
|
||||
expect(response.body).to include('não tem acesso')
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user