Browse Source

Adiciona testes para criação de grupos padrão

pull/505/head
Marcio Mazza 9 years ago
parent
commit
54d5eda423
  1. 16
      scripts/inicializa_grupos_autorizacoes.py
  2. 59
      scripts/test_inicializa_grupos_autorizacoes.py

16
scripts/inicializa_grupos_autorizacoes.py

@ -3,6 +3,12 @@ from django.contrib.auth.models import Group, Permission, User
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
def cria_ou_reseta_grupo(nome):
grupo = Group.objects.get_or_create(name=nome)[0]
grupo.permissions.all().delete()
return grupo
def cria_grupos_permissoes(): def cria_grupos_permissoes():
nomes_apps = ['base', 'parlamentares', 'comissoes', nomes_apps = ['base', 'parlamentares', 'comissoes',
@ -19,7 +25,7 @@ def cria_grupos_permissoes():
permissoes['documento_administrativo'] = list( permissoes['documento_administrativo'] = list(
Permission.objects.filter(content_type__in=cts)) Permission.objects.filter(content_type__in=cts))
nome_grupo = 'Operador Administrativo' nome_grupo = 'Operador Administrativo'
grupo = Group.objects.get_or_create(name=nome_grupo)[0] grupo = cria_ou_reseta_grupo(nome_grupo)
for p in permissoes['documento_administrativo']: for p in permissoes['documento_administrativo']:
grupo.permissions.add(p) grupo.permissions.add(p)
@ -35,7 +41,7 @@ def cria_grupos_permissoes():
permissoes['protocoloadm'] = list( permissoes['protocoloadm'] = list(
Permission.objects.filter(content_type__in=cts)) Permission.objects.filter(content_type__in=cts))
nome_grupo = 'Operador de Protocolo Administrativo' nome_grupo = 'Operador de Protocolo Administrativo'
grupo = Group.objects.get_or_create(name=nome_grupo)[0] grupo = cria_ou_reseta_grupo(nome_grupo)
for p in permissoes['protocoloadm']: for p in permissoes['protocoloadm']:
grupo.permissions.add(p) grupo.permissions.add(p)
@ -58,7 +64,7 @@ def cria_grupos_permissoes():
# Cria Grupo # Cria Grupo
nome_grupo = 'Operador de %s' % apps.get_app_config( nome_grupo = 'Operador de %s' % apps.get_app_config(
nome_app).verbose_name nome_app).verbose_name
grupo = Group.objects.get_or_create(name=nome_grupo)[0] grupo = cria_ou_reseta_grupo(nome_grupo)
# Elimina o acesso a proposicoes pelo Operador de Matérias # Elimina o acesso a proposicoes pelo Operador de Matérias
if nome_app == 'materia': if nome_app == 'materia':
@ -79,7 +85,7 @@ def cria_grupos_permissoes():
grupo.user_set.add(usuario) grupo.user_set.add(usuario)
# Operador Geral # Operador Geral
grupo_geral = Group.objects.get_or_create(name='Operador Geral')[0] grupo_geral = cria_ou_reseta_grupo('Operador Geral')
for lista in permissoes.values(): for lista in permissoes.values():
for p in lista: for p in lista:
grupo_geral.permissions.add(p) grupo_geral.permissions.add(p)
@ -91,7 +97,7 @@ def cria_grupos_permissoes():
perms_autor.append(Permission.objects.get(name='Can delete Proposição')) perms_autor.append(Permission.objects.get(name='Can delete Proposição'))
# Configura Permissoes Autor # Configura Permissoes Autor
grupo = Group.objects.get_or_create(name='Autor')[0] grupo = cria_ou_reseta_grupo('Autor')
for p in perms_autor: for p in perms_autor:
grupo.permissions.add(p) grupo.permissions.add(p)
nome_usuario = 'operador_autor' nome_usuario = 'operador_autor'

59
scripts/test_inicializa_grupos_autorizacoes.py

@ -0,0 +1,59 @@
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', 'materia', '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()
# Operador de Comissões
# Operador de Matéria
# Operador de Norma Jurídica
# Operador de Sessão Plenária
# Operador de Protocolo Administrativo
# Operador de Documento Administrativo
# Operador Geral
Loading…
Cancel
Save