from django.contrib.auth import get_user_model from django.test import Client, TestCase from django.urls import reverse from ..acesso import usuario_pode_gerenciar_permissoes from ..models import ConfiguracaoSGMP, UsuarioSistema User = get_user_model() class UsuarioPodeGerenciarPermissoesLogicTests(TestCase): def setUp(self): self.cfg = ConfiguracaoSGMP.load() self.cfg.perfis_gerenciar_permissoes = [UsuarioSistema.Perfil.ADMIN] self.cfg.save() def test_gestor_negado_quando_so_admin(self): u = UsuarioSistema( matricula="1", nome="Gestor", perfil=UsuarioSistema.Perfil.GESTOR, ativo=True, ) self.assertFalse(usuario_pode_gerenciar_permissoes(u)) def test_admin_permitido(self): u = UsuarioSistema( matricula="2", nome="Admin", perfil=UsuarioSistema.Perfil.ADMIN, ativo=True, ) self.assertTrue(usuario_pode_gerenciar_permissoes(u)) def test_gg_permitido_quando_config_inclui_gg(self): self.cfg.perfis_gerenciar_permissoes = [ UsuarioSistema.Perfil.ADMIN, UsuarioSistema.Perfil.GG, ] self.cfg.save() u = UsuarioSistema( matricula="3", nome="GG", perfil=UsuarioSistema.Perfil.GG, ativo=True, ) self.assertTrue(usuario_pode_gerenciar_permissoes(u)) def test_inativo_negado(self): u = UsuarioSistema( matricula="4", nome="Admin off", perfil=UsuarioSistema.Perfil.ADMIN, ativo=False, ) self.assertFalse(usuario_pode_gerenciar_permissoes(u)) class GerenciarPermissoesViewTests(TestCase): def setUp(self): ConfiguracaoSGMP.objects.all().delete() self.cfg = ConfiguracaoSGMP.load() self.cfg.perfis_gerenciar_permissoes = [UsuarioSistema.Perfil.ADMIN] self.cfg.save() User.objects.create_user(username="10", password="secret") UsuarioSistema.objects.create( matricula="10", nome="Gestor", perfil=UsuarioSistema.Perfil.GESTOR, ativo=True, ) User.objects.create_user(username="20", password="secret") UsuarioSistema.objects.create( matricula="20", nome="Admin", perfil=UsuarioSistema.Perfil.ADMIN, ativo=True, ) self.url = reverse("solicitacoes:gerenciar_permissoes") self.client = Client() def test_gestor_redireciona_dashboard(self): self.client.login(username="10", password="secret") r = self.client.get(self.url) self.assertEqual(r.status_code, 302) self.assertEqual(r["Location"], reverse("solicitacoes:dashboard")) def test_admin_ok(self): self.client.login(username="20", password="secret") r = self.client.get(self.url) self.assertEqual(r.status_code, 200)