Browse Source

Merge branch '33-falhas-nos-testes-automaticos'

pull/222/head
Marcio Mazza 9 years ago
parent
commit
f8daa48917
  1. 2
      comissoes/views.py
  2. 2
      compilacao/views.py
  3. 0
      crud.py
  4. 0
      crud_tests/__init__.py
  5. 23
      crud_tests/models.py
  6. 70
      crud_tests/settings.py
  7. 43
      crud_tests/templates/base.html
  8. 220
      crud_tests/test_flux.py
  9. 9
      crud_tests/urls.py
  10. 12
      crud_tests/views.py
  11. 2
      lexml/views.py
  12. 15
      materia/views.py
  13. 2
      norma/views.py
  14. 2
      painel/views.py
  15. 2
      parlamentares/views.py
  16. 5
      protocoloadm/views.py
  17. 2
      pytest.ini
  18. 24
      sapl/teststubs/urls_for_list_test.py
  19. 4
      sessao/views.py
  20. 3
      test_and_check_qa.sh

2
comissoes/views.py

@ -5,9 +5,9 @@ from django.views.generic import ListView
from django.views.generic.edit import FormMixin from django.views.generic.edit import FormMixin
from vanilla import GenericView from vanilla import GenericView
from crud import build_crud
from materia.models import Tramitacao from materia.models import Tramitacao
from parlamentares.models import Filiacao from parlamentares.models import Filiacao
from sapl.crud import build_crud
from .forms import (CadastrarComissaoForm, ComposicaoForm, from .forms import (CadastrarComissaoForm, ComposicaoForm,
ParticipacaoCadastroForm) ParticipacaoCadastroForm)

2
compilacao/views.py

@ -27,7 +27,7 @@ from compilacao.models import (Dispositivo, Nota,
TextoArticulado, TipoDispositivo, TipoNota, TextoArticulado, TipoDispositivo, TipoNota,
TipoPublicacao, TipoTextoArticulado, TipoVide, TipoPublicacao, TipoTextoArticulado, TipoVide,
VeiculoPublicacao, Vide) VeiculoPublicacao, Vide)
from sapl.crud import NO_ENTRIES_MSG, build_crud, make_pagination from crud import NO_ENTRIES_MSG, build_crud, make_pagination
DISPOSITIVO_SELECT_RELATED = ( DISPOSITIVO_SELECT_RELATED = (
'tipo_dispositivo', 'tipo_dispositivo',

0
sapl/crud.py → crud.py

0
sapl/teststubs/__init__.py → crud_tests/__init__.py

23
crud_tests/models.py

@ -0,0 +1,23 @@
from django.db import models
class Continent(models.Model):
name = models.CharField(max_length=50)
def __str__(self):
return self.name
class Country(models.Model):
name = models.CharField(max_length=50)
continent = models.ForeignKey(Continent)
is_cold = models.BooleanField(choices=[(True, 'Yes'), (False, 'No')])
population = models.PositiveIntegerField(blank=True, null=True)
description = models.TextField(blank=True)
class Meta:
verbose_name = 'Country'
verbose_name_plural = 'Countries'
def __str__(self):
return self.name

70
crud_tests/settings.py

@ -0,0 +1,70 @@
import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': ':memory:',
'NAME': '/tmp/db',
},
}
INSTALLED_APPS = (
'django.contrib.contenttypes',
'django.contrib.auth',
'django.contrib.messages',
'django.contrib.sessions',
'crud_tests',
'crispy_forms',
)
ROOT_URLCONF = 'crud_tests.urls'
USE_TZ = True
SECRET_KEY = 'zzz...'
TEMPLATES = [{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'crud_tests/templates'), os.path.join(BASE_DIR, 'templates')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
"django.core.context_processors.media",
"django.core.context_processors.static",
'django.contrib.messages.context_processors.messages',
],
},
}]
STATIC_URL = '/static/'
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
# 'django.middleware.locale.LocaleMiddleware',
# 'django.middleware.common.CommonMiddleware',
# 'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
# 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
# 'django.middleware.clickjacking.XFrameOptionsMiddleware',
# 'django.middleware.security.SecurityMiddleware',
)
SILENCED_SYSTEM_CHECKS = [
'1_7.W001', # Unset MIDDLEWARE_CLASSES warning
]
TIME_ZONE = 'America/Sao_Paulo'
USE_I18N = True
USE_L10N = False
USE_TZ = True
# DATE_FORMAT = 'N j, Y'
DATE_FORMAT = 'd/m/Y'
SHORT_DATE_FORMAT = 'd/m/Y'
DATE_INPUT_FORMATS = ('%d/%m/%Y', '%m-%d-%Y', '%Y-%m-%d')

43
crud_tests/templates/base.html

@ -0,0 +1,43 @@
{% load i18n %}
<!DOCTYPE html>
<!--[if IE 8]> <html class="no-js lt-ie9" lang="en"> <![endif]-->
<!--[if gt IE 8]><!-->
<html class="no-js" lang="pt-br">
<!--<![endif]-->
<body>
<main id="content" class="content page__row">
<div class="container">
{# Feedback messages #}
{% for message in messages %}
<div class="alert alert-{% if message.tags == 'error' %}danger{% else %}{{ message.tags }}{% endif %} alert-dismissible fade in" role="alert">
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span class="glyphicon glyphicon-remove" aria-hidden="true"></span>
</button>
{{ message|safe }}
</div>
{% endfor %}
{# Content header #}
{% block base_header %}
<div class="clearfix">
{% block title %}
{% if view.title %}
<h1 class="page-header">{{ view.title|linebreaksbr }}</h1>
{% endif %}
{% endblock %}
</div>
{% endblock base_header %}
{# Content per se #}
{% block base_content %}{% endblock %}
</div>
</main>
</body>
</html>

220
sapl/test_crud.py → crud_tests/test_flux.py

@ -2,29 +2,25 @@ import pytest
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from model_mommy import mommy from model_mommy import mommy
from comissoes.models import Comissao, TipoComissao from crud import (NO_ENTRIES_MSG, build_crud, from_to, get_field_display,
make_pagination)
from .crud import (NO_ENTRIES_MSG, build_crud, from_to, get_field_display, from .models import Continent, Country
make_pagination) from .views import country_crud
pytestmark = pytest.mark.django_db pytestmark = pytest.mark.django_db
# XXX These tests are based on comissoes app
# but could be done with a stub one
@pytest.mark.parametrize("layout, result", [ @pytest.mark.parametrize("layout, result", [
([['Dados Complementares']], []), # missing rows definition ([['Dados Complementares']], []), # missing rows definition
([
['Dados Básicos', ([['Basic', [('name', 9), ('population', 3)]],
[('nome', 9), ('sigla', 3)], ['More Details', [('description', 12)]],
[('tipo', 3), ('data_criacao', 3), ('unidade_deliberativa', 3), ] ],
], ['name', 'population']),
['Dados Complementares', [('finalidade', 12)]], ],
['nome', 'sigla', 'tipo', 'data_criacao', 'unidade_deliberativa']),
]) ])
def test_listview_get_fieldnames(layout, result): def test_listview_get_fieldnames(layout, result):
crud = build_crud(Comissao, 'stub_help_path', layout) crud = build_crud(Country, 'stub_help_path', layout)
view = crud.CrudListView() view = crud.CrudListView()
assert view.field_names == result assert view.field_names == result
@ -74,84 +70,66 @@ def test_make_pagination(index, num_pages, result):
def test_get_field_display(): def test_get_field_display():
stub = mommy.prepare(Comissao, unidade_deliberativa=True) stub = mommy.prepare(Country, is_cold=True)
assert get_field_display(stub, 'nome')[1] == stub.nome assert get_field_display(stub, 'name')[1] == stub.name
assert get_field_display(stub, 'tipo')[1] == str(stub.tipo) assert get_field_display(stub, 'continent')[1] == str(stub.continent)
# must return choice display, not the value # must return choice display, not the value
assert stub.unidade_deliberativa is True assert stub.is_cold is True
assert get_field_display(stub, 'unidade_deliberativa')[1] == 'Sim' assert get_field_display(stub, 'is_cold')[1] == 'Yes'
# None is displayed as empty string # None is displayed as an empty string
assert stub.finalidade is None assert stub.population is None
assert get_field_display(stub, 'finalidade')[1] == '' assert get_field_display(stub, 'population')[1] == ''
def test_crud_detail_view_fieldsets(monkeypatch): def test_crud_detail_view_fieldsets(monkeypatch):
crud = build_crud( view = country_crud.CrudDetailView()
Comissao, 'stub_help_path', [ stub = mommy.make(Country,
name='Brazil',
['Dados Básicos', continent__name='South America',
[('nome', 9), ('sigla', 3)], is_cold=False)
[('tipo', 3), ('data_criacao', 3), ('unidade_deliberativa', 3), ]
],
['Dados Complementares',
[('finalidade', 12)]
],
])
view = crud.CrudDetailView()
stub = mommy.make(Comissao,
nome='nome!!!',
tipo__nome='tipo!!!',
sigla='sigla!!!',
data_criacao='2011-01-01',
unidade_deliberativa=True)
# to test None displayed as empty string # to test None displayed as empty string
assert stub.finalidade is None assert stub.population is None
def get_object(): def get_object():
return stub return stub
monkeypatch.setattr(view, 'get_object', get_object) monkeypatch.setattr(view, 'get_object', get_object)
assert view.fieldsets == [ assert view.fieldsets == [
{'legend': 'Dados Básicos', {'legend': 'Basic Data',
'rows': [[{'id': 'nome', 'rows': [[{'id': 'name',
'span': 9, 'span': 9,
'text': 'nome!!!', 'text': stub.name,
'verbose_name': 'Nome'}, 'verbose_name': 'name'},
{'id': 'sigla', {'id': 'continent',
'span': 3, 'span': 3,
'text': 'sigla!!!', 'text': stub.continent.name,
'verbose_name': 'Sigla'}], 'verbose_name': 'continent'}
],
[{'id': 'tipo', [{'id': 'population',
'span': 3, 'span': 6,
'text': 'tipo!!!', 'text': '',
'verbose_name': 'Tipo'}, 'verbose_name': 'population'},
{'id': 'data_criacao', {'id': 'is_cold',
'span': 3, 'span': 6,
'text': '2011-01-01', 'text': 'No',
'verbose_name': 'Data de Criação'}, 'verbose_name': 'is cold'}]]},
{'id': 'unidade_deliberativa', {'legend': 'More Details',
'span': 3, 'rows': [[{'id': 'description',
'text': 'Sim',
'verbose_name': 'Unidade Deliberativa'}]]},
{'legend': 'Dados Complementares',
'rows': [[{'id': 'finalidade',
'span': 12, 'span': 12,
'text': '', 'text': '',
'verbose_name': 'Finalidade'}]]}] 'verbose_name': 'description'}]]}]
def test_reverse(): def test_reverse():
assert '/comissoes/' == reverse('comissao:list') assert '/countries/' == reverse('country:list')
assert '/comissoes/create' == reverse('comissao:create') assert '/countries/create' == reverse('country:create')
assert '/comissoes/2' == reverse('comissao:detail', args=(2,)) assert '/countries/2' == reverse('country:detail', args=(2,))
assert '/comissoes/2/edit' == reverse('comissao:update', args=(2,)) assert '/countries/2/edit' == reverse('country:update', args=(2,))
assert '/comissoes/2/delete' == reverse('comissao:delete', args=(2,)) assert '/countries/2/delete' == reverse('country:delete', args=(2,))
def assert_h1(res, title): def assert_h1(res, title):
@ -162,14 +140,14 @@ NO_ENTRIES_MSG = str(NO_ENTRIES_MSG) # "unlazy"
def assert_on_list_page(res): def assert_on_list_page(res):
assert_h1(res, 'Comissões') assert_h1(res, 'Countries')
assert 'Adicionar Comissão' in res assert 'Adicionar Country' in res
assert res.html.find('table') or NO_ENTRIES_MSG in res assert res.html.find('table') or NO_ENTRIES_MSG in res
# XXX ... characterize better # XXX ... characterize better
def assert_on_create_page(res): def assert_on_create_page(res):
assert_h1(res, 'Adicionar Comissão') assert_h1(res, 'Adicionar Country')
form = res.form form = res.form
assert not any( assert not any(
form[k].value for k in form.fields if k != 'csrfmiddlewaretoken') form[k].value for k in form.fields if k != 'csrfmiddlewaretoken')
@ -182,7 +160,6 @@ def assert_on_detail_page(res, stub_name):
assert 'Excluir' in res assert 'Excluir' in res
@pytest.mark.urls('sapl.teststubs.urls_for_list_test')
@pytest.mark.parametrize("num_entries, page_size, ranges, page_list", [ @pytest.mark.parametrize("num_entries, page_size, ranges, page_list", [
(0, 6, [], []), (0, 6, [], []),
(5, 5, [(0, 5)], []), (5, 5, [(0, 5)], []),
@ -194,15 +171,19 @@ def test_flux_list_paginate_detail(
entries_labels = [] entries_labels = []
for i in range(num_entries): for i in range(num_entries):
# letter = next(letters) name, continent = 'name %s' % i, 'continent %s' % i
nome, sigla, tipo = 'nome %s' % i, 'sigla %s' % i, 'tipo %s' % i population, is_cold = i, i % 2 == 0
entries_labels.append([nome, sigla, tipo]) entries_labels.append([
mommy.make(Comissao, nome=nome, sigla=sigla, tipo__nome=tipo) name, continent, str(population), 'Yes' if is_cold else 'No'])
mommy.make(Country,
name=name,
continent__name=continent,
population=population,
is_cold=is_cold)
from .teststubs.urls_for_list_test import crud country_crud.CrudListView.paginate_by = page_size
crud.CrudListView.paginate_by = page_size
res = app.get('/comissoes/') res = app.get('/countries/')
if num_entries == 0: if num_entries == 0:
assert_on_list_page(res) assert_on_list_page(res)
@ -217,7 +198,8 @@ def test_flux_list_paginate_detail(
table = res.html.find('table') table = res.html.find('table')
assert table assert table
header, *trs = table.findAll('tr') header, *trs = table.findAll('tr')
assert header.text.strip().split() == ['Nome', 'Sigla', 'Tipo'] assert [c.text for c in header.findChildren('th')] == [
'name', 'continent', 'population', 'is cold']
rows = [[td.text.strip() for td in tr.findAll('td')] rows = [[td.text.strip() for td in tr.findAll('td')]
for tr in trs] for tr in trs]
@ -230,38 +212,38 @@ def test_flux_list_paginate_detail(
assert paginator.text.strip().split() == page_list assert paginator.text.strip().split() == page_list
assert_at_page(res, 1) assert_at_page(res, 1)
res_detail = res.click('nome 1') res_detail = res.click('name 1')
assert_on_detail_page(res_detail, 'nome 1') assert_on_detail_page(res_detail, 'name 1')
if len(ranges) > 1: if len(ranges) > 1:
res = res.click('2', href='page=2') res = res.click('2', href='page=2')
assert_at_page(res, 2) assert_at_page(res, 2)
fist_entry_on_2nd_page = 'nome %s' % page_size fist_entry_on_2nd_page = 'name %s' % page_size
res_detail = res.click(fist_entry_on_2nd_page) res_detail = res.click(fist_entry_on_2nd_page)
assert_on_detail_page(res_detail, fist_entry_on_2nd_page) assert_on_detail_page(res_detail, fist_entry_on_2nd_page)
res = res.click('1', href='page=1') res = res.click('1', href='page=1')
assert_at_page(res, 1) assert_at_page(res, 1)
res_detail = res.click('nome 1') res_detail = res.click('name 1')
assert_on_detail_page(res_detail, 'nome 1') assert_on_detail_page(res_detail, 'name 1')
@pytest.mark.parametrize("cancel, make_invalid_submit", [ @pytest.mark.parametrize("cancel, make_invalid_submit", [
(a, b) for a in (True, False) for b in (True, False)]) (a, b) for a in (True, False) for b in (True, False)])
def test_flux_list_create_detail(app, cancel, make_invalid_submit): def test_flux_list_create_detail(app, cancel, make_invalid_submit):
# to have a couple an option for tipo field # to have a couple an option for continent field
stub_tipo = mommy.make(TipoComissao) stub_continent = mommy.make(Continent)
res = app.get('/comissoes/') res = app.get('/countries/')
# on list page # on list page
assert_on_list_page(res) assert_on_list_page(res)
res = res.click('Adicionar Comissão') res = res.click('Adicionar Country')
previous_objects = set(Comissao.objects.all()) previous_objects = set(Country.objects.all())
# on create page # on create page
assert_on_create_page(res) assert_on_create_page(res)
@ -272,7 +254,7 @@ def test_flux_list_create_detail(app, cancel, make_invalid_submit):
# back to list page # back to list page
assert_on_list_page(res) assert_on_list_page(res)
# db has not changed # db has not changed
assert previous_objects == set(Comissao.objects.all()) assert previous_objects == set(Country.objects.all())
else: else:
# and a test detour ! # and a test detour !
if make_invalid_submit: if make_invalid_submit:
@ -281,34 +263,34 @@ def test_flux_list_create_detail(app, cancel, make_invalid_submit):
'Formulário inválido. O registro não foi criado.' in res 'Formulário inválido. O registro não foi criado.' in res
assert_on_create_page(res) assert_on_create_page(res)
# db has not changed # db has not changed
assert previous_objects == set(Comissao.objects.all()) assert previous_objects == set(Country.objects.all())
# now fill out some fields # now fill out some fields
form = res.form form = res.form
stub_name = '### Nome Especial ###' stub_name = '### name ###'
form['nome'] = stub_name form['name'] = stub_name
form['sigla'] = 'SIGLA' form['continent'] = stub_continent.id
form['tipo'] = stub_tipo.id form['population'] = 23000
form['data_criacao'] = '1/1/2001' form['is_cold'] = True
res = form.submit() res = form.submit()
# on redirect to detail page # on redirect to detail page
created = Comissao.objects.get(nome=stub_name) created = Country.objects.get(name=stub_name)
assert res.url.endswith('/comissoes/%s' % created.id) assert res.url.endswith('/countries/%s' % created.id)
res = res.follow() res = res.follow()
# on detail page # on detail page
assert_on_detail_page(res, stub_name) assert_on_detail_page(res, stub_name)
assert 'Registro criado com sucesso!' in res assert 'Registro criado com sucesso!' in res
[new_obj] = list(set(Comissao.objects.all()) - previous_objects) [new_obj] = list(set(Country.objects.all()) - previous_objects)
assert new_obj.nome == stub_name assert new_obj.name == stub_name
def get_detail_page(app): def get_detail_page(app):
stub = mommy.make(Comissao, nome='Comissão Stub') stub = mommy.make(Country, name='Country Stub')
res = app.get('/comissoes/%s' % stub.id) res = app.get('/countries/%s' % stub.id)
# on detail page # on detail page
assert_on_detail_page(res, stub.nome) assert_on_detail_page(res, stub.name)
return stub, res return stub, res
@ -318,29 +300,29 @@ def test_flux_detail_update_detail(app, cancel):
res = res.click('Editar') res = res.click('Editar')
# on update page # on update page
assert_h1(res, stub.nome) assert_h1(res, stub.name)
# test bifurcation ! # test bifurcation !
if cancel: if cancel:
res = res.click('Cancelar') res = res.click('Cancelar')
# back to detail page # back to detail page
assert_on_detail_page(res, stub.nome) assert_on_detail_page(res, stub.name)
assert Comissao.objects.get(pk=stub.pk).nome == stub.nome assert Country.objects.get(pk=stub.pk).name == stub.name
else: else:
form = res.form form = res.form
new_name = '### New Name ###' new_name = '### New Name ###'
form['nome'] = new_name form['name'] = new_name
res = form.submit() res = form.submit()
# on redirect to detail page # on redirect to detail page
assert res.url.endswith('/comissoes/%s' % stub.id) assert res.url.endswith('/countries/%s' % stub.id)
res = res.follow() res = res.follow()
# back to detail page # back to detail page
assert_on_detail_page(res, new_name) assert_on_detail_page(res, new_name)
assert 'Registro alterado com sucesso!' in res assert 'Registro alterado com sucesso!' in res
assert Comissao.objects.get(pk=stub.pk).nome == new_name assert Country.objects.get(pk=stub.pk).name == new_name
@pytest.mark.parametrize("cancel", [True, False]) @pytest.mark.parametrize("cancel", [True, False])
@ -349,24 +331,24 @@ def test_flux_detail_delete_list(app, cancel):
res = res.click('Excluir') res = res.click('Excluir')
# on delete page # on delete page
assert 'Tem certeza que deseja apagar' in res assert 'Confirma exclusão de' in res
assert stub.nome in res assert stub.name in res
# test bifurcation ! # test bifurcation !
if cancel: if cancel:
res = res.click('Cancelar') res = res.click('Cancelar')
# back to detail page # back to detail page
assert_on_detail_page(res, stub.nome) assert_on_detail_page(res, stub.name)
assert Comissao.objects.filter(pk=stub.pk) assert Country.objects.filter(pk=stub.pk)
else: else:
res = res.form.submit() res = res.form.submit()
# on redirect to list page # on redirect to list page
assert res.url.endswith('/comissoes/') assert res.url.endswith('/countries/')
res = res.follow() res = res.follow()
# on list page # on list page
assert 'Registro excluído com sucesso!' in res assert 'Registro excluído com sucesso!' in res
assert_h1(res, 'Comissões') assert_h1(res, 'Countries')
assert not Comissao.objects.filter(pk=stub.pk) assert not Country.objects.filter(pk=stub.pk)

9
crud_tests/urls.py

@ -0,0 +1,9 @@
from django.conf.urls import include, url
from .views import country_crud
urlpatterns = [
url(r'^countries/', include(country_crud.urlpatterns,
country_crud.namespace,
country_crud.namespace)),
]

12
crud_tests/views.py

@ -0,0 +1,12 @@
from crud import build_crud
from .models import Country
country_crud = build_crud(
Country, 'help_path', [
['Basic Data',
[('name', 9), ('continent', 3)],
[('population', 6), ('is_cold', 6)]
],
['More Details', [('description', 12)]],
])

2
lexml/views.py

@ -1,6 +1,6 @@
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from sapl.crud import build_crud from crud import build_crud
from .models import LexmlProvedor, LexmlPublicador from .models import LexmlProvedor, LexmlPublicador

15
materia/views.py

@ -12,12 +12,11 @@ from django.views.generic import ListView
from django.views.generic.edit import FormMixin from django.views.generic.edit import FormMixin
from vanilla.views import GenericView from vanilla.views import GenericView
import sapl
from comissoes.models import Comissao, Composicao from comissoes.models import Comissao, Composicao
from compilacao.views import IntegracaoTaView from compilacao.views import IntegracaoTaView
from crud import build_crud, make_pagination
from norma.models import LegislacaoCitada, NormaJuridica, TipoNormaJuridica from norma.models import LegislacaoCitada, NormaJuridica, TipoNormaJuridica
from parlamentares.models import Partido from parlamentares.models import Partido
from sapl.crud import build_crud
from sessao.models import AcompanharMateria from sessao.models import AcompanharMateria
from .forms import (AutoriaForm, DespachoInicialForm, DocumentoAcessorioForm, from .forms import (AutoriaForm, DespachoInicialForm, DocumentoAcessorioForm,
@ -879,12 +878,12 @@ class RelatoriaView(FormMixin, GenericView):
}) })
else: else:
relatorias = Relatoria.objects.filter( relatorias = Relatoria.objects.filter(
materia_id=kwargs['pk']).order_by( materia_id=kwargs['pk']).order_by(
'-data_designacao_relator') '-data_designacao_relator')
localizacao = Tramitacao.objects.filter( localizacao = Tramitacao.objects.filter(
materia=materia).last() materia=materia).last()
comissao = Comissao.objects.get( comissao = Comissao.objects.get(
id=localizacao.unidade_tramitacao_destino.comissao.id) id=localizacao.unidade_tramitacao_destino.comissao.id)
if form.is_valid(): if form.is_valid():
relatoria = form.save(commit=False) relatoria = form.save(commit=False)
@ -1251,7 +1250,7 @@ class ProposicaoListView(ListView):
paginator = context['paginator'] paginator = context['paginator']
page_obj = context['page_obj'] page_obj = context['page_obj']
context['page_range'] = sapl.crud.make_pagination( context['page_range'] = make_pagination(
page_obj.number, paginator.num_pages) page_obj.number, paginator.num_pages)
return context return context
@ -1434,7 +1433,7 @@ class PesquisaMateriaListView(FormMixin, ListView):
paginator = context['paginator'] paginator = context['paginator']
page_obj = context['page_obj'] page_obj = context['page_obj']
context['page_range'] = sapl.crud.make_pagination( context['page_range'] = make_pagination(
page_obj.number, paginator.num_pages) page_obj.number, paginator.num_pages)
return context return context

2
norma/views.py

@ -8,8 +8,8 @@ from django.views.generic.edit import FormMixin
from vanilla.views import GenericView from vanilla.views import GenericView
from compilacao.views import IntegracaoTaView from compilacao.views import IntegracaoTaView
from crud import build_crud
from materia.models import MateriaLegislativa, TipoMateriaLegislativa from materia.models import MateriaLegislativa, TipoMateriaLegislativa
from sapl.crud import build_crud
from .forms import NormaJuridicaForm from .forms import NormaJuridicaForm
from .models import (AssuntoNorma, LegislacaoCitada, NormaJuridica, from .models import (AssuntoNorma, LegislacaoCitada, NormaJuridica,

2
painel/views.py

@ -5,9 +5,9 @@ from django.http import HttpResponse, JsonResponse
from django.shortcuts import render from django.shortcuts import render
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from crud import build_crud
from painel.models import Painel from painel.models import Painel
from parlamentares.models import Filiacao from parlamentares.models import Filiacao
from sapl.crud import build_crud
from sessao.models import (ExpedienteMateria, OrdemDia, PresencaOrdemDia, from sessao.models import (ExpedienteMateria, OrdemDia, PresencaOrdemDia,
RegistroVotacao, SessaoPlenaria, RegistroVotacao, SessaoPlenaria,
SessaoPlenariaPresenca, VotoParlamentar) SessaoPlenariaPresenca, VotoParlamentar)

2
parlamentares/views.py

@ -8,7 +8,7 @@ from django.utils.translation import ugettext_lazy as _
from django.views.generic.edit import FormMixin from django.views.generic.edit import FormMixin
from vanilla import GenericView from vanilla import GenericView
from sapl.crud import build_crud from crud import build_crud
from .forms import (DependenteEditForm, DependenteForm, FiliacaoEditForm, from .forms import (DependenteEditForm, DependenteForm, FiliacaoEditForm,
FiliacaoForm, MandatoEditForm, MandatoForm, FiliacaoForm, MandatoEditForm, MandatoForm,

5
protocoloadm/views.py

@ -15,8 +15,8 @@ from django.views.generic.edit import FormMixin
from vanilla import GenericView from vanilla import GenericView
import sapl import sapl
from crud import build_crud, make_pagination
from materia.models import Proposicao, TipoMateriaLegislativa from materia.models import Proposicao, TipoMateriaLegislativa
from sapl.crud import build_crud
from sapl.utils import create_barcode from sapl.utils import create_barcode
from .forms import (AnularProcoloAdmForm, DocumentoAcessorioAdministrativoForm, from .forms import (AnularProcoloAdmForm, DocumentoAcessorioAdministrativoForm,
@ -118,7 +118,7 @@ class ProtocoloListView(FormMixin, ListView):
paginator = context['paginator'] paginator = context['paginator']
page_obj = context['page_obj'] page_obj = context['page_obj']
context['page_range'] = sapl.crud.make_pagination( context['page_range'] = make_pagination(
page_obj.number, paginator.num_pages) page_obj.number, paginator.num_pages)
return context return context
@ -322,7 +322,6 @@ class ComprovanteProtocoloView(TemplateView):
numero = self.kwargs['pk'] numero = self.kwargs['pk']
ano = self.kwargs['ano'] ano = self.kwargs['ano']
protocolo = Protocolo.objects.get(ano=ano, numero=numero) protocolo = Protocolo.objects.get(ano=ano, numero=numero)
# numero is string, padd with zeros left via .zfill() # numero is string, padd with zeros left via .zfill()
base64_data = create_barcode(numero.zfill(6)) base64_data = create_barcode(numero.zfill(6))
barcode = 'data:image/png;base64,{0}'.format(base64_data) barcode = 'data:image/png;base64,{0}'.format(base64_data)

2
pytest.ini

@ -1,6 +1,6 @@
[pytest] [pytest]
DJANGO_SETTINGS_MODULE=sapl.settings DJANGO_SETTINGS_MODULE=sapl.settings
norecursedirs = legacy norecursedirs = legacy crud_tests
# REUSING DATABASE BY DEFAULT (as a performance optimization) # REUSING DATABASE BY DEFAULT (as a performance optimization)
# http://pytest-django.readthedocs.org/en/latest/database.html#example-work-flow-with-reuse-db-and-create-db # http://pytest-django.readthedocs.org/en/latest/database.html#example-work-flow-with-reuse-db-and-create-db

24
sapl/teststubs/urls_for_list_test.py

@ -1,24 +0,0 @@
from django.conf.urls import include, url
from comissoes.models import Comissao
from comissoes.urls import comissao_url_patterns
from sapl.crud import build_crud
crud = build_crud(
Comissao, '', [
['Dados Básicos',
[('nome', 9), ('sigla', 3)],
[('tipo', 3)]
],
['Dados Complementares',
[('finalidade', 12)]
],
])
urlpatterns = [
url(r'^comissoes/', include((
crud.urlpatterns + comissao_url_patterns[len(crud.urlpatterns):],
crud.namespace, crud.namespace))),
]

4
sessao/views.py

@ -11,11 +11,11 @@ from django.views.generic.edit import FormMixin
from rest_framework import generics from rest_framework import generics
import sapl import sapl
from crud import build_crud, make_pagination
from materia.models import (Autoria, DocumentoAcessorio, from materia.models import (Autoria, DocumentoAcessorio,
TipoMateriaLegislativa, Tramitacao) TipoMateriaLegislativa, Tramitacao)
from norma.models import NormaJuridica from norma.models import NormaJuridica
from parlamentares.models import Parlamentar from parlamentares.models import Parlamentar
from sapl.crud import build_crud
from sessao.serializers import SessaoPlenariaSerializer from sessao.serializers import SessaoPlenariaSerializer
from .forms import (AcompanharMateriaForm, ExpedienteForm, ListMateriaForm, from .forms import (AcompanharMateriaForm, ExpedienteForm, ListMateriaForm,
@ -2184,7 +2184,7 @@ class SessaoListView(ListView):
paginator = context['paginator'] paginator = context['paginator']
page_obj = context['page_obj'] page_obj = context['page_obj']
context['page_range'] = sapl.crud.make_pagination( context['page_range'] = make_pagination(
page_obj.number, paginator.num_pages) page_obj.number, paginator.num_pages)
return context return context

3
test_and_check_qa.sh

@ -3,4 +3,5 @@
# QA checks: run this before every commit # QA checks: run this before every commit
py.test py.test
./qa_check.sh py.test --ds=crud_tests.settings crud_tests
./check_qa.sh

Loading…
Cancel
Save