Browse Source

Merge master

pull/1510/head
Eduardo Calil 8 years ago
parent
commit
04f30bdd5a
  1. 3
      .gitignore
  2. 2
      sapl/base/forms.py
  3. 21
      sapl/base/tests/test_form.py
  4. 35
      sapl/base/tests/test_view_base.py
  5. 12
      sapl/legacy/migration.py
  6. 5
      sapl/legacy/scripts/migra_dbs.sh
  7. 8
      sapl/legacy/scripts/recria_dbs_postgres.sh
  8. 14
      sapl/parlamentares/migrations/0010_corrige_data_inicio_mandato.py
  9. 1
      sapl/protocoloadm/views.py
  10. 26
      sapl/sessao/tests/test_sessao.py
  11. 49
      sapl/sessao/tests/test_sessao_view.py
  12. 20
      setup.py

3
.gitignore

@ -6,6 +6,9 @@ __pycache__/
# C extensions
*.so
# Nodejs
node_modules/
# Distribution / packaging
.Python
env/

2
sapl/base/forms.py

@ -231,7 +231,7 @@ class AutorForm(ModelForm):
if 'status_user' in self.Meta.fields:
if self.instance.pk and self.instance.user_id:
if getattr(
self.instance.user.username,
self.instance.user,
get_user_model().USERNAME_FIELD) != cd['username']:
if 'status_user' not in cd or not cd['status_user']:
raise ValidationError(

21
sapl/base/tests/test_form.py

@ -1,3 +1,4 @@
import pytest
from django.utils.translation import ugettext_lazy as _
from sapl.base.forms import CasaLegislativaForm
@ -18,3 +19,23 @@ def test_valida_campos_obrigatorios_casa_legislativa_form():
assert errors['uf'] == [_('Este campo é obrigatório.')]
assert len(errors) == 6
@pytest.mark.django_db(transaction=False)
def test_casa_legislativa_form_invalido():
form = CasaLegislativaForm(data={'codigo': 'codigo',
'nome': 'nome',
'sigla': 'sg',
'endereco': 'endereco',
'cep': '7000000',
'municipio': 'municipio',
'uf': 'uf',
'telefone': '33333333',
'fax': '33333333',
'logotipo': 'image',
'endereco_web': 'web',
'email': 'email',
'informacao_geral': 'informacao_geral'
})
assert not form.is_valid()

35
sapl/base/tests/test_view_base.py

@ -0,0 +1,35 @@
import pytest
from django.core.urlresolvers import reverse
from django.utils.translation import ugettext_lazy as _
@pytest.mark.django_db(transaction=False)
def test_incluir_casa_legislativa_errors(admin_client):
response = admin_client.post(reverse('sapl.base:casalegislativa_create'),
{'salvar': 'salvar'},
follow=True)
assert (response.context_data['form'].errors['nome'] ==
[_('Este campo é obrigatório.')])
assert (response.context_data['form'].errors['sigla'] ==
[_('Este campo é obrigatório.')])
assert (response.context_data['form'].errors['endereco'] ==
[_('Este campo é obrigatório.')])
assert (response.context_data['form'].errors['cep'] ==
[_('Este campo é obrigatório.')])
assert (response.context_data['form'].errors['municipio'] ==
[_('Este campo é obrigatório.')])
assert (response.context_data['form'].errors['uf'] ==
[_('Este campo é obrigatório.')])
@pytest.mark.django_db(transaction=False)
def test_incluir_tipo_autor_errors(admin_client):
response = admin_client.post(reverse('sapl.base:tipoautor_create'),
{'salvar': 'salvar'},
follow=True)
assert (response.context_data['form'].errors['descricao'] ==
[_('Este campo é obrigatório.')])

12
sapl/legacy/migration.py

@ -17,7 +17,8 @@ from django.db.models import Count, Max
from django.db.models.base import ModelBase
from sapl.base.models import AppConfig as AppConf
from sapl.base.models import Autor, ProblemaMigracao, TipoAutor
from sapl.base.models import (Autor, CasaLegislativa, ProblemaMigracao,
TipoAutor)
from sapl.comissoes.models import Comissao, Composicao, Participacao
from sapl.legacy.models import TipoNumeracaoProtocolo
from sapl.materia.models import (AcompanhamentoMateria, Proposicao,
@ -208,7 +209,8 @@ def fill_vinculo_norma_juridica():
TipoVinculoNormaJuridica.objects.bulk_create(lista_objs)
def fill_tipo_numeracao_protocolo():
def fill_dados_basicos():
# Ajusta sequencia numérica e cria base.AppConfig
letra = 'A'
try:
tipo = TipoNumeracaoProtocolo.objects.latest('dat_inicial_protocolo')
@ -223,6 +225,10 @@ def fill_tipo_numeracao_protocolo():
appconf = AppConf(sequencia_numeracao=letra)
appconf.save()
# Cria instância de CasaLegislativa
casa = CasaLegislativa()
casa.save()
# Uma anomalia no sapl 2.5 causa a duplicação de registros de votação.
# Essa duplicação deve ser eliminada para que não haja erro no sapl 3.1
@ -338,7 +344,7 @@ class DataMigrator:
'--database=default', '--no-input'], stdout=PIPE)
fill_vinculo_norma_juridica()
fill_tipo_numeracao_protocolo()
fill_dados_basicos()
info('Começando migração: %s...' % obj)
self._do_migrate(obj)

