205 lines
9.7 KiB
Python
205 lines
9.7 KiB
Python
import unittest
|
|
from flask import Flask, g
|
|
from functions.database import db, Militante, Celula, Setor, CR, CC
|
|
from functions.permissions import (
|
|
can_manage_militante, can_manage_celula, can_manage_setor, can_manage_cr, can_manage_cc,
|
|
can_manage_financas, can_manage_imprensa, can_manage_responsabilidades
|
|
)
|
|
|
|
class TestPermissions(unittest.TestCase):
|
|
def setUp(self):
|
|
self.app = Flask(__name__)
|
|
self.app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///:memory:'
|
|
self.app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
|
|
db.init_app(self.app)
|
|
|
|
with self.app.app_context():
|
|
db.create_all()
|
|
|
|
# Criar instâncias
|
|
self.cc = CC(nome='CC 1')
|
|
db.session.add(self.cc)
|
|
|
|
self.cr = CR(nome='CR 1', cc=self.cc)
|
|
db.session.add(self.cr)
|
|
|
|
self.setor = Setor(nome='Setor 1', cr=self.cr)
|
|
db.session.add(self.setor)
|
|
|
|
self.celula = Celula(nome='Célula 1', setor=self.setor)
|
|
db.session.add(self.celula)
|
|
|
|
# Criar militantes com diferentes responsabilidades
|
|
self.militante_basico = Militante(
|
|
nome='Militante Básico',
|
|
email='basico@example.com',
|
|
celula=self.celula,
|
|
responsabilidades=Militante.MILITANTE_BASICO
|
|
)
|
|
db.session.add(self.militante_basico)
|
|
|
|
self.secretario_celula = Militante(
|
|
nome='Secretário de Célula',
|
|
email='celula@example.com',
|
|
celula=self.celula,
|
|
responsabilidades=Militante.SECRETARIO_CELULA
|
|
)
|
|
db.session.add(self.secretario_celula)
|
|
|
|
self.secretario_setor = Militante(
|
|
nome='Secretário de Setor',
|
|
email='setor@example.com',
|
|
celula=self.celula,
|
|
responsabilidades=Militante.SECRETARIO_SETOR
|
|
)
|
|
db.session.add(self.secretario_setor)
|
|
|
|
self.secretario_cr = Militante(
|
|
nome='Secretário de CR',
|
|
email='cr@example.com',
|
|
celula=self.celula,
|
|
responsabilidades=Militante.SECRETARIO_CR
|
|
)
|
|
db.session.add(self.secretario_cr)
|
|
|
|
self.secretario_cc = Militante(
|
|
nome='Secretário de CC',
|
|
email='cc@example.com',
|
|
celula=self.celula,
|
|
responsabilidades=Militante.SECRETARIO_CC
|
|
)
|
|
db.session.add(self.secretario_cc)
|
|
|
|
self.secretario_geral = Militante(
|
|
nome='Secretário Geral',
|
|
email='geral@example.com',
|
|
celula=self.celula,
|
|
responsabilidades=Militante.SECRETARIO_GERAL
|
|
)
|
|
db.session.add(self.secretario_geral)
|
|
|
|
self.responsavel_financas = Militante(
|
|
nome='Responsável de Finanças',
|
|
email='financas@example.com',
|
|
celula=self.celula,
|
|
responsabilidades=Militante.RESPONSAVEL_FINANCAS
|
|
)
|
|
db.session.add(self.responsavel_financas)
|
|
|
|
self.responsavel_imprensa = Militante(
|
|
nome='Responsável de Imprensa',
|
|
email='imprensa@example.com',
|
|
celula=self.celula,
|
|
responsabilidades=Militante.RESPONSAVEL_IMPRENSA
|
|
)
|
|
db.session.add(self.responsavel_imprensa)
|
|
|
|
# Atribuir responsáveis às instâncias
|
|
self.celula.responsavel_geral = self.secretario_celula
|
|
self.celula.responsavel_financas = self.responsavel_financas
|
|
self.celula.responsavel_imprensa = self.responsavel_imprensa
|
|
|
|
self.setor.responsavel_geral = self.secretario_setor
|
|
self.setor.responsavel_financas = self.responsavel_financas
|
|
self.setor.responsavel_imprensa = self.responsavel_imprensa
|
|
|
|
self.cr.responsavel_geral = self.secretario_cr
|
|
self.cr.responsavel_financas = self.responsavel_financas
|
|
self.cr.responsavel_imprensa = self.responsavel_imprensa
|
|
|
|
self.cc.responsavel_geral = self.secretario_cc
|
|
self.cc.responsavel_financas = self.responsavel_financas
|
|
self.cc.responsavel_imprensa = self.responsavel_imprensa
|
|
|
|
db.session.commit()
|
|
|
|
def test_can_manage_militante(self):
|
|
with self.app.app_context():
|
|
# Militante básico não pode gerenciar outros militantes
|
|
g.user = type('User', (), {'militante': self.militante_basico})
|
|
self.assertFalse(can_manage_militante(self.militante_basico.id))
|
|
|
|
# Secretário de célula pode gerenciar militantes da sua célula
|
|
g.user = type('User', (), {'militante': self.secretario_celula})
|
|
self.assertTrue(can_manage_militante(self.militante_basico.id))
|
|
|
|
# Secretário de setor pode gerenciar militantes do seu setor
|
|
g.user = type('User', (), {'militante': self.secretario_setor})
|
|
self.assertTrue(can_manage_militante(self.militante_basico.id))
|
|
|
|
# Secretário de CR pode gerenciar militantes do seu CR
|
|
g.user = type('User', (), {'militante': self.secretario_cr})
|
|
self.assertTrue(can_manage_militante(self.militante_basico.id))
|
|
|
|
# Secretário de CC pode gerenciar militantes do seu CC
|
|
g.user = type('User', (), {'militante': self.secretario_cc})
|
|
self.assertTrue(can_manage_militante(self.militante_basico.id))
|
|
|
|
# Secretário Geral pode gerenciar qualquer militante
|
|
g.user = type('User', (), {'militante': self.secretario_geral})
|
|
self.assertTrue(can_manage_militante(self.militante_basico.id))
|
|
|
|
def test_can_manage_financas(self):
|
|
with self.app.app_context():
|
|
# Militante básico não pode gerenciar finanças
|
|
g.user = type('User', (), {'militante': self.militante_basico})
|
|
self.assertFalse(can_manage_financas(self.celula.id, 'celula'))
|
|
|
|
# Responsável de finanças pode gerenciar finanças da sua instância
|
|
g.user = type('User', (), {'militante': self.responsavel_financas})
|
|
self.assertTrue(can_manage_financas(self.celula.id, 'celula'))
|
|
self.assertTrue(can_manage_financas(self.setor.id, 'setor'))
|
|
self.assertTrue(can_manage_financas(self.cr.id, 'cr'))
|
|
self.assertTrue(can_manage_financas(self.cc.id, 'cc'))
|
|
|
|
# Secretário Geral pode gerenciar finanças de qualquer instância
|
|
g.user = type('User', (), {'militante': self.secretario_geral})
|
|
self.assertTrue(can_manage_financas(self.celula.id, 'celula'))
|
|
self.assertTrue(can_manage_financas(self.setor.id, 'setor'))
|
|
self.assertTrue(can_manage_financas(self.cr.id, 'cr'))
|
|
self.assertTrue(can_manage_financas(self.cc.id, 'cc'))
|
|
|
|
def test_can_manage_imprensa(self):
|
|
with self.app.app_context():
|
|
# Militante básico não pode gerenciar imprensa
|
|
g.user = type('User', (), {'militante': self.militante_basico})
|
|
self.assertFalse(can_manage_imprensa(self.celula.id, 'celula'))
|
|
|
|
# Responsável de imprensa pode gerenciar imprensa da sua instância
|
|
g.user = type('User', (), {'militante': self.responsavel_imprensa})
|
|
self.assertTrue(can_manage_imprensa(self.celula.id, 'celula'))
|
|
self.assertTrue(can_manage_imprensa(self.setor.id, 'setor'))
|
|
self.assertTrue(can_manage_imprensa(self.cr.id, 'cr'))
|
|
self.assertTrue(can_manage_imprensa(self.cc.id, 'cc'))
|
|
|
|
# Secretário Geral pode gerenciar imprensa de qualquer instância
|
|
g.user = type('User', (), {'militante': self.secretario_geral})
|
|
self.assertTrue(can_manage_imprensa(self.celula.id, 'celula'))
|
|
self.assertTrue(can_manage_imprensa(self.setor.id, 'setor'))
|
|
self.assertTrue(can_manage_imprensa(self.cr.id, 'cr'))
|
|
self.assertTrue(can_manage_imprensa(self.cc.id, 'cc'))
|
|
|
|
def test_can_manage_responsabilidades(self):
|
|
with self.app.app_context():
|
|
# Militante básico não pode gerenciar responsabilidades
|
|
g.user = type('User', (), {'militante': self.militante_basico})
|
|
self.assertFalse(can_manage_responsabilidades(self.militante_basico.id))
|
|
|
|
# Secretário de setor pode gerenciar responsabilidades do seu setor
|
|
g.user = type('User', (), {'militante': self.secretario_setor})
|
|
self.assertTrue(can_manage_responsabilidades(self.militante_basico.id))
|
|
|
|
# Secretário de CR pode gerenciar responsabilidades do seu CR
|
|
g.user = type('User', (), {'militante': self.secretario_cr})
|
|
self.assertTrue(can_manage_responsabilidades(self.militante_basico.id))
|
|
|
|
# Secretário de CC pode gerenciar responsabilidades do seu CC
|
|
g.user = type('User', (), {'militante': self.secretario_cc})
|
|
self.assertTrue(can_manage_responsabilidades(self.militante_basico.id))
|
|
|
|
# Secretário Geral pode gerenciar responsabilidades de qualquer militante
|
|
g.user = type('User', (), {'militante': self.secretario_geral})
|
|
self.assertTrue(can_manage_responsabilidades(self.militante_basico.id))
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main() |