mirror of https://github.com/interlegis/sapl.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
113 lines
5.3 KiB
113 lines
5.3 KiB
|
|
from django.contrib.contenttypes.fields import GenericForeignKey
|
|
|
|
from sapl.base.models import AppConfig, Autor, CasaLegislativa, TipoAutor
|
|
from sapl.comissoes.models import \
|
|
DocumentoAcessorio as DocumentoAcessorioComissoes
|
|
from sapl.comissoes.models import Comissao, Composicao, Participacao, Reuniao
|
|
from sapl.legacy.migracao_dados import appconfs, get_renames, legacy_app
|
|
from sapl.materia.models import (AcompanhamentoMateria, DocumentoAcessorio,
|
|
MateriaLegislativa, Proposicao,
|
|
TipoMateriaLegislativa, TipoProposicao,
|
|
Tramitacao)
|
|
from sapl.norma.models import (AnexoNormaJuridica, NormaJuridica,
|
|
NormaRelacionada, TipoVinculoNormaJuridica)
|
|
from sapl.parlamentares.models import (Frente, Mandato, Parlamentar, Partido,
|
|
TipoAfastamento, Votante, Bloco)
|
|
from sapl.protocoloadm.models import DocumentoAdministrativo
|
|
from sapl.sessao.models import (Bancada, CargoBancada,
|
|
ExpedienteMateria, Orador, OradorExpediente,
|
|
OrdemDia, RegistroVotacao, ResumoOrdenacao,
|
|
SessaoPlenaria, TipoResultadoVotacao,
|
|
VotoParlamentar)
|
|
|
|
RENAMING_IGNORED_MODELS = [
|
|
Votante, Frente, Bancada, Bloco, Votante, # parlamentares
|
|
Composicao, Reuniao, DocumentoAcessorioComissoes, # commissoes
|
|
AppConfig, CasaLegislativa, # base
|
|
CargoBancada, ResumoOrdenacao, # sessao
|
|
AnexoNormaJuridica, TipoVinculoNormaJuridica, # norma
|
|
|
|
]
|
|
|
|
RENAMING_IGNORED_FIELDS = [
|
|
(TipoAfastamento, {'indicador'}),
|
|
(Participacao, {'composicao'}),
|
|
(Proposicao, {
|
|
'ano', 'content_type', 'object_id', 'conteudo_gerado_related',
|
|
'status', 'hash_code', 'texto_original'}),
|
|
(TipoProposicao, {
|
|
'object_id', 'content_type', 'tipo_conteudo_related', 'perfis',
|
|
# não estou entendendo como esses campos são enumerados,
|
|
# mas eles não fazem parte da migração
|
|
# 'tipomaterialegislativa_set', 'tipodocumento_set',
|
|
}),
|
|
|
|
(Tramitacao, {'ultima'}),
|
|
(SessaoPlenaria, {'finalizada', 'iniciada', 'painel_aberto', 'interativa',
|
|
'upload_ata',
|
|
'upload_anexo',
|
|
'upload_pauta'}),
|
|
(ExpedienteMateria, {'votacao_aberta', 'registro_aberto'}),
|
|
(OrdemDia, {'votacao_aberta', 'registro_aberto'}),
|
|
(NormaJuridica, {'texto_integral', 'data_ultima_atualizacao', 'assuntos'}),
|
|
(Parlamentar, {
|
|
'uf_residencia', 'municipio_residencia', 'cropping', 'fotografia'}),
|
|
(Partido, {'logo_partido', 'observacao'}),
|
|
(MateriaLegislativa, {
|
|
'autores', 'anexadas', 'data_ultima_atualizacao', 'texto_original'}),
|
|
(DocumentoAdministrativo, {
|
|
'protocolo', 'numero_externo', 'texto_integral'}),
|
|
(Mandato, {'titular', 'data_fim_mandato', 'data_inicio_mandato'}),
|
|
(TipoMateriaLegislativa, {'sequencia_numeracao'}),
|
|
(TipoAutor, {'content_type'}),
|
|
(TipoResultadoVotacao, {'natureza'}),
|
|
(RegistroVotacao, {'ordem', 'expediente'}),
|
|
(DocumentoAcessorio, {'arquivo', 'data_ultima_atualizacao'}),
|
|
(OradorExpediente, {'upload_anexo', 'observacao'}),
|
|
(Orador, {'upload_anexo', 'observacao'}),
|
|
(VotoParlamentar, {'user', 'ip', 'expediente', 'data_hora', 'ordem'}),
|
|
(NormaRelacionada, {'tipo_vinculo'}),
|
|
(AcompanhamentoMateria, {'confirmado', 'data_cadastro', 'usuario'}),
|
|
(Autor, {'user', 'content_type', 'object_id', 'autor_related'}),
|
|
(Comissao, {'ativa'}),
|
|
(Reuniao, {'url_audio', 'url_video', 'local_reuniao', 'upload_anexo',
|
|
'periodo', 'upload_pauta', 'tema', 'hora_fim', 'upload_ata',
|
|
'nome', 'hora_inicio'})
|
|
]
|
|
|
|
|
|
def test_get_renames():
|
|
field_renames, model_renames = get_renames()
|
|
all_models = {m for ac in appconfs for m in ac.get_models()}
|
|
for model in all_models:
|
|
field_names = {f.name for f in model._meta.get_fields()
|
|
if f.name != 'id'
|
|
and (f.concrete or isinstance(f, GenericForeignKey))}
|
|
if model not in field_renames:
|
|
# check ignored models in renaming
|
|
assert model in RENAMING_IGNORED_MODELS
|
|
else:
|
|
renamed = set(field_renames[model].keys())
|
|
|
|
match_msg_template = 'All %s field names mentioned in renames ' \
|
|
'must match a %s field'
|
|
|
|
# all renamed field references correspond to a current field
|
|
assert renamed <= field_names, \
|
|
match_msg_template % ('new', 'current')
|
|
|
|
# ignored fields are explicitly listed
|
|
missing = field_names - renamed
|
|
if missing:
|
|
assert (model, missing) in RENAMING_IGNORED_FIELDS, \
|
|
'Campos faltando na renomeação,' \
|
|
'mas não listados explicitamente: ({}, {})'.format(
|
|
model.__name__, missing)
|
|
|
|
# all old names correspond to a legacy field
|
|
legacy_model = legacy_app.get_model(
|
|
model_renames.get(model, model.__name__))
|
|
legacy_field_names = {f.name for f in legacy_model._meta.fields}
|
|
assert set(field_renames[model].values()) <= legacy_field_names, \
|
|
match_msg_template % ('old', 'legacy')
|
|
|