diff --git a/sapl/integracao_hub/tests/test_reconciliacao.py b/sapl/integracao_hub/tests/test_reconciliacao.py index 75b1ff84b..d0e1a945c 100644 --- a/sapl/integracao_hub/tests/test_reconciliacao.py +++ b/sapl/integracao_hub/tests/test_reconciliacao.py @@ -73,7 +73,21 @@ def test_inventario_cursores_independentes_para_tramitacao(cliente_hub): INVENTARIO, {'id_gt': proposicao.pk - 1, 'tramitacao_id_gt': tramitacao.pk}) assert proposicao.pk in resposta.data['proposicoes'] - assert tramitacao.pk not in resposta.data['tramitacoes'] + assert tramitacao.pk not in [t['id'] for t in resposta.data['tramitacoes']] + + +@pytest.mark.django_db(transaction=False) +def test_inventario_traz_a_materia_de_cada_tramitacao(cliente_hub): + # Sem a materia o hub compara id de tramitacao com id de materia e conta o + # acervo inteiro como lacuna (incidente de 14/08). A materia e o que diz se + # aquela tramitacao pertence a algo que o hub deveria ter integrado. + tramitacao = baker.make(Tramitacao) + + resposta = cliente_hub.get(INVENTARIO, {'id_gt': 0, 'tramitacao_id_gt': 0}) + + entrada = next(t for t in resposta.data['tramitacoes'] + if t['id'] == tramitacao.pk) + assert entrada['materia'] == tramitacao.materia_id @pytest.mark.django_db(transaction=False) diff --git a/sapl/integracao_hub/views.py b/sapl/integracao_hub/views.py index 0aed2df09..91f076cfb 100644 --- a/sapl/integracao_hub/views.py +++ b/sapl/integracao_hub/views.py @@ -277,9 +277,15 @@ class InventarioView(PollView): proposicoes = list( Proposicao.objects.filter(id__gt=id_gt, cancelado=False) .order_by('id').values_list('id', flat=True)[:limite]) - tramitacoes = list( - Tramitacao.objects.filter(id__gt=tramitacao_id_gt) - .order_by('id').values_list('id', flat=True)[:limite]) + # Tramitacao vem com a materia junto porque a conferencia do hub NAO e por + # id de tramitacao: o hub so integra tramitacao de materia que ele conhece + # (proposicao que virou materia depois do marco). Devolver so o id fazia o + # hub contar como lacuna toda tramitacao do acervo — falso positivo eterno, + # visto em 14/08: 500 "ausentes" que na verdade eram historico. + tramitacoes = [ + {'id': t['id'], 'materia': t['materia_id']} + for t in Tramitacao.objects.filter(id__gt=tramitacao_id_gt) + .order_by('id').values('id', 'materia_id')[:limite]] return Response({ 'proposicoes': proposicoes,