from django.apps import apps from django.contrib.auth.models import Group, Permission from django.contrib.contenttypes.models import ContentType import pytest 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()