5
sapl/legacy/scripts/migra_dbs.sh

@ -3,9 +3,8 @@
# rodar esse script na raiz do projeto
if [ $# -eq 2 ]; then
parallel -eta --verbose ./sapl/legacy/scripts/migra_um_db.sh :::: <(mysql -u $1 -p$2 -e 'show databases;' | grep '^sapl_' | grep -v '_copy$') ::: $1 ::: $2
parallel -eta --verbose -j+0 ./sapl/legacy/scripts/migra_um_db.sh :::: <(mysql -u $1 -p$2 -e 'show databases;' | grep '^sapl_' | grep -v '_copy$') ::: $1 ::: $2
else
echo "USO:"
echo " ./sapl/legacy/scripts/migra_dbs.sh [usuário mysql] [senha mysql]"
echo " $0 [usuário mysql] [senha mysql]"
fi;

8
sapl/legacy/scripts/recria_dbs_postgres.sh

@ -1,11 +1,11 @@
#!/bin/bash
# (Re)cria todos os bancos postgres para migração
# cria um banco postgres (de mesmo nome) para cada banco mysql cujo nome começa com "sapl_"
if [ $# -eq 2 ]; then
parallel --verbose ./recria_um_db_postgres.sh :::: <(mysql -u $1 -p$2 -e 'show databases;' | grep '^sapl_' | grep -v '_copy$')
parallel --verbose -j+0 ./recria_um_db_postgres.sh :::: <(mysql -u $1 -p$2 -e 'show databases;' | grep '^sapl_' | grep -v '_copy$')
else
echo "USO:"
echo " ./recria_dbs_postgres.sh [usuário mysql] [senha mysql]"
echo " $0 [usuário mysql] [senha mysql]"
fi;

14
sapl/parlamentares/migrations/0010_corrige_data_inicio_mandato.py

@ -1,12 +1,8 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations
import json
import os
from datetime import timedelta
from django.core.management import call_command
from django.db import migrations
def altera_data_inicio_mandato(apps, schema_editor):
@ -16,7 +12,9 @@ def altera_data_inicio_mandato(apps, schema_editor):
for mandato in mandatos:
data_inicio = mandato.data_inicio_mandato
data_inicio_legislatura = mandato.legislatura.data_inicio
days = abs((data_inicio - data_inicio_legislatura).days)
days = abs((data_inicio - data_inicio_legislatura
).days) if data_inicio else 60
if days >= 60:
mandato.data_inicio_mandato = data_inicio_legislatura
@ -28,8 +26,8 @@ class Migration(migrations.Migration):
dependencies = [
# A dependencia real desse script é o arquivo 0001_initial.py, mas
# isso gera um erro (Conflicting migrations detected; multiple leaf
# nodes in the migration graph). para não ocasionar problemas de migração,
# vamos manter a ordem padrão do django.
# nodes in the migration graph). para não ocasionar problemas de migração,
# vamos manter a ordem padrão do django.
('parlamentares', '0009_auto_20170905_1617'),
]

1
sapl/protocoloadm/views.py

@ -1,3 +1,4 @@
from braces.views import FormValidMessageMixin
from django.contrib import messages
from django.contrib.auth.mixins import PermissionRequiredMixin

26
sapl/sessao/tests/test_sessao.py

@ -2,9 +2,11 @@ import pytest
from django.utils.translation import ugettext_lazy as _
from model_mommy import mommy
from sapl.materia.models import TipoMateriaLegislativa, MateriaLegislativa
from sapl.parlamentares.models import Legislatura, Partido, SessaoLegislativa
from sapl.sessao import forms
from sapl.sessao.models import SessaoPlenaria, TipoSessaoPlenaria
from sapl.sessao.models import (ExpedienteMateria, SessaoPlenaria,
TipoSessaoPlenaria)
def test_valida_campos_obrigatorios_sessao_plenaria_form():
@ -113,3 +115,25 @@ def test_bancada_form_datas_invalidas():
assert not form.is_valid()
assert form.errors['__all__'] == [_('Data de extinção não pode ser menor '
'que a de criação')]
@pytest.mark.django_db(transaction=False)
def test_expediente_materia_form_valido():
tipo_materia = mommy.make(TipoMateriaLegislativa)
materia = mommy.make(MateriaLegislativa, tipo=tipo_materia)
sessao = mommy.make(SessaoPlenaria)
instance = mommy.make(ExpedienteMateria, sessao_plenaria=sessao,
materia=materia)
form = forms.ExpedienteMateriaForm(data={'data_ordem': '28/12/2009',
'numero_ordem': 1,
'tipo_materia': tipo_materia.pk,
'numero_materia': materia.numero,
'ano_materia': materia.ano,
'tipo_votacao': 1,
'sessao_plenaria': sessao.pk
},
instance=instance)
assert form.is_valid()

49
sapl/sessao/tests/test_sessao_view.py

@ -0,0 +1,49 @@
import pytest
from django.core.urlresolvers import reverse
from django.utils.translation import ugettext_lazy as _
from model_mommy import mommy
from sapl.parlamentares.models import Legislatura, SessaoLegislativa
from sapl.sessao.models import SessaoPlenaria, TipoSessaoPlenaria
@pytest.mark.django_db(transaction=False)
def test_incluir_sessao_plenaria_submit(admin_client):
legislatura = mommy.make(Legislatura)
sessao = mommy.make(SessaoLegislativa)
tipo = mommy.make(TipoSessaoPlenaria)
response = admin_client.post(reverse('sapl.sessao:sessaoplenaria_create'),
{'legislatura': str(legislatura.pk),
'numero': '1',
'tipo': str(tipo.pk),
'sessao_legislativa': str(sessao.pk),
'data_inicio': '10/11/2017',
'hora_inicio': '10:10'
}, follow=True)
assert response.status_code == 200
sessao_plenaria = SessaoPlenaria.objects.first()
assert sessao_plenaria.tipo == tipo
@pytest.mark.django_db(transaction=False)
def test_incluir_sessao_errors(admin_client):
response = admin_client.post(reverse('sapl.sessao:sessaoplenaria_create'),
{'salvar': 'salvar'},
follow=True)
assert (response.context_data['form'].errors['legislatura'] ==
[_('Este campo é obrigatório.')])
assert (response.context_data['form'].errors['sessao_legislativa'] ==
[_('Este campo é obrigatório.')])
assert (response.context_data['form'].errors['tipo'] ==
[_('Este campo é obrigatório.')])
assert (response.context_data['form'].errors['numero'] ==
[_('Este campo é obrigatório.')])
assert (response.context_data['form'].errors['data_inicio'] ==
[_('Este campo é obrigatório.')])
assert (response.context_data['form'].errors['hora_inicio'] ==
[_('Este campo é obrigatório.')])

20
setup.py

@ -10,6 +10,13 @@ os.chdir(os.path.normpath(os.path.join(os.path.abspath(__file__), os.pardir)))
install_requires = [
'dj-database-url==0.4.1',
'django-haystack==2.6.0',
'django>=1.9,<1.10',
# TODO O django-admin-bootstrapped 2.5.7 não inseriu a mudança que permite
# a compatibilidade com Django 1.9+. A linha abaixo será mudada quando uma
# nova versão do django-admin-bootstrapped for lançada
# 'git+git://github.com/django-admin-bootstrapped/
# django-admin-bootstrapped.git',
'django-bootstrap3==7.0.1',
'django-bower==5.1.0',
'django-braces==1.9.0',
@ -20,24 +27,29 @@ install_requires = [
'django-filter==0.15.3',
'django-floppyforms==1.6.2',
'django-model-utils==2.5',
'django-sass-processor==0.4.6',
'django>=1.9,<1.10',
'django-sass-processor==0.5.4',
'djangorestframework',
'drfdocs',
'easy-thumbnails==2.3',
# 'git+git://github.com/interlegis/trml2pdf.git',
'libsass==0.11.1',
'psycopg2==2.6.2',
'python-decouple==3.0',
'pytz==2016.4',
'pyyaml==3.11',
'rtyaml==0.0.3',
'textract==1.5.0',
'unipath==1.1',
'pysolr==3.6.0',
'python-magic==0.4.12',
'gunicorn==19.6.0',
# git+git://github.com/interlegis/trml2pdf.git
'django-reversion==2.0.8',
'WeasyPrint==0.30',
'whoosh==2.7.4'
]
setup(
name='interlegis-sapl',
version='3.1.1-alpha',
version='3.1.24-BETA',
packages=find_packages(),
include_package_data=True,
license='GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007',

Loading…
Cancel
Save