mirror of https://github.com/interlegis/sapl.git
Eduardo Calil
8 years ago
16 changed files with 383 additions and 421 deletions
@ -1,45 +1,23 @@ |
|||
language: python |
|||
sudo: required |
|||
|
|||
python: |
|||
- "3.4.3" |
|||
- 3.4.3 |
|||
|
|||
|
|||
services: |
|||
- postgresql |
|||
|
|||
addons: |
|||
postgresql: "9.3" |
|||
|
|||
install: |
|||
- sudo apt-get install git nginx python3-dev libpq-dev graphviz-dev graphviz pkg-config python-psycopg2 nodejs npm |
|||
- sudo ln -s /usr/bin/node |
|||
- pip install -r requirements/test-requirements.txt |
|||
- pip install --upgrade setuptools |
|||
|
|||
# Line 24 to 35 is a hack found in this link below |
|||
# It was used to fix an error in database building |
|||
# https://dockyard.com/blog/ruby/2013/03/29/running-postgresql-9-2-on-travis-ci |
|||
|
|||
before_script: |
|||
- sudo /etc/init.d/postgresql stop |
|||
- sudo cp /etc/postgresql/9.2/main/pg_hba.conf ./ |
|||
- sudo apt-get remove postgresql postgresql-9.2 -qq --purge |
|||
- source /etc/lsb-release |
|||
- echo "deb http://apt.postgresql.org/pub/repos/apt/ $DISTRIB_CODENAME-pgdg main" > pgdg.list |
|||
- sudo mv pgdg.list /etc/apt/sources.list.d/ |
|||
- wget --quiet -O - http://apt.postgresql.org/pub/repos/apt/ACCC4CF8.asc | sudo apt-key add - |
|||
- sudo apt-get update |
|||
- sudo apt-get -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confnew" install postgresql-9.3 postgresql-contrib-9.3 -qq |
|||
- sudo /etc/init.d/postgresql stop |
|||
- sudo cp ./pg_hba.conf /etc/postgresql/9.3/main |
|||
- sudo /etc/init.d/postgresql start |
|||
- npm install -g bower |
|||
- cp .env_dev .env |
|||
- sed -i -e 's/getpass.getuser()/"postgres"/g' sapl/settings.py |
|||
- psql -c 'create database sapl;' -U postgres |
|||
- cp sapl/.env_test sapl/.env |
|||
- psql -c "CREATE USER sapl WITH PASSWORD 'sapl'" -U postgres; |
|||
- psql -c "CREATE DATABASE sapl OWNER sapl;" -U postgres |
|||
|
|||
script: |
|||
- ./manage.py migrate |
|||
- ./manage.py bower install |
|||
- pip freeze |
|||
- ./test_and_check_qa.sh |
|||
- py.test |
|||
# - ./test_and_check_qa.sh |
@ -1,188 +1,114 @@ |
|||
from django.apps import apps |
|||
from django.contrib.auth.models import Group, Permission, User |
|||
from django.contrib.contenttypes.models import ContentType |
|||
|
|||
|
|||
def cria_grupos_permissoes(): |
|||
|
|||
if not Group.objects.filter("Teste"): |
|||
pass |
|||
|
|||
# Cria todos os grupos necessários para a aplicação |
|||
|
|||
op_geral = Group.objects.get_or_create(name="Operador Geral") |
|||
op_prot = Group.objects.get_or_create(name="Operador de Protocolo") |
|||
op_sessao = Group.objects.get_or_create(name="Operador de Sessão") |
|||
op_comissao = Group.objects.get_or_create(name="Operador de Comissão") |
|||
op_adm = Group.objects.get_or_create(name="Operador de Administração") |
|||
op_norma = Group.objects.get_or_create(name="Operador de Norma Jurídica") |
|||
op_materia = Group.objects.get_or_create( |
|||
name="Operador de Matéria Legislativa") |
|||
op_painel = Group.objects.get_or_create(name="Operador de Painel") |
|||
op_autor = Group.objects.get_or_create(name="Autor") |
|||
|
|||
op_geral = op_geral[0] |
|||
op_prot = op_prot[0] |
|||
op_sessao = op_sessao[0] |
|||
op_comissao = op_comissao[0] |
|||
op_adm = op_adm[0] |
|||
op_norma = op_norma[0] |
|||
op_materia = op_materia[0] |
|||
op_painel = op_painel[0] |
|||
op_autor = op_autor[0] |
|||
|
|||
# Base |
|||
|
|||
permissao_add_cl = Permission.objects.get( |
|||
name="Can add Casa Legislativa") |
|||
permissao_edit_cl = Permission.objects.get( |
|||
name="Can change Casa Legislativa") |
|||
permissao_remove_cl = Permission.objects.get( |
|||
name="Can delete Casa Legislativa") |
|||
|
|||
permissoes_base = [permissao_add_cl, |
|||
permissao_edit_cl, |
|||
permissao_remove_cl] |
|||
def cria_ou_reseta_grupo(nome): |
|||
grupo = Group.objects.get_or_create(name=nome)[0] |
|||
for p in list(grupo.permissions.all()): |
|||
grupo.permissions.remove(p) |
|||
return grupo |
|||
|
|||
# Comissao |
|||
|
|||
cts = ContentType.objects.filter(app_label='comissoes') |
|||
perms_comissoes = list(Permission.objects.filter(content_type__in=cts)) |
|||
def cria_usuario(nome, grupo): |
|||
nome_usuario = nome |
|||
usuario = User.objects.get_or_create(username=nome_usuario)[0] |
|||
usuario.set_password('interlegis') |
|||
usuario.save() |
|||
grupo.user_set.add(usuario) |
|||
|
|||
# Materia |
|||
|
|||
cts = ContentType.objects.filter(app_label='materia') |
|||
perms_materia = list(Permission.objects.filter(content_type__in=cts)) |
|||
|
|||
# Norma |
|||
|
|||
cts = ContentType.objects.filter(app_label='norma') |
|||
perms_norma = list(Permission.objects.filter(content_type__in=cts)) |
|||
|
|||
# Painel |
|||
|
|||
cts = ContentType.objects.filter(app_label='painel') |
|||
perms_painel = list(Permission.objects.filter(content_type__in=cts)) |
|||
|
|||
# Parlamentares |
|||
def cria_grupos_permissoes(): |
|||
|
|||
cts = ContentType.objects.filter(app_label='parlamentares') |
|||
perms_parlamentares = list(Permission.objects.filter(content_type__in=cts)) |
|||
nomes_apps = ['base', 'parlamentares', 'comissoes', |
|||
'materia', 'norma', 'sessao', 'painel'] |
|||
|
|||
# ProtocoloADM e DOCADM |
|||
permissoes = {app: list(Permission.objects.filter( |
|||
content_type__in=ContentType.objects.filter(app_label=app))) |
|||
for app in nomes_apps} |
|||
|
|||
# permissoes específicas para protocolo e documento administrativo |
|||
cts = ContentType.objects.filter(app_label='protocoloadm') |
|||
|
|||
perms_docadm = list(Permission.objects.filter(content_type__in=cts)) |
|||
|
|||
cts_exc1 = cts.filter(model__icontains='tramitacao') |
|||
cts_exc2 = cts.filter(model__icontains='documentoadministrativo') |
|||
|
|||
cts = cts.exclude(id__in=[o.id for o in cts_exc1]) |
|||
cts = cts.exclude(id__in=[o.id for o in cts_exc2]) |
|||
|
|||
perms_protocoloadm = list(Permission.objects.filter(content_type__in=cts)) |
|||
|
|||
# Sessao |
|||
|
|||
cts = ContentType.objects.filter(app_label='sessao') |
|||
perms_sessao = list(Permission.objects.filter(content_type__in=cts)) |
|||
|
|||
# Painel |
|||
|
|||
cts = ContentType.objects.filter(app_label='painel') |
|||
perms_painel = list(Permission.objects.filter(content_type__in=cts)) |
|||
# documento administrativo |
|||
permissoes['documento_administrativo'] = list( |
|||
Permission.objects.filter(content_type__in=cts)) |
|||
nome_grupo = 'Operador Administrativo' |
|||
grupo = cria_ou_reseta_grupo(nome_grupo) |
|||
for p in permissoes['documento_administrativo']: |
|||
grupo.permissions.add(p) |
|||
|
|||
nome_usuario = 'operador_administrativo' |
|||
cria_usuario(nome_usuario, grupo) |
|||
|
|||
# prolocolo administrativo |
|||
cts = cts.exclude(model__icontains='tramitacao').exclude( |
|||
model__icontains='documentoadministrativo') |
|||
permissoes['protocoloadm'] = list( |
|||
Permission.objects.filter(content_type__in=cts)) |
|||
nome_grupo = 'Operador de Protocolo Administrativo' |
|||
grupo = cria_ou_reseta_grupo(nome_grupo) |
|||
for p in permissoes['protocoloadm']: |
|||
grupo.permissions.add(p) |
|||
|
|||
nome_usuario = 'operador_protocoloadm' |
|||
cria_usuario(nome_usuario, grupo) |
|||
|
|||
# permissoes do base |
|||
cts = ContentType.objects.filter(app_label='base') |
|||
permissoes['base'] = list( |
|||
Permission.objects.filter(content_type__in=cts)) |
|||
|
|||
for nome_app in nomes_apps: |
|||
|
|||
if nome_app not in {'base', 'parlamentares'}: |
|||
# Elimina casos especificos |
|||
|
|||
# Cria Grupo |
|||
nome_grupo = 'Operador de %s' % apps.get_app_config( |
|||
nome_app).verbose_name |
|||
grupo = cria_ou_reseta_grupo(nome_grupo) |
|||
|
|||
# Elimina o acesso a proposicoes pelo Operador de Matérias |
|||
if nome_app == 'materia': |
|||
cts = ContentType.objects.filter( |
|||
app_label='materia').exclude(model='proposicao') |
|||
permissoes['materia'] = list( |
|||
Permission.objects.filter(content_type__in=cts)) |
|||
|
|||
# Configura as permissoes |
|||
for p in permissoes[nome_app]: |
|||
grupo.permissions.add(p) |
|||
|
|||
# Cria o Usuario |
|||
nome_usuario = 'operador_%s' % nome_app |
|||
usuario = User.objects.get_or_create(username=nome_usuario)[0] |
|||
usuario.set_password('interlegis') |
|||
usuario.save() |
|||
grupo.user_set.add(usuario) |
|||
|
|||
# Operador Geral |
|||
grupo_geral = cria_ou_reseta_grupo('Operador Geral') |
|||
for lista in permissoes.values(): |
|||
for p in lista: |
|||
grupo_geral.permissions.add(p) |
|||
|
|||
nome_usuario = 'operador_geral' |
|||
cria_usuario(nome_usuario, grupo_geral) |
|||
|
|||
# Autor |
|||
|
|||
perms_autor = Permission.objects.get(name="Can add Proposição") |
|||
|
|||
# Configura Permissoes Operador de Protocolo |
|||
for p in perms_protocoloadm: |
|||
op_prot.permissions.add(p) |
|||
|
|||
# Configura Permissoes Operador de Sessao |
|||
for p in perms_sessao: |
|||
op_sessao.permissions.add(p) |
|||
|
|||
# Configura Permissoes Operador de Comissao |
|||
for p in perms_comissoes: |
|||
op_comissao.permissions.add(p) |
|||
|
|||
# Configura Permissoes Operador de Administracao |
|||
for p in perms_docadm: |
|||
op_adm.permissions.add(p) |
|||
|
|||
# Configura Permissoes Operador de Norma |
|||
for p in perms_norma: |
|||
op_norma.permissions.add(p) |
|||
|
|||
# Configura Permissoes Operador de Materia |
|||
for p in perms_materia: |
|||
op_materia.permissions.add(p) |
|||
|
|||
# Configura Permissoes Operador de Painel |
|||
for p in perms_painel: |
|||
op_painel.permissions.add(p) |
|||
perms_autor = [] |
|||
perms_autor.append(Permission.objects.get(name='Can add Proposição')) |
|||
perms_autor.append(Permission.objects.get(name='Can change Proposição')) |
|||
perms_autor.append(Permission.objects.get(name='Can delete Proposição')) |
|||
|
|||
# Configura Permissoes Autor |
|||
op_autor.permissions.add(perms_autor) |
|||
|
|||
# Configura Permissoes Operador Geral |
|||
perms_op_geral = perms_protocoloadm + perms_sessao + perms_comissoes |
|||
perms_op_geral = perms_op_geral + perms_docadm + perms_norma |
|||
perms_op_geral = perms_op_geral + perms_materia |
|||
perms_op_geral = perms_op_geral + perms_parlamentares + perms_painel |
|||
perms_op_geral = perms_op_geral + permissoes_base |
|||
|
|||
for p in perms_op_geral: |
|||
op_geral.permissions.add(p) |
|||
op_geral.permissions.add(perms_autor) |
|||
|
|||
# Cria usuarios |
|||
op_geral_user = User.objects.get_or_create(username='op_geral')[0] |
|||
op_geral_user.set_password('interlegis') |
|||
op_geral_user.save() |
|||
op_geral.user_set.add(op_geral_user) |
|||
|
|||
op_materia_user = User.objects.get_or_create(username='op_materia')[0] |
|||
op_materia_user.set_password('interlegis') |
|||
op_materia_user.save() |
|||
op_materia.user_set.add(op_materia_user) |
|||
|
|||
op_prot_user = User.objects.get_or_create(username='op_protocolo')[0] |
|||
op_prot_user.set_password('interlegis') |
|||
op_prot_user.save() |
|||
op_prot.user_set.add(op_prot_user) |
|||
|
|||
op_sessao_user = User.objects.get_or_create(username='op_sessao')[0] |
|||
op_sessao_user.set_password('interlegis') |
|||
op_sessao_user.save() |
|||
op_sessao.user_set.add(op_sessao_user) |
|||
|
|||
op_comissao_user = User.objects.get_or_create(username='op_comissao')[0] |
|||
op_comissao_user.set_password('interlegis') |
|||
op_comissao_user.save() |
|||
op_comissao.user_set.add(op_comissao_user) |
|||
|
|||
op_adm_user = User.objects.get_or_create(username='op_adm')[0] |
|||
op_adm_user.set_password('interlegis') |
|||
op_adm_user.save() |
|||
op_adm.user_set.add(op_adm_user) |
|||
|
|||
op_norma_user = User.objects.get_or_create(username='op_norma')[0] |
|||
op_norma_user.set_password('interlegis') |
|||
op_norma_user.save() |
|||
op_norma.user_set.add(op_norma_user) |
|||
|
|||
op_painel_user = User.objects.get_or_create(username='op_painel')[0] |
|||
op_painel_user.set_password('interlegis') |
|||
op_painel_user.save() |
|||
op_painel.user_set.add(op_norma_user) |
|||
|
|||
op_autor_user = User.objects.get_or_create(username='op_autor')[0] |
|||
op_autor_user.set_password('interlegis') |
|||
op_autor_user.save() |
|||
op_autor.user_set.add(op_autor_user) |
|||
grupo = cria_ou_reseta_grupo('Autor') |
|||
for p in perms_autor: |
|||
grupo.permissions.add(p) |
|||
|
|||
nome_usuario = 'operador_autor' |
|||
cria_usuario(nome_usuario, grupo_geral) |
|||
|
|||
if __name__ == '__main__': |
|||
cria_grupos_permissoes() |
|||
|
@ -0,0 +1,47 @@ |
|||
import pytest |
|||
from django.apps import apps |
|||
from django.contrib.auth.models import Group, Permission |
|||
from django.contrib.contenttypes.models import ContentType |
|||
|
|||
from inicializa_grupos_autorizacoes import cria_grupos_permissoes |
|||
|
|||
pytestmark = pytest.mark.django_db |
|||
|
|||
apps_com_permissao_padrao = [ |
|||
'comissoes', 'norma', 'sessao', 'painel'] |
|||
|
|||
|
|||
@pytest.mark.parametrize('app_label', apps_com_permissao_padrao) |
|||
def test_grupo_padrao_tem_permissoes_sobre_todo_o_app(app_label): |
|||
|
|||
app = apps.get_app_config(app_label) |
|||
|
|||
# código testado |
|||
cria_grupos_permissoes() |
|||
|
|||
def gerar_permissoes(app): |
|||
for model in app.get_models(): |
|||
for op in ['add', 'change', 'delete']: |
|||
yield model, 'Can %s %s' % (op, model._meta.verbose_name) |
|||
grupo = Group.objects.get(name='Operador de %s' % app.verbose_name) |
|||
esperado = set(gerar_permissoes(app)) |
|||
|
|||
real = set((p.content_type.model_class(), p.name) |
|||
for p in grupo.permissions.all()) |
|||
assert real == esperado |
|||
|
|||
|
|||
@pytest.mark.parametrize('app_label', apps_com_permissao_padrao) |
|||
def test_permissoes_extras_sao_apagadas(app_label): |
|||
|
|||
app = apps.get_app_config(app_label) |
|||
grupo = Group.objects.create(name='Operador de %s' % app.verbose_name) |
|||
|
|||
permissao_errada = Permission.objects.create( |
|||
name='STUB', content_type=ContentType.objects.first()) |
|||
grupo.permissions.add(permissao_errada) |
|||
|
|||
# código testado |
|||
cria_grupos_permissoes() |
|||
|
|||
assert not grupo.permissions.filter(id=permissao_errada.id).exists() |
Loading…
Reference in new issue