From 1f8b7cef20f7ea296545b108065b28db84592783 Mon Sep 17 00:00:00 2001 From: Eduardo Calil Date: Thu, 14 Jul 2016 19:00:26 -0300 Subject: [PATCH 01/15] Resolve ordenacao dos imports --- sapl/base/views.py | 4 ++-- sapl/comissoes/views.py | 6 +++--- sapl/materia/views.py | 7 ++++--- sapl/parlamentares/views.py | 7 +++---- sapl/protocoloadm/views.py | 9 +++++---- sapl/sessao/views.py | 2 +- sapl/utils.py | 3 +-- scripts/inicializa_grupos_autorizacoes.py | 2 +- 8 files changed, 20 insertions(+), 20 deletions(-) diff --git a/sapl/base/views.py b/sapl/base/views.py index e04c9e0af..c52b5b6fa 100644 --- a/sapl/base/views.py +++ b/sapl/base/views.py @@ -3,8 +3,8 @@ from django.core.urlresolvers import reverse from django.http import HttpResponseRedirect from django.views.generic.base import TemplateView -from sapl.crud.base import Crud, CrudBaseMixin, CrudCreateView,\ - CrudDetailView, CrudUpdateView +from sapl.crud.base import (Crud, CrudBaseMixin, CrudCreateView, + CrudDetailView, CrudUpdateView) from sapl.utils import permissao_tb_aux from .forms import CasaLegislativaForm diff --git a/sapl/comissoes/views.py b/sapl/comissoes/views.py index 7051d3b15..4a23a49aa 100644 --- a/sapl/comissoes/views.py +++ b/sapl/comissoes/views.py @@ -1,12 +1,12 @@ -from django.core.urlresolvers import reverse from django.contrib.auth.mixins import PermissionRequiredMixin +from django.core.urlresolvers import reverse from django.views.generic import ListView from sapl.crud.base import (Crud, CrudBaseMixin, CrudCreateView, - CrudUpdateView, CrudDeleteView) + CrudDeleteView, CrudUpdateView) from sapl.crud.masterdetail import MasterDetailCrud from sapl.materia.models import Tramitacao -from sapl.utils import permissoes_comissoes, permissao_tb_aux +from sapl.utils import permissao_tb_aux, permissoes_comissoes from .models import (CargoComissao, Comissao, Composicao, Participacao, Periodo, TipoComissao) diff --git a/sapl/materia/views.py b/sapl/materia/views.py index 8076bc49a..21f7de316 100644 --- a/sapl/materia/views.py +++ b/sapl/materia/views.py @@ -18,12 +18,13 @@ from django_filters.views import FilterView from sapl.base.models import CasaLegislativa from sapl.compilacao.views import IntegracaoTaView from sapl.crispy_layout_mixin import SaplFormLayout, form_actions, to_row -from sapl.crud.base import (Crud, CrudBaseMixin, CrudCreateView, CrudListView, - CrudUpdateView, CrudDeleteView, make_pagination) +from sapl.crud.base import (Crud, CrudBaseMixin, CrudCreateView, + CrudDeleteView, CrudListView, CrudUpdateView, + make_pagination) from sapl.crud.masterdetail import MasterDetailCrud from sapl.norma.models import LegislacaoCitada from sapl.utils import (autor_label, autor_modal, get_base_url, - permissoes_materia, permissao_tb_aux) + permissao_tb_aux, permissoes_materia) from .forms import (AcompanhamentoMateriaForm, AnexadaForm, AutoriaForm, DespachoInicialForm, DocumentoAcessorioForm, diff --git a/sapl/parlamentares/views.py b/sapl/parlamentares/views.py index f6abb062c..2dc3ab576 100644 --- a/sapl/parlamentares/views.py +++ b/sapl/parlamentares/views.py @@ -9,11 +9,10 @@ from django.utils.datastructures import MultiValueDictKeyError from django.utils.translation import ugettext_lazy as _ from django.views.generic import FormView -from sapl.crud.base import (Crud, CrudCreateView, CrudListView, CrudUpdateView, - CrudBaseMixin, CrudDeleteView) +from sapl.crud.base import (Crud, CrudBaseMixin, CrudCreateView, + CrudDeleteView, CrudListView, CrudUpdateView) from sapl.crud.masterdetail import MasterDetailCrud - -from sapl.utils import permissoes_parlamentares, permissao_tb_aux +from sapl.utils import permissao_tb_aux, permissoes_parlamentares from .forms import (ComposicaoColigacaoForm, FiliacaoForm, LegislaturaForm, ParlamentarCreateForm, ParlamentarForm) diff --git a/sapl/protocoloadm/views.py b/sapl/protocoloadm/views.py index 82ecc22c2..2d26f9e78 100644 --- a/sapl/protocoloadm/views.py +++ b/sapl/protocoloadm/views.py @@ -13,11 +13,12 @@ from django.views.generic import CreateView, DetailView, FormView, ListView from django.views.generic.base import TemplateView from django_filters.views import FilterView -from sapl.crud.base import (Crud, CrudBaseMixin, CrudListView, make_pagination, - CrudCreateView, CrudUpdateView, CrudDeleteView) +from sapl.crud.base import (Crud, CrudBaseMixin, CrudCreateView, + CrudDeleteView, CrudListView, CrudUpdateView, + make_pagination) from sapl.materia.models import Proposicao, TipoMateriaLegislativa -from sapl.utils import (create_barcode, get_client_ip, permissoes_protocoloadm, - permissoes_adm) +from sapl.utils import (create_barcode, get_client_ip, permissoes_adm, + permissoes_protocoloadm) from .forms import (AnularProcoloAdmForm, DocumentoAcessorioAdministrativoForm, DocumentoAdministrativoFilterSet, diff --git a/sapl/sessao/views.py b/sapl/sessao/views.py index e26de79f1..47b4aac4b 100644 --- a/sapl/sessao/views.py +++ b/sapl/sessao/views.py @@ -23,7 +23,7 @@ from sapl.materia.models import (Autoria, DocumentoAcessorio, from sapl.norma.models import NormaJuridica from sapl.parlamentares.models import Parlamentar from sapl.sessao.serializers import SessaoPlenariaSerializer -from sapl.utils import permissoes_sessao, permissoes_painel, permissao_tb_aux +from sapl.utils import permissao_tb_aux, permissoes_painel, permissoes_sessao from .forms import (BancadaForm, ExpedienteForm, ExpedienteMateriaForm, ListMateriaForm, MateriaOrdemDiaForm, MesaForm, diff --git a/sapl/utils.py b/sapl/utils.py index 9ad97a9a2..2bfc9f69c 100644 --- a/sapl/utils.py +++ b/sapl/utils.py @@ -1,6 +1,6 @@ +import os.path from datetime import date from functools import wraps -import os.path import magic from django.apps import apps @@ -12,7 +12,6 @@ from django.core.checks import Warning, register from django.core.exceptions import ValidationError from django.utils.translation import ugettext_lazy as _ from floppyforms import ClearableFileInput -import magic def get_settings_auth_user_model(): diff --git a/scripts/inicializa_grupos_autorizacoes.py b/scripts/inicializa_grupos_autorizacoes.py index 6ce8e9be8..21d43808f 100644 --- a/scripts/inicializa_grupos_autorizacoes.py +++ b/scripts/inicializa_grupos_autorizacoes.py @@ -1,4 +1,4 @@ -from django.contrib.auth.models import User, Group, Permission +from django.contrib.auth.models import Group, Permission, User from django.contrib.contenttypes.models import ContentType From 26d1628f01fa74d424a4af908d3f98e820516794 Mon Sep 17 00:00:00 2001 From: Eduardo Calil Date: Thu, 14 Jul 2016 19:39:03 -0300 Subject: [PATCH 02/15] Resolve detalhes da PEP8 --- sapl/parlamentares/views.py | 1 - sapl/protocoloadm/views.py | 14 +++++++++----- sapl/settings.py | 1 + sapl/utils.py | 2 -- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/sapl/parlamentares/views.py b/sapl/parlamentares/views.py index 2dc3ab576..227bb1d38 100644 --- a/sapl/parlamentares/views.py +++ b/sapl/parlamentares/views.py @@ -1,5 +1,4 @@ from django.contrib import messages -from django.contrib.auth.decorators import user_passes_test from django.contrib.auth.mixins import PermissionRequiredMixin from django.contrib.auth.models import Permission from django.contrib.contenttypes.models import ContentType diff --git a/sapl/protocoloadm/views.py b/sapl/protocoloadm/views.py index 2d26f9e78..da00163c1 100644 --- a/sapl/protocoloadm/views.py +++ b/sapl/protocoloadm/views.py @@ -173,7 +173,9 @@ class AnularProtocoloAdmView(PermissionRequiredMixin, CreateView): return redirect(self.get_success_url()) -class ProtocoloDocumentoView(PermissionRequiredMixin, FormValidMessageMixin, CreateView): +class ProtocoloDocumentoView(PermissionRequiredMixin, + FormValidMessageMixin, + CreateView): template_name = "protocoloadm/protocolar_documento.html" form_class = ProtocoloDocumentForm form_valid_message = _('Protocolo cadastrado com sucesso!') @@ -389,7 +391,8 @@ class ProposicaoDetailView(DetailView): return context -class PesquisarDocumentoAdministrativoView(PermissionRequiredMixin, FilterView): +class PesquisarDocumentoAdministrativoView(PermissionRequiredMixin, + FilterView): model = DocumentoAdministrativo filterset_class = DocumentoAdministrativoFilterSet paginate_by = 10 @@ -490,7 +493,8 @@ class DetailDocumentoAdministrativo(PermissionRequiredMixin, DetailView): 'pk': self.kwargs['pk']}) -class DocumentoAcessorioAdministrativoEditView(PermissionRequiredMixin, FormView): +class DocumentoAcessorioAdministrativoEditView(PermissionRequiredMixin, + FormView): template_name = "protocoloadm/documento_acessorio_administrativo_edit.html" permission_required = permissoes_adm() @@ -550,8 +554,8 @@ class DocumentoAcessorioAdministrativoView(PermissionRequiredMixin, FormView): doc_acessorio = DocumentoAcessorioAdministrativo.objects.filter( documento_id=kwargs['pk']) if not doc_acessorio: - doc_ace_null = _('Nenhum documento acessório \ - cadastrado para este processo.') + doc_ace_null = _('Nenhum documento acessório' + + 'cadastrado para este processo.') return self.render_to_response({'pk': kwargs['pk'], 'doc': doc, diff --git a/sapl/settings.py b/sapl/settings.py index 96dee01eb..fb7fc4bb9 100644 --- a/sapl/settings.py +++ b/sapl/settings.py @@ -38,6 +38,7 @@ LOGIN_URL = '/login/?next=' # SAPL business apps in dependency order SAPL_APPS = ( 'sapl.base', + 'sapl.crud', 'sapl.parlamentares', 'sapl.comissoes', 'sapl.materia', diff --git a/sapl/utils.py b/sapl/utils.py index 2bfc9f69c..088319563 100644 --- a/sapl/utils.py +++ b/sapl/utils.py @@ -1,4 +1,3 @@ -import os.path from datetime import date from functools import wraps @@ -8,7 +7,6 @@ from django.conf import settings from django.contrib import admin from django.contrib.auth.models import Permission from django.contrib.contenttypes.models import ContentType -from django.core.checks import Warning, register from django.core.exceptions import ValidationError from django.utils.translation import ugettext_lazy as _ from floppyforms import ClearableFileInput From e5bd0e3b65205231f9cf81c35b92fbf480022151 Mon Sep 17 00:00:00 2001 From: Marcio Mazza Date: Thu, 28 Jul 2016 12:08:48 -0300 Subject: [PATCH 03/15] =?UTF-8?q?Remove=20c=C3=B3digo=20n=C3=A3o=20usado?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/base/templatetags/common_tags.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/sapl/base/templatetags/common_tags.py b/sapl/base/templatetags/common_tags.py index 4f8370eac..ed1da8633 100644 --- a/sapl/base/templatetags/common_tags.py +++ b/sapl/base/templatetags/common_tags.py @@ -38,11 +38,6 @@ def isinst(value, class_str): return classe == class_str -@register.filter -def to_class_name(value): - return value.__class__.__name__.lower() - - @register.filter def get_add_perm(value, arg): perm = value From ab17ded3d338449f4fb32948254b3d4af7d18627 Mon Sep 17 00:00:00 2001 From: Marcio Mazza Date: Thu, 28 Jul 2016 12:09:10 -0300 Subject: [PATCH 04/15] Refatora script de inicializacao dos grupos --- scripts/inicializa_grupos_autorizacoes.py | 204 +++++----------------- 1 file changed, 44 insertions(+), 160 deletions(-) diff --git a/scripts/inicializa_grupos_autorizacoes.py b/scripts/inicializa_grupos_autorizacoes.py index 21d43808f..916e19912 100644 --- a/scripts/inicializa_grupos_autorizacoes.py +++ b/scripts/inicializa_grupos_autorizacoes.py @@ -1,188 +1,72 @@ +from django.apps import apps from django.contrib.auth.models import Group, Permission, User from django.contrib.contenttypes.models import ContentType +from sapl.settings import SAPL_APPS -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] - - # Comissao - - cts = ContentType.objects.filter(app_label='comissoes') - perms_comissoes = list(Permission.objects.filter(content_type__in=cts)) - - # 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 +def cria_grupo_e_usuario_padrao(nome_grupo, nome_usuario, permissoes): - cts = ContentType.objects.filter(app_label='painel') - perms_painel = list(Permission.objects.filter(content_type__in=cts)) +('Operador de Sessão', ) - # Parlamentares - cts = ContentType.objects.filter(app_label='parlamentares') - perms_parlamentares = list(Permission.objects.filter(content_type__in=cts)) +def cria_grupos_permissoes(): - # ProtocoloADM e DOCADM + nomes_apps = ['base', 'parlamentares', 'comissoes', + 'materia', 'norma', 'sessao', 'painel'] + 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') + permissoes['documento_administrativo'] = list( + Permission.objects.filter(content_type__in=cts)) - perms_docadm = list(Permission.objects.filter(content_type__in=cts)) + cts = cts.exclude(model__icontains='tramitacao').exclude( + model__icontains='documentoadministrativo') + permissoes['protocoloadm'] = list( + Permission.objects.filter(content_type__in=cts)) + nomes_apps.append('protocoloadm') - cts_exc1 = cts.filter(model__icontains='tramitacao') - cts_exc2 = cts.filter(model__icontains='documentoadministrativo') + for nome_app in nomes_apps: - cts = cts.exclude(id__in=[o.id for o in cts_exc1]) - cts = cts.exclude(id__in=[o.id for o in cts_exc2]) + if nome_app in {'base', 'parlamentares'}: + # pula apps que não têm grupo específico + continue - perms_protocoloadm = list(Permission.objects.filter(content_type__in=cts)) + nome_grupo = 'Operador de %s' % apps.get_app_config( + nome_app).verbose_name + grupo = Group.objects.get_or_create(name=nome_grupo)[0] - # Sessao + # configura permissoes do operador + for p in permissoes[nome_app]: + grupo.permissions.add(p) - cts = ContentType.objects.filter(app_label='sessao') - perms_sessao = list(Permission.objects.filter(content_type__in=cts)) + nome_usuario = 'operador_%s' % nome_app - # Painel + usuario = User.objects.get_or_create(username=nome_usuario)[0] + usuario.set_password('interlegis') + usuario.save() + grupo.user_set.add(usuario) - cts = ContentType.objects.filter(app_label='painel') - perms_painel = list(Permission.objects.filter(content_type__in=cts)) + # Operador Geral + grupo_geral = Group.objects.get_or_create(name='Operador Geral')[0] + for lista in permissoes.values(): + for p in lista: + grupo_geral.permissions.add(p) # 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) + # ..... + perms_autor = Permission.objects.get(name='Can add Proposição') + # .... + # Configura Permissoes Autor + op_autor.permissions.add(perms_autor) # 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) - - # 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) - if __name__ == '__main__': cria_grupos_permissoes() From b77cb84695c26f7ba9fd7523b10832c9ce11dd0a Mon Sep 17 00:00:00 2001 From: Marcio Mazza Date: Fri, 29 Jul 2016 19:53:28 -0300 Subject: [PATCH 05/15] Corrige bug na leitura de layouts.yaml MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit O bug ocorre em ambientes onde está disponível o yaml.CSafeLoader que só trabalha com str ou stream --- sapl/crispy_layout_mixin.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/sapl/crispy_layout_mixin.py b/sapl/crispy_layout_mixin.py index c6c4437a6..34ae391e9 100644 --- a/sapl/crispy_layout_mixin.py +++ b/sapl/crispy_layout_mixin.py @@ -147,7 +147,9 @@ class CrispyLayoutFormMixin: def read_yaml_from_file(yaml_layout): # TODO cache this at application level t = template.loader.get_template(yaml_layout) - rendered = t.render() + # aqui é importante converter para str pois, dependendo do ambiente, + # o rtyaml pode usar yaml.CSafeLoader, que exige str ou stream + rendered = str(t.render()) return rtyaml.load(rendered) From c7e03a39dd2f867cbdf972f05604621e32af45b5 Mon Sep 17 00:00:00 2001 From: Marcio Mazza Date: Fri, 29 Jul 2016 16:18:08 -0300 Subject: [PATCH 06/15] =?UTF-8?q?Simplifica=20configura=C3=A7=C3=A3o=20do?= =?UTF-8?q?=20travis?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .travis.yml | 36 +++++++---------------------------- requirements/requirements.txt | 4 ++-- .env_dev => sapl/.env_test | 0 3 files changed, 9 insertions(+), 31 deletions(-) rename .env_dev => sapl/.env_test (100%) diff --git a/.travis.yml b/.travis.yml index 9d469a9b4..d3ba4e10e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -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 \ No newline at end of file + - py.test + # - ./test_and_check_qa.sh \ No newline at end of file diff --git a/requirements/requirements.txt b/requirements/requirements.txt index 44ef147c0..9c8faaa2d 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -1,4 +1,5 @@ dj-database-url==0.4.1 +django==1.9.7 django-admin-bootstrapped==2.5.7 django-bootstrap3==7.0.1 django-bower==5.1.0 @@ -10,8 +11,7 @@ django-extra-views==0.8.0 django-filter==0.13.0 django-floppyforms==1.6.2 django-model-utils==2.5 -django-sass-processor==0.4.0 -django==1.9.7 +django-sass-processor==0.4.6 djangorestframework easy-thumbnails==2.3 git+git://github.com/interlegis/trml2pdf.git diff --git a/.env_dev b/sapl/.env_test similarity index 100% rename from .env_dev rename to sapl/.env_test From 03b4b02e2500b6098026cbe3c8fef4f7b6d043be Mon Sep 17 00:00:00 2001 From: Marcio Mazza Date: Sat, 30 Jul 2016 17:27:53 -0300 Subject: [PATCH 07/15] Adiciona badge do Travis ao README (e tira o do waffle) --- README.rst | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/README.rst b/README.rst index 9770c0015..67d1e84db 100644 --- a/README.rst +++ b/README.rst @@ -1,6 +1,5 @@ -.. image:: https://badge.waffle.io/interlegis/sapl.png?label=ready&title=Ready - :target: https://waffle.io/interlegis/sapl - :alt: 'Stories in Ready' +.. image:: https://travis-ci.org/interlegis/sapl.svg?branch=master + :target: https://travis-ci.org/interlegis/sapl *********************************************** SAPL - Sistema de Apoio ao Processo Legislativo @@ -246,18 +245,18 @@ Boas Práticas * Em caso de Implementação de modelo que envolva a classe ``django.contrib.auth.models.User``, não a use diretamente, use para isso a função ``get_settings_auth_user_model()`` de ``sapl.utils``. Exemplo: - - no lugar de ``owner = models.ForeignKey(User, ... )`` - - use ``owner = models.ForeignKey(get_settings_auth_user_model(), ... )`` + - no lugar de ``owner = models.ForeignKey(User, ... )`` + - use ``owner = models.ForeignKey(get_settings_auth_user_model(), ... )`` - Não use em qualquer modelagem futura, ``ForeignKey`` com ``User`` ou mesmo ``settings.AUTH_USER_MODEL`` sem o import correto que não é o do projeto e sim o que está em ``sapl.utils``, ou seja (``from django.conf import settings``) - - em https://docs.djangoproject.com/en/1.9/topics/auth/customizing/#referencing-the-user-model é explicado por que ser dessa forma! + - em https://docs.djangoproject.com/en/1.9/topics/auth/customizing/#referencing-the-user-model é explicado por que ser dessa forma! - Já em qualquer uso em implementação de execução, ao fazer uma query, por exemplo: - não use ``django.contrib.auth.models.User`` para utilizar as caracteristicas do model, para isso, use esta função: django.contrib.auth.get_user_model() - - Seguir esses passos simplificará qualquer customização futura que venha a ser feita na autenticação do usuários ao evitar correções de inúmeros import's e ainda, desta forma, torna a funcionalidade de autenticação reimplementável por qualquer outro projeto que venha usar partes ou o todo do SAPL. + - Seguir esses passos simplificará qualquer customização futura que venha a ser feita na autenticação do usuários ao evitar correções de inúmeros import's e ainda, desta forma, torna a funcionalidade de autenticação reimplementável por qualquer outro projeto que venha usar partes ou o todo do SAPL. Atenção: From 44623017d0eff10b996994e0c132642eaf4fad9c Mon Sep 17 00:00:00 2001 From: LeandroRoberto Date: Tue, 2 Aug 2016 10:31:21 -0300 Subject: [PATCH 08/15] Add tipos de display a listagem do crud --- sapl/crispy_layout_mixin.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/sapl/crispy_layout_mixin.py b/sapl/crispy_layout_mixin.py index 34ae391e9..40f6b01e4 100644 --- a/sapl/crispy_layout_mixin.py +++ b/sapl/crispy_layout_mixin.py @@ -1,12 +1,12 @@ from math import ceil -import rtyaml from crispy_forms.bootstrap import FormActions from crispy_forms.helper import FormHelper from crispy_forms.layout import HTML, Div, Fieldset, Layout, Submit from django import template from django.utils import formats from django.utils.translation import ugettext as _ +import rtyaml def heads_and_tails(list_of_lists): @@ -50,8 +50,9 @@ class SaplFormLayout(Layout): def get_field_display(obj, fieldname): field = obj._meta.get_field(fieldname) - verbose_name = str(field.verbose_name) - if field.choices: + verbose_name = str(field.verbose_name)\ + if hasattr(field, 'verbose_name') else '' + if hasattr(field, 'choices') and field.choices: value = getattr(obj, 'get_%s_display' % fieldname)() else: value = getattr(obj, fieldname) @@ -74,6 +75,14 @@ def get_field_display(obj, fieldname): value.name.split('/')[-1:][0]) else: display = '' + elif 'ManyRelatedManager' in str(type(value))\ + or 'RelatedManager' in str(type(value)): + display = '
    ' + for v in value.all(): + display += '
  • %s
  • ' % str(v) + display += '
' + if not verbose_name: + verbose_name = str(field.related_model._meta.verbose_name_plural) else: display = str(value) return verbose_name, display From 3dab8dd8655173e8df491522c41cdfa9c7bdf091 Mon Sep 17 00:00:00 2001 From: Eduardo Calil Date: Tue, 2 Aug 2016 12:16:01 -0300 Subject: [PATCH 09/15] Otimizacao do script de inicializacao de grupos e permissoes --- scripts/inicializa_grupos_autorizacoes.py | 94 +++++++++++++++-------- 1 file changed, 63 insertions(+), 31 deletions(-) diff --git a/scripts/inicializa_grupos_autorizacoes.py b/scripts/inicializa_grupos_autorizacoes.py index 916e19912..d9d3c2232 100644 --- a/scripts/inicializa_grupos_autorizacoes.py +++ b/scripts/inicializa_grupos_autorizacoes.py @@ -2,53 +2,81 @@ from django.apps import apps from django.contrib.auth.models import Group, Permission, User from django.contrib.contenttypes.models import ContentType -from sapl.settings import SAPL_APPS - - -def cria_grupo_e_usuario_padrao(nome_grupo, nome_usuario, permissoes): - -('Operador de Sessão', ) - def cria_grupos_permissoes(): nomes_apps = ['base', 'parlamentares', 'comissoes', 'materia', 'norma', 'sessao', 'painel'] + 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') + + # documento administrativo permissoes['documento_administrativo'] = list( Permission.objects.filter(content_type__in=cts)) + nome_grupo = 'Operador Administrativo' + grupo = Group.objects.get_or_create(name=nome_grupo)[0] + for p in permissoes['documento_administrativo']: + grupo.permissions.add(p) + + nome_usuario = 'operador_administrativo' + usuario = User.objects.get_or_create(username=nome_usuario)[0] + usuario.set_password('interlegis') + usuario.save() + grupo.user_set.add(usuario) + # prolocolo administrativo cts = cts.exclude(model__icontains='tramitacao').exclude( model__icontains='documentoadministrativo') permissoes['protocoloadm'] = list( Permission.objects.filter(content_type__in=cts)) - nomes_apps.append('protocoloadm') + nome_grupo = 'Operador de Protocolo Administrativo' + grupo = Group.objects.get_or_create(name=nome_grupo)[0] + for p in permissoes['protocoloadm']: + grupo.permissions.add(p) + + nome_usuario = 'operador_protocoloadm' + usuario = User.objects.get_or_create(username=nome_usuario)[0] + usuario.set_password('interlegis') + usuario.save() + grupo.user_set.add(usuario) + + # 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 in {'base', 'parlamentares'}: - # pula apps que não têm grupo específico - continue + if nome_app not in {'base', 'parlamentares'}: + # Elimina casos especificos - nome_grupo = 'Operador de %s' % apps.get_app_config( - nome_app).verbose_name - grupo = Group.objects.get_or_create(name=nome_grupo)[0] + # Cria Grupo + nome_grupo = 'Operador de %s' % apps.get_app_config( + nome_app).verbose_name + grupo = Group.objects.get_or_create(name=nome_grupo)[0] - # configura permissoes do operador - for p in permissoes[nome_app]: - grupo.permissions.add(p) + # Elimina o acesso a proposicoes pelo Operador de Matérias + if nome_app == 'materia': + cts = ContentType.objects.filter( + app_label='materia').exclude(model__icontains='proposicao') + permissoes['materia'] = list( + Permission.objects.filter(content_type__in=cts)) - nome_usuario = 'operador_%s' % nome_app + # Configura as permissoes + for p in permissoes[nome_app]: + grupo.permissions.add(p) - usuario = User.objects.get_or_create(username=nome_usuario)[0] - usuario.set_password('interlegis') - usuario.save() - grupo.user_set.add(usuario) + # 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 = Group.objects.get_or_create(name='Operador Geral')[0] @@ -57,16 +85,20 @@ def cria_grupos_permissoes(): grupo_geral.permissions.add(p) # Autor - # ..... - perms_autor = Permission.objects.get(name='Can add Proposição') - # .... - # Configura Permissoes Autor - op_autor.permissions.add(perms_autor) + 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 Operador de Administracao - # ..... - for p in perms_docadm: - op_adm.permissions.add(p) + # Configura Permissoes Autor + grupo = Group.objects.get_or_create(name='Autor')[0] + for p in perms_autor: + grupo.permissions.add(p) + nome_usuario = 'operador_autor' + usuario = User.objects.get_or_create(username=nome_usuario)[0] + usuario.set_password('interlegis') + usuario.save() + grupo.user_set.add(usuario) if __name__ == '__main__': cria_grupos_permissoes() From 54d5eda423fe38749f642361f917e2c576320df3 Mon Sep 17 00:00:00 2001 From: Marcio Mazza Date: Fri, 5 Aug 2016 12:26:55 -0300 Subject: [PATCH 10/15] =?UTF-8?q?Adiciona=20testes=20para=20cria=C3=A7?= =?UTF-8?q?=C3=A3o=20de=20grupos=20padr=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/inicializa_grupos_autorizacoes.py | 20 ++++--- .../test_inicializa_grupos_autorizacoes.py | 59 +++++++++++++++++++ 2 files changed, 72 insertions(+), 7 deletions(-) create mode 100644 scripts/test_inicializa_grupos_autorizacoes.py diff --git a/scripts/inicializa_grupos_autorizacoes.py b/scripts/inicializa_grupos_autorizacoes.py index d9d3c2232..d1c322d95 100644 --- a/scripts/inicializa_grupos_autorizacoes.py +++ b/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 +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(): nomes_apps = ['base', 'parlamentares', 'comissoes', @@ -19,9 +25,9 @@ def cria_grupos_permissoes(): permissoes['documento_administrativo'] = list( Permission.objects.filter(content_type__in=cts)) 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']: - grupo.permissions.add(p) + grupo.permissions.add(p) nome_usuario = 'operador_administrativo' usuario = User.objects.get_or_create(username=nome_usuario)[0] @@ -35,9 +41,9 @@ def cria_grupos_permissoes(): permissoes['protocoloadm'] = list( Permission.objects.filter(content_type__in=cts)) 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']: - grupo.permissions.add(p) + grupo.permissions.add(p) nome_usuario = 'operador_protocoloadm' usuario = User.objects.get_or_create(username=nome_usuario)[0] @@ -58,7 +64,7 @@ def cria_grupos_permissoes(): # Cria Grupo nome_grupo = 'Operador de %s' % apps.get_app_config( 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 if nome_app == 'materia': @@ -79,7 +85,7 @@ def cria_grupos_permissoes(): grupo.user_set.add(usuario) # 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 p in lista: grupo_geral.permissions.add(p) @@ -91,7 +97,7 @@ def cria_grupos_permissoes(): perms_autor.append(Permission.objects.get(name='Can delete Proposição')) # Configura Permissoes Autor - grupo = Group.objects.get_or_create(name='Autor')[0] + grupo = cria_ou_reseta_grupo('Autor') for p in perms_autor: grupo.permissions.add(p) nome_usuario = 'operador_autor' diff --git a/scripts/test_inicializa_grupos_autorizacoes.py b/scripts/test_inicializa_grupos_autorizacoes.py new file mode 100644 index 000000000..1e41c39db --- /dev/null +++ b/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 From 19280b02ea288facf27a0a268a3896cadda0c2aa Mon Sep 17 00:00:00 2001 From: Eduardo Edson Batista Cordeiro Alves Date: Fri, 5 Aug 2016 15:55:21 -0300 Subject: [PATCH 11/15] Ajusta tamanho dos primary e danger button --- sapl/static/styles/app.scss | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/sapl/static/styles/app.scss b/sapl/static/styles/app.scss index e4163a499..fa95ebeb3 100644 --- a/sapl/static/styles/app.scss +++ b/sapl/static/styles/app.scss @@ -131,13 +131,17 @@ body { } } - fieldset { - fieldset { font-size: 95%; legend { font-size: 18px; } } -} \ No newline at end of file +} + +.btn-primary, .btn-danger{ + font-size: 16px; + height: 40px !important; + display: inline-block; +} From de13e965ae33692c31144d1347209bb4336831fb Mon Sep 17 00:00:00 2001 From: Eduardo Edson Batista Cordeiro Alves Date: Mon, 8 Aug 2016 16:25:42 -0300 Subject: [PATCH 12/15] =?UTF-8?q?Desfaz=20altera=C3=A7=C3=A3o=20no=20css?= =?UTF-8?q?=20dos=20bot=C3=B5es?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/static/styles/app.scss | 6 ------ 1 file changed, 6 deletions(-) diff --git a/sapl/static/styles/app.scss b/sapl/static/styles/app.scss index fa95ebeb3..901f7286c 100644 --- a/sapl/static/styles/app.scss +++ b/sapl/static/styles/app.scss @@ -139,9 +139,3 @@ fieldset { } } } - -.btn-primary, .btn-danger{ - font-size: 16px; - height: 40px !important; - display: inline-block; -} From 02f0b18d59c1417de5aaf909372d3dc775033f57 Mon Sep 17 00:00:00 2001 From: Eduardo Calil Date: Tue, 9 Aug 2016 15:04:21 -0300 Subject: [PATCH 13/15] Faz os testes do script passarem --- scripts/inicializa_grupos_autorizacoes.py | 5 +++-- scripts/test_inicializa_grupos_autorizacoes.py | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/scripts/inicializa_grupos_autorizacoes.py b/scripts/inicializa_grupos_autorizacoes.py index d1c322d95..42e6cb778 100644 --- a/scripts/inicializa_grupos_autorizacoes.py +++ b/scripts/inicializa_grupos_autorizacoes.py @@ -5,7 +5,8 @@ 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() + for p in list(grupo.permissions.all()): + grupo.permissions.remove(p) return grupo @@ -69,7 +70,7 @@ def cria_grupos_permissoes(): # Elimina o acesso a proposicoes pelo Operador de Matérias if nome_app == 'materia': cts = ContentType.objects.filter( - app_label='materia').exclude(model__icontains='proposicao') + app_label='materia').exclude(model='proposicao') permissoes['materia'] = list( Permission.objects.filter(content_type__in=cts)) diff --git a/scripts/test_inicializa_grupos_autorizacoes.py b/scripts/test_inicializa_grupos_autorizacoes.py index 1e41c39db..401854991 100644 --- a/scripts/test_inicializa_grupos_autorizacoes.py +++ b/scripts/test_inicializa_grupos_autorizacoes.py @@ -8,7 +8,7 @@ from inicializa_grupos_autorizacoes import cria_grupos_permissoes pytestmark = pytest.mark.django_db apps_com_permissao_padrao = [ - 'comissoes', 'materia', 'norma', 'sessao', 'painel'] + 'comissoes', 'norma', 'sessao', 'painel'] @pytest.mark.parametrize('app_label', apps_com_permissao_padrao) From d45e74234c043f0adb6b71da0c322e20e6f6eff6 Mon Sep 17 00:00:00 2001 From: Eduardo Calil Date: Fri, 12 Aug 2016 12:54:33 -0300 Subject: [PATCH 14/15] Atualiza codigo para o nome dos novos grupos --- sapl/utils.py | 8 +++--- scripts/inicializa_grupos_autorizacoes.py | 27 ++++++++++--------- .../test_inicializa_grupos_autorizacoes.py | 12 --------- 3 files changed, 19 insertions(+), 28 deletions(-) diff --git a/sapl/utils.py b/sapl/utils.py index 088319563..5b1bee282 100644 --- a/sapl/utils.py +++ b/sapl/utils.py @@ -261,7 +261,7 @@ def permissoes_parlamentares(): def permissoes_protocoloadm(): lista_permissoes = [] perms_protocolo = Permission.objects.filter( - group__name='Operador de Protocolo') + group__name='Operador de Protocolo Administrativo') for p in perms_protocolo: lista_permissoes.append('protocoloadm.' + p.codename) return set(lista_permissoes) @@ -270,7 +270,7 @@ def permissoes_protocoloadm(): def permissoes_adm(): lista_permissoes = [] perms_adm = Permission.objects.filter( - group__name='Operador de Administração') + group__name='Operador Administrativo') for p in perms_adm: lista_permissoes.append('protocoloadm.' + p.codename) return set(lista_permissoes) @@ -279,7 +279,7 @@ def permissoes_adm(): def permissoes_sessao(): lista_permissoes = [] perms_sessao = list(Permission.objects.filter( - group__name='Operador de Sessão')) + group__name='Operador de Sessão Plenária')) for p in perms_sessao: lista_permissoes.append('sessao.' + p.codename) return set(lista_permissoes) @@ -288,7 +288,7 @@ def permissoes_sessao(): def permissoes_painel(): lista_permissoes = [] perms_painel = list(Permission.objects.filter( - group__name='Operador de Painel')) + group__name='Operador de Painel Eletrônico')) for p in perms_painel: lista_permissoes.append('painel.' + p.codename) return set(lista_permissoes) diff --git a/scripts/inicializa_grupos_autorizacoes.py b/scripts/inicializa_grupos_autorizacoes.py index 42e6cb778..65f27f880 100644 --- a/scripts/inicializa_grupos_autorizacoes.py +++ b/scripts/inicializa_grupos_autorizacoes.py @@ -10,6 +10,14 @@ def cria_ou_reseta_grupo(nome): return grupo +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) + + def cria_grupos_permissoes(): nomes_apps = ['base', 'parlamentares', 'comissoes', @@ -31,10 +39,7 @@ def cria_grupos_permissoes(): grupo.permissions.add(p) nome_usuario = 'operador_administrativo' - usuario = User.objects.get_or_create(username=nome_usuario)[0] - usuario.set_password('interlegis') - usuario.save() - grupo.user_set.add(usuario) + cria_usuario(nome_usuario, grupo) # prolocolo administrativo cts = cts.exclude(model__icontains='tramitacao').exclude( @@ -47,10 +52,7 @@ def cria_grupos_permissoes(): grupo.permissions.add(p) nome_usuario = 'operador_protocoloadm' - usuario = User.objects.get_or_create(username=nome_usuario)[0] - usuario.set_password('interlegis') - usuario.save() - grupo.user_set.add(usuario) + cria_usuario(nome_usuario, grupo) # permissoes do base cts = ContentType.objects.filter(app_label='base') @@ -91,6 +93,9 @@ def cria_grupos_permissoes(): for p in lista: grupo_geral.permissions.add(p) + nome_usuario = 'operador_geral' + cria_usuario(nome_usuario, grupo_geral) + # Autor perms_autor = [] perms_autor.append(Permission.objects.get(name='Can add Proposição')) @@ -101,11 +106,9 @@ def cria_grupos_permissoes(): grupo = cria_ou_reseta_grupo('Autor') for p in perms_autor: grupo.permissions.add(p) + nome_usuario = 'operador_autor' - usuario = User.objects.get_or_create(username=nome_usuario)[0] - usuario.set_password('interlegis') - usuario.save() - grupo.user_set.add(usuario) + cria_usuario(nome_usuario, grupo_geral) if __name__ == '__main__': cria_grupos_permissoes() diff --git a/scripts/test_inicializa_grupos_autorizacoes.py b/scripts/test_inicializa_grupos_autorizacoes.py index 401854991..a8e9064a0 100644 --- a/scripts/test_inicializa_grupos_autorizacoes.py +++ b/scripts/test_inicializa_grupos_autorizacoes.py @@ -45,15 +45,3 @@ def test_permissoes_extras_sao_apagadas(app_label): 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 From daf1cda8b27dd2d85a85aab6c31fe8d19a3e2537 Mon Sep 17 00:00:00 2001 From: Eduardo Calil Date: Mon, 15 Aug 2016 10:14:15 -0300 Subject: [PATCH 15/15] Faz com que os requests nos testes sejam feitas com client_admin --- sapl/comissoes/tests/test_comissoes.py | 34 +-- sapl/materia/tests/test_materia.py | 220 +++++++++--------- sapl/norma/tests/test_norma.py | 28 +-- .../parlamentares/tests/test_parlamentares.py | 105 ++++----- sapl/protocoloadm/tests/test_protocoloadm.py | 18 +- 5 files changed, 206 insertions(+), 199 deletions(-) diff --git a/sapl/comissoes/tests/test_comissoes.py b/sapl/comissoes/tests/test_comissoes.py index af5e71da7..fee303192 100644 --- a/sapl/comissoes/tests/test_comissoes.py +++ b/sapl/comissoes/tests/test_comissoes.py @@ -44,14 +44,14 @@ def make_filiacao(): @pytest.mark.django_db(transaction=False) -def test_incluir_parlamentar_errors(client): +def test_incluir_parlamentar_errors(admin_client): comissao = make_comissao() composicao = make_composicao(comissao) - response = client.post(reverse('sapl.comissoes:participacao_create', - kwargs={'pk': composicao.pk}), - {'salvar': 'salvar'}, - follow=True) + response = admin_client.post(reverse('sapl.comissoes:participacao_create', + kwargs={'pk': composicao.pk}), + {'salvar': 'salvar'}, + follow=True) assert (response.context_data['form'].errors['parlamentar'] == ['Este campo é obrigatório.']) @@ -62,18 +62,18 @@ def test_incluir_parlamentar_errors(client): @pytest.mark.django_db(transaction=False) -def test_incluir_comissao_submit(client): +def test_incluir_comissao_submit(admin_client): tipo = mommy.make(TipoComissao, sigla='T', nome='Teste') - response = client.post(reverse('sapl.comissoes:comissao_create'), - {'tipo': tipo.pk, - 'nome': 'Comissão Teste', - 'sigla': 'CT', - 'data_criacao': '2016-03-22', - 'salvar': 'salvar'}, - follow=True) + response = admin_client.post(reverse('sapl.comissoes:comissao_create'), + {'tipo': tipo.pk, + 'nome': 'Comissão Teste', + 'sigla': 'CT', + 'data_criacao': '2016-03-22', + 'salvar': 'salvar'}, + follow=True) assert response.status_code == 200 comissao = Comissao.objects.first() @@ -82,11 +82,11 @@ def test_incluir_comissao_submit(client): @pytest.mark.django_db(transaction=False) -def test_incluir_comissao_errors(client): +def test_incluir_comissao_errors(admin_client): - response = client.post(reverse('sapl.comissoes:comissao_create'), - {'salvar': 'salvar'}, - follow=True) + response = admin_client.post(reverse('sapl.comissoes:comissao_create'), + {'salvar': 'salvar'}, + follow=True) assert (response.context_data['form'].errors['tipo'] == ['Este campo é obrigatório.']) diff --git a/sapl/materia/tests/test_materia.py b/sapl/materia/tests/test_materia.py index 1386e294a..ce530185b 100644 --- a/sapl/materia/tests/test_materia.py +++ b/sapl/materia/tests/test_materia.py @@ -80,7 +80,7 @@ def make_materia_principal(): @pytest.mark.django_db(transaction=False) -def test_materia_anexada_submit(client): +def test_materia_anexada_submit(admin_client): materia_principal = make_materia_principal() # Cria a matéria que será anexada @@ -99,14 +99,14 @@ def test_materia_anexada_submit(client): materia_anexada = MateriaLegislativa.objects.get(numero=32, ano=2004) # Testa POST - response = client.post(reverse('sapl.materia:anexada_create', - kwargs={'pk': materia_principal.pk}), - {'tipo': materia_anexada.tipo.pk, - 'numero': materia_anexada.numero, - 'ano': materia_anexada.ano, - 'data_anexacao': '2016-03-18', - 'salvar': 'salvar'}, - follow=True) + response = admin_client.post(reverse('sapl.materia:anexada_create', + kwargs={'pk': materia_principal.pk}), + {'tipo': materia_anexada.tipo.pk, + 'numero': materia_anexada.numero, + 'ano': materia_anexada.ano, + 'data_anexacao': '2016-03-18', + 'salvar': 'salvar'}, + follow=True) assert response.status_code == 200 # Verifica se a matéria foi anexada corretamente @@ -116,7 +116,7 @@ def test_materia_anexada_submit(client): @pytest.mark.django_db(transaction=False) -def test_autoria_submit(client): +def test_autoria_submit(admin_client): materia_principal = make_materia_principal() # Cria um tipo de Autor @@ -126,14 +126,14 @@ def test_autoria_submit(client): autor = mommy.make(Autor, tipo=tipo_autor, nome='Autor Teste') # Testa POST - response = client.post(reverse('sapl.materia:autoria_create', - kwargs={'pk': materia_principal.pk}), - {'autor': autor.pk, - 'primeiro_autor': True, - 'materia_id': materia_principal.pk, - 'partido': '', - 'salvar': 'salvar'}, - follow=True) + response = admin_client.post(reverse('sapl.materia:autoria_create', + kwargs={'pk': materia_principal.pk}), + {'autor': autor.pk, + 'primeiro_autor': True, + 'materia_id': materia_principal.pk, + 'partido': '', + 'salvar': 'salvar'}, + follow=True) assert response.status_code == 200 # Verifica se o autor foi realmente criado @@ -144,7 +144,7 @@ def test_autoria_submit(client): @pytest.mark.django_db(transaction=False) -def test_despacho_inicial_submit(client): +def test_despacho_inicial_submit(admin_client): materia_principal = make_materia_principal() # Cria uma comissão @@ -156,11 +156,11 @@ def test_despacho_inicial_submit(client): data_criacao='2016-03-18') # Testa POST - response = client.post(reverse('sapl.materia:despachoinicial_create', - kwargs={'pk': materia_principal.pk}), - {'comissao': comissao.pk, - 'salvar': 'salvar'}, - follow=True) + response = admin_client.post(reverse('sapl.materia:despachoinicial_create', + kwargs={'pk': materia_principal.pk}), + {'comissao': comissao.pk, + 'salvar': 'salvar'}, + follow=True) assert response.status_code == 200 # Verifica se o despacho foi criado @@ -170,19 +170,19 @@ def test_despacho_inicial_submit(client): @pytest.mark.django_db(transaction=False) -def test_numeracao_submit(client): +def test_numeracao_submit(admin_client): materia_principal = make_materia_principal() materia = make_materia_principal() # Testa POST - response = client.post(reverse('sapl.materia:numeracao_create', - kwargs={'pk': materia_principal.pk}), - {'tipo_materia': materia.tipo.pk, - 'numero_materia': materia.numero, - 'ano_materia': materia.ano, - 'data_materia': '2016-03-21', - 'salvar': 'salvar'}, - follow=True) + response = admin_client.post(reverse('sapl.materia:numeracao_create', + kwargs={'pk': materia_principal.pk}), + {'tipo_materia': materia.tipo.pk, + 'numero_materia': materia.numero, + 'ano_materia': materia.ano, + 'data_materia': '2016-03-21', + 'salvar': 'salvar'}, + follow=True) assert response.status_code == 200 @@ -193,7 +193,7 @@ def test_numeracao_submit(client): @pytest.mark.django_db(transaction=False) -def test_documento_acessorio_submit(client): +def test_documento_acessorio_submit(admin_client): materia_principal = make_materia_principal() # Cria um tipo de Autor @@ -207,15 +207,16 @@ def test_documento_acessorio_submit(client): descricao='Teste') # Testa POST - response = client.post(reverse('sapl.materia:documentoacessorio_create', - kwargs={'pk': materia_principal.pk}), - {'tipo': tipo.pk, - 'nome': 'teste_nome', - 'data_materia': '2016-03-21', - 'autor': autor, - 'ementa': 'teste_ementa', - 'salvar': 'salvar'}, - follow=True) + response = admin_client.post(reverse( + 'sapl.materia:documentoacessorio_create', + kwargs={'pk': materia_principal.pk}), + {'tipo': tipo.pk, + 'nome': 'teste_nome', + 'data_materia': '2016-03-21', + 'autor': autor, + 'ementa': 'teste_ementa', + 'salvar': 'salvar'}, + follow=True) assert response.status_code == 200 @@ -227,19 +228,20 @@ def test_documento_acessorio_submit(client): @pytest.mark.django_db(transaction=False) -def test_legislacao_citada_submit(client): +def test_legislacao_citada_submit(admin_client): materia_principal = make_materia_principal() norma = make_norma() # Testa POST - response = client.post(reverse('sapl.materia:legislacaocitada_create', - kwargs={'pk': materia_principal.pk}), - {'tipo': norma.tipo.pk, - 'numero': norma.numero, - 'ano': norma.ano, - 'disposicao': 'disposicao', - 'salvar': 'salvar'}, - follow=True) + response = admin_client.post( + reverse('sapl.materia:legislacaocitada_create', + kwargs={'pk': materia_principal.pk}), + {'tipo': norma.tipo.pk, + 'numero': norma.numero, + 'ano': norma.ano, + 'disposicao': 'disposicao', + 'salvar': 'salvar'}, + follow=True) assert response.status_code == 200 @@ -249,7 +251,7 @@ def test_legislacao_citada_submit(client): @pytest.mark.django_db(transaction=False) -def test_tramitacao_submit(client): +def test_tramitacao_submit(admin_client): materia_principal = make_materia_principal() # Cria status para tramitação status_tramitacao = mommy.make(StatusTramitacao, @@ -257,7 +259,7 @@ def test_tramitacao_submit(client): sigla='ST', descricao='Status_Teste') # Testa POST - response = client.post( + response = admin_client.post( reverse('sapl.materia:tramitacao_create', kwargs={'pk': materia_principal.pk}), {'unidade_tramitacao_local': make_unidade_tramitacao( @@ -283,12 +285,12 @@ def test_tramitacao_submit(client): @pytest.mark.django_db(transaction=False) -def test_form_errors_anexada(client): +def test_form_errors_anexada(admin_client): materia_principal = make_materia_principal() - response = client.post(reverse('sapl.materia:anexada_create', - kwargs={'pk': materia_principal.pk}), - {'salvar': 'salvar'}, - follow=True) + response = admin_client.post(reverse('sapl.materia:anexada_create', + kwargs={'pk': materia_principal.pk}), + {'salvar': 'salvar'}, + follow=True) assert (response.context_data['form'].errors['tipo'] == ['Este campo é obrigatório.']) @@ -301,42 +303,43 @@ def test_form_errors_anexada(client): @pytest.mark.django_db(transaction=False) -def test_form_errors_autoria(client): +def test_form_errors_autoria(admin_client): materia_principal = make_materia_principal() - response = client.post(reverse('sapl.materia:autoria_create', - kwargs={'pk': materia_principal.pk}), - {'materia_id': materia_principal.pk, - 'partido': '', - 'autor': '', - 'salvar': 'salvar'}, - follow=True) + response = admin_client.post(reverse('sapl.materia:autoria_create', + kwargs={'pk': materia_principal.pk}), + {'materia_id': materia_principal.pk, + 'partido': '', + 'autor': '', + 'salvar': 'salvar'}, + follow=True) assert (response.context_data['form'].errors['autor'] == ['Este campo é obrigatório.']) @pytest.mark.django_db(transaction=False) -def test_form_errors_despacho_inicial(client): +def test_form_errors_despacho_inicial(admin_client): materia_principal = make_materia_principal() - response = client.post(reverse('sapl.materia:despachoinicial_create', - kwargs={'pk': materia_principal.pk}), - {'salvar': 'salvar'}, - follow=True) + response = admin_client.post(reverse('sapl.materia:despachoinicial_create', + kwargs={'pk': materia_principal.pk}), + {'salvar': 'salvar'}, + follow=True) assert (response.context_data['form'].errors['comissao'] == ['Este campo é obrigatório.']) @pytest.mark.django_db(transaction=False) -def test_form_errors_documento_acessorio(client): +def test_form_errors_documento_acessorio(admin_client): materia_principal = make_materia_principal() - response = client.post(reverse('sapl.materia:documentoacessorio_create', - kwargs={'pk': materia_principal.pk}), - {'salvar': 'salvar'}, - follow=True) + response = admin_client.post( + reverse('sapl.materia:documentoacessorio_create', + kwargs={'pk': materia_principal.pk}), + {'salvar': 'salvar'}, + follow=True) assert (response.context_data['form'].errors['tipo'] == ['Este campo é obrigatório.']) @@ -345,13 +348,14 @@ def test_form_errors_documento_acessorio(client): @pytest.mark.django_db(transaction=False) -def test_form_errors_legislacao_citada(client): +def test_form_errors_legislacao_citada(admin_client): materia_principal = make_materia_principal() - response = client.post(reverse('sapl.materia:legislacaocitada_create', - kwargs={'pk': materia_principal.pk}), - {'salvar': 'salvar'}, - follow=True) + response = admin_client.post( + reverse('sapl.materia:legislacaocitada_create', + kwargs={'pk': materia_principal.pk}), + {'salvar': 'salvar'}, + follow=True) assert (response.context_data['form'].errors['tipo'] == ['Este campo é obrigatório.']) @@ -362,13 +366,13 @@ def test_form_errors_legislacao_citada(client): @pytest.mark.django_db(transaction=False) -def test_form_errors_numeracao(client): +def test_form_errors_numeracao(admin_client): materia_principal = make_materia_principal() - response = client.post(reverse('sapl.materia:numeracao_create', - kwargs={'pk': materia_principal.pk}), - {'salvar': 'salvar'}, - follow=True) + response = admin_client.post(reverse('sapl.materia:numeracao_create', + kwargs={'pk': materia_principal.pk}), + {'salvar': 'salvar'}, + follow=True) assert (response.context_data['form'].errors['tipo_materia'] == ['Este campo é obrigatório.']) @@ -381,13 +385,14 @@ def test_form_errors_numeracao(client): @pytest.mark.django_db(transaction=False) -def test_form_errors_tramitacao(client): +def test_form_errors_tramitacao(admin_client): materia_principal = make_materia_principal() - response = client.post(reverse('sapl.materia:tramitacao_create', - kwargs={'pk': materia_principal.pk}), - {'salvar': 'salvar'}, - follow=True) + response = admin_client.post( + reverse('sapl.materia:tramitacao_create', + kwargs={'pk': materia_principal.pk}), + {'salvar': 'salvar'}, + follow=True) assert (response.context_data['form'].errors['data_tramitacao'] == ['Este campo é obrigatório.']) @@ -402,13 +407,14 @@ def test_form_errors_tramitacao(client): @pytest.mark.django_db(transaction=False) -def test_form_errors_relatoria(client): +def test_form_errors_relatoria(admin_client): materia_principal = make_materia_principal() - response = client.post(reverse('sapl.materia:relatoria_create', - kwargs={'pk': materia_principal.pk}), - {'salvar': 'salvar'}, - follow=True) + response = admin_client.post( + reverse('sapl.materia:relatoria_create', + kwargs={'pk': materia_principal.pk}), + {'salvar': 'salvar'}, + follow=True) assert (response.context_data['form'].errors['data_designacao_relator'] == ['Este campo é obrigatório.']) @@ -417,12 +423,12 @@ def test_form_errors_relatoria(client): @pytest.mark.django_db(transaction=False) -def test_proposicao_submit(client): - response = client.post(reverse('sapl.materia:proposicao_create'), - {'tipo': mommy.make(TipoProposicao, pk=3).pk, - 'descricao': 'Teste proposição', - 'salvar': 'salvar'}, - follow=True) +def test_proposicao_submit(admin_client): + response = admin_client.post(reverse('sapl.materia:proposicao_create'), + {'tipo': mommy.make(TipoProposicao, pk=3).pk, + 'descricao': 'Teste proposição', + 'salvar': 'salvar'}, + follow=True) assert response.status_code == 200 @@ -432,11 +438,11 @@ def test_proposicao_submit(client): @pytest.mark.django_db(transaction=False) -def test_form_errors_proposicao(client): +def test_form_errors_proposicao(admin_client): - response = client.post(reverse('sapl.materia:proposicao_create'), - {'salvar': 'salvar'}, - follow=True) + response = admin_client.post(reverse('sapl.materia:proposicao_create'), + {'salvar': 'salvar'}, + follow=True) assert (response.context_data['form'].errors['tipo'] == ['Este campo é obrigatório.']) assert (response.context_data['form'].errors['descricao'] == diff --git a/sapl/norma/tests/test_norma.py b/sapl/norma/tests/test_norma.py index 16c980d15..65c0f28b1 100644 --- a/sapl/norma/tests/test_norma.py +++ b/sapl/norma/tests/test_norma.py @@ -6,22 +6,22 @@ from sapl.norma.models import NormaJuridica, TipoNormaJuridica @pytest.mark.django_db(transaction=False) -def test_incluir_norma_submit(client): +def test_incluir_norma_submit(admin_client): # Cria um tipo de norma tipo = mommy.make(TipoNormaJuridica, sigla='T', descricao='Teste') # Testa POST - response = client.post(reverse('sapl.norma:normajuridica_create'), - {'tipo': tipo.pk, - 'numero': '1', - 'ano': '2016', - 'data': '2016-03-22', - 'esfera_federacao': 'E', - 'ementa': 'Teste_Ementa', - 'salvar': 'salvar'}, - follow=True) + response = admin_client.post(reverse('sapl.norma:normajuridica_create'), + {'tipo': tipo.pk, + 'numero': '1', + 'ano': '2016', + 'data': '2016-03-22', + 'esfera_federacao': 'E', + 'ementa': 'Teste_Ementa', + 'salvar': 'salvar'}, + follow=True) assert response.status_code == 200 norma = NormaJuridica.objects.first() @@ -31,11 +31,11 @@ def test_incluir_norma_submit(client): @pytest.mark.django_db(transaction=False) -def test_incluir_norma_errors(client): +def test_incluir_norma_errors(admin_client): - response = client.post(reverse('sapl.norma:normajuridica_create'), - {'salvar': 'salvar'}, - follow=True) + response = admin_client.post(reverse('sapl.norma:normajuridica_create'), + {'salvar': 'salvar'}, + follow=True) assert (response.context_data['form'].errors['tipo'] == ['Este campo é obrigatório.']) diff --git a/sapl/parlamentares/tests/test_parlamentares.py b/sapl/parlamentares/tests/test_parlamentares.py index 2739dcd62..16b0fb158 100644 --- a/sapl/parlamentares/tests/test_parlamentares.py +++ b/sapl/parlamentares/tests/test_parlamentares.py @@ -8,20 +8,20 @@ from sapl.parlamentares.models import (Dependente, Filiacao, Legislatura, @pytest.mark.django_db(transaction=False) -def test_cadastro_parlamentar(client): +def test_cadastro_parlamentar(admin_client): legislatura = mommy.make(Legislatura) url = reverse('sapl.parlamentares:parlamentar_create') - response = client.get(url) + response = admin_client.get(url) assert response.status_code == 200 - response = client.post(url, {'nome_completo': 'Teresa Barbosa', - 'nome_parlamentar': 'Terezinha', - 'sexo': 'F', - 'ativo': 'True', - 'legislatura': legislatura.id, - 'data_expedicao_diploma': '2001-01-01'}, - follow=True) + response = admin_client.post(url, {'nome_completo': 'Teresa Barbosa', + 'nome_parlamentar': 'Terezinha', + 'sexo': 'F', + 'ativo': 'True', + 'legislatura': legislatura.id, + 'data_expedicao_diploma': '2001-01-01'}, + follow=True) [parlamentar] = Parlamentar.objects.all() assert parlamentar.nome_parlamentar == 'Terezinha' @@ -36,9 +36,9 @@ def test_cadastro_parlamentar(client): @pytest.mark.django_db(transaction=False) -def test_incluir_parlamentar_errors(client): +def test_incluir_parlamentar_errors(admin_client): url = reverse('sapl.parlamentares:parlamentar_create') - response = client.post(url) + response = admin_client.post(url) erros_esperados = {campo: ['Este campo é obrigatório.'] for campo in ['legislatura', 'data_expedicao_diploma', @@ -50,34 +50,34 @@ def test_incluir_parlamentar_errors(client): @pytest.mark.django_db(transaction=False) -def test_filiacao_submit(client): +def test_filiacao_submit(admin_client): mommy.make(Parlamentar, pk=14) mommy.make(Partido, pk=32) - client.post(reverse('sapl.parlamentares:filiacao_create', - kwargs={'pk': 14}), - {'partido': 32, - 'data': '2016-03-22', - 'salvar': 'salvar'}, - follow=True) + admin_client.post(reverse('sapl.parlamentares:filiacao_create', + kwargs={'pk': 14}), + {'partido': 32, + 'data': '2016-03-22', + 'salvar': 'salvar'}, + follow=True) filiacao = Filiacao.objects.first() assert 32 == filiacao.partido.pk @pytest.mark.django_db(transaction=False) -def test_dependente_submit(client): +def test_dependente_submit(admin_client): mommy.make(Parlamentar, pk=14) mommy.make(Partido, pk=32) mommy.make(TipoDependente, pk=3) - client.post(reverse('sapl.parlamentares:dependente_create', - kwargs={'pk': 14}), - {'nome': 'Eduardo', - 'tipo': 3, - 'sexo': 'M', - 'salvar': 'salvar'}, - follow=True) + admin_client.post(reverse('sapl.parlamentares:dependente_create', + kwargs={'pk': 14}), + {'nome': 'Eduardo', + 'tipo': 3, + 'sexo': 'M', + 'salvar': 'salvar'}, + follow=True) dependente = Dependente.objects.first() assert 3 == dependente.tipo.pk @@ -85,12 +85,13 @@ def test_dependente_submit(client): @pytest.mark.django_db(transaction=False) -def test_form_errors_dependente(client): +def test_form_errors_dependente(admin_client): mommy.make(Parlamentar, pk=14) - response = client.post(reverse('sapl.parlamentares:dependente_create', - kwargs={'pk': 14}), - {'salvar': 'salvar'}, - follow=True) + response = admin_client.post( + reverse('sapl.parlamentares:dependente_create', + kwargs={'pk': 14}), + {'salvar': 'salvar'}, + follow=True) assert (response.context_data['form'].errors['nome'] == ['Este campo é obrigatório.']) @@ -101,14 +102,14 @@ def test_form_errors_dependente(client): @pytest.mark.django_db(transaction=False) -def test_form_errors_filiacao(client): +def test_form_errors_filiacao(admin_client): mommy.make(Parlamentar, pk=14) - response = client.post(reverse('sapl.parlamentares:filiacao_create', - kwargs={'pk': 14}), - {'partido': '', - 'salvar': 'salvar'}, - follow=True) + response = admin_client.post(reverse('sapl.parlamentares:filiacao_create', + kwargs={'pk': 14}), + {'partido': '', + 'salvar': 'salvar'}, + follow=True) assert (response.context_data['form'].errors['partido'] == ['Este campo é obrigatório.']) @@ -117,31 +118,31 @@ def test_form_errors_filiacao(client): @pytest.mark.django_db(transaction=False) -def test_mandato_submit(client): +def test_mandato_submit(admin_client): mommy.make(Parlamentar, pk=14) mommy.make(Legislatura, pk=5) - client.post(reverse('sapl.parlamentares:mandato_create', - kwargs={'pk': 14}), - {'legislatura': 5, - 'data_fim_mandato': '2016-01-01', - 'data_expedicao_diploma': '2016-03-22', - 'observacao': 'Observação do mandato', - 'salvar': 'salvar'}, - follow=True) + admin_client.post(reverse('sapl.parlamentares:mandato_create', + kwargs={'pk': 14}), + {'legislatura': 5, + 'data_fim_mandato': '2016-01-01', + 'data_expedicao_diploma': '2016-03-22', + 'observacao': 'Observação do mandato', + 'salvar': 'salvar'}, + follow=True) mandato = Mandato.objects.first() assert 'Observação do mandato' == mandato.observacao @pytest.mark.django_db(transaction=False) -def test_form_errors_mandato(client): +def test_form_errors_mandato(admin_client): mommy.make(Parlamentar, pk=14) - response = client.post(reverse('sapl.parlamentares:mandato_create', - kwargs={'pk': 14}), - {'legislatura': '', - 'salvar': 'salvar'}, - follow=True) + response = admin_client.post(reverse('sapl.parlamentares:mandato_create', + kwargs={'pk': 14}), + {'legislatura': '', + 'salvar': 'salvar'}, + follow=True) assert (response.context_data['form'].errors['legislatura'] == ['Este campo é obrigatório.']) diff --git a/sapl/protocoloadm/tests/test_protocoloadm.py b/sapl/protocoloadm/tests/test_protocoloadm.py index 40dccb2dc..b4d39942e 100644 --- a/sapl/protocoloadm/tests/test_protocoloadm.py +++ b/sapl/protocoloadm/tests/test_protocoloadm.py @@ -8,22 +8,22 @@ from sapl.protocoloadm.models import Protocolo @pytest.mark.django_db(transaction=False) -def test_anular_protocolo_acessivel(client): - response = client.get(reverse('sapl.protocoloadm:anular_protocolo')) +def test_anular_protocolo_acessivel(admin_client): + response = admin_client.get(reverse('sapl.protocoloadm:anular_protocolo')) assert response.status_code == 200 @pytest.mark.django_db(transaction=False) -def test_anular_protocolo_submit(client): +def test_anular_protocolo_submit(admin_client): mommy.make(Protocolo, numero='76', ano='2016', anulado=False) # TODO: setar usuario e IP - response = client.post(reverse('sapl.protocoloadm:anular_protocolo'), - {'numero': '76', - 'ano': '2016', - 'justificativa_anulacao': 'TESTE', - 'salvar': 'Anular'}, - follow=True) + response = admin_client.post(reverse('sapl.protocoloadm:anular_protocolo'), + {'numero': '76', + 'ano': '2016', + 'justificativa_anulacao': 'TESTE', + 'salvar': 'Anular'}, + follow=True) assert response.status_code == 200