Implandação da customização das permissões dos usuarios e das notificaçoes
This commit is contained in:
101
spec/requests/admin/perfis_acesso_spec.rb
Normal file
101
spec/requests/admin/perfis_acesso_spec.rb
Normal file
@@ -0,0 +1,101 @@
|
||||
require 'rails_helper'
|
||||
|
||||
# Perfis de acesso: quem entra na tela, e as travas que impedem o ADM de se
|
||||
# trancar para fora do próprio sistema.
|
||||
RSpec.describe 'Admin::PerfisAcesso', type: :request do
|
||||
# Perfil com acesso total, para o usuário que administra nos testes.
|
||||
let(:perfil_admin) { create(:perfil_acesso, nome: 'Administrador', permissoes: Permissao.chaves) }
|
||||
let(:administrador) { create(:admin, perfil_acesso: perfil_admin) }
|
||||
|
||||
describe 'quem entra' do
|
||||
it 'exige login' do
|
||||
get admin_perfis_path
|
||||
expect(response).to redirect_to(new_user_session_path)
|
||||
end
|
||||
|
||||
it 'nega quem não tem admin.perfis' do
|
||||
sign_in create(:gerente, perfil_acesso: create(:perfil_acesso, permissoes: ['consolidacao.ver']))
|
||||
get admin_perfis_path
|
||||
expect(response).to have_http_status(:redirect)
|
||||
end
|
||||
|
||||
it 'permite quem tem admin.perfis' do
|
||||
sign_in administrador
|
||||
get admin_perfis_path
|
||||
expect(response).to have_http_status(:ok)
|
||||
end
|
||||
end
|
||||
|
||||
describe 'criar e editar' do
|
||||
before { sign_in administrador }
|
||||
|
||||
it 'cria perfil só com as chaves do catálogo' do
|
||||
post admin_perfis_path, params: {
|
||||
perfil_acesso: { nome: 'Financeiro', descricao: 'Paga',
|
||||
ativo: '1', permissoes: ['consolidacao.ver', 'inventada.chave'] }
|
||||
}
|
||||
|
||||
perfil = PerfilAcesso.find_by(nome: 'Financeiro')
|
||||
expect(perfil.permissoes).to eq(['consolidacao.ver'])
|
||||
end
|
||||
|
||||
it 'desmarcar tudo realmente zera as permissões' do
|
||||
perfil = create(:perfil_acesso, permissoes: ['consolidacao.ver'])
|
||||
|
||||
# O form manda um valor vazio quando nenhuma caixa está marcada; sem ele o
|
||||
# parâmetro sumiria e "desmarcar tudo" viraria "não mexeu".
|
||||
patch admin_perfil_path(perfil), params: {
|
||||
perfil_acesso: { nome: perfil.nome, ativo: '1', permissoes: [''] }
|
||||
}
|
||||
|
||||
expect(perfil.reload.permissoes).to eq([])
|
||||
end
|
||||
end
|
||||
|
||||
describe 'trava do último administrador' do
|
||||
before { sign_in administrador }
|
||||
|
||||
it 'impede tirar admin.perfis do único perfil que administra' do
|
||||
patch admin_perfil_path(perfil_admin), params: {
|
||||
perfil_acesso: { nome: perfil_admin.nome, ativo: '1',
|
||||
permissoes: Permissao.chaves - ['admin.perfis'] }
|
||||
}
|
||||
|
||||
expect(response).to have_http_status(:unprocessable_entity)
|
||||
expect(perfil_admin.reload.permissoes).to include('admin.perfis')
|
||||
end
|
||||
|
||||
it 'libera quando outra pessoa mantém o acesso' do
|
||||
outro = create(:perfil_acesso, nome: 'Admin 2', permissoes: Permissao.chaves)
|
||||
create(:admin, perfil_acesso: outro)
|
||||
|
||||
patch admin_perfil_path(perfil_admin), params: {
|
||||
perfil_acesso: { nome: perfil_admin.nome, ativo: '1',
|
||||
permissoes: Permissao.chaves - ['admin.perfis'] }
|
||||
}
|
||||
|
||||
expect(perfil_admin.reload.permissoes).not_to include('admin.perfis')
|
||||
end
|
||||
end
|
||||
|
||||
describe 'exclusão' do
|
||||
before { sign_in administrador }
|
||||
|
||||
it 'não exclui perfil de sistema' do
|
||||
perfil = create(:perfil_acesso, sistema: true)
|
||||
expect { delete admin_perfil_path(perfil) }.not_to change(PerfilAcesso, :count)
|
||||
end
|
||||
|
||||
it 'não exclui perfil em uso' do
|
||||
perfil = create(:perfil_acesso)
|
||||
create(:operador, perfil_acesso: perfil)
|
||||
|
||||
expect { delete admin_perfil_path(perfil) }.not_to change(PerfilAcesso, :count)
|
||||
end
|
||||
|
||||
it 'exclui perfil livre' do
|
||||
perfil = create(:perfil_acesso)
|
||||
expect { delete admin_perfil_path(perfil) }.to change(PerfilAcesso, :count).by(-1)
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user