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, UsuarioPerfilExtra, 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) class TodasSolicitacoesPerfilCombinadoTests(TestCase): def setUp(self): self.client = Client() self.url = reverse("solicitacoes:todas_solicitacoes") User.objects.create_user(username="30", password="secret") self.usuario = UsuarioSistema.objects.create( matricula="30", nome="GG com perfil Gestor", perfil=UsuarioSistema.Perfil.GG, ativo=True, ) UsuarioPerfilExtra.objects.create( usuario=self.usuario, perfil=UsuarioSistema.Perfil.GESTOR, ) def test_usuario_com_gg_e_gestor_acessa_todas_solicitacoes(self): self.client.login(username="30", password="secret") r = self.client.get(self.url) self.assertEqual(r.status_code, 200) def test_eh_apenas_gestor_false_quando_ha_perfil_operacional(self): self.assertFalse(self.usuario.eh_apenas_gestor())