From c3d586da0d65befd50809b9b5b4ebcb2b13ba632 Mon Sep 17 00:00:00 2001 From: Augusto Herrmann Date: Wed, 7 Aug 2024 11:52:31 -0300 Subject: [PATCH] Update participante instead of deleting and re-inserting it Co-Authored-By: Eduardo Lauer --- src/crud.py | 9 ++------- tests/participantes_test.py | 22 ++++++++++++++++++++++ 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/src/crud.py b/src/crud.py index fd62fd6..b152a68 100644 --- a/src/crud.py +++ b/src/crud.py @@ -498,14 +498,9 @@ async def update_participante( .filter_by(matricula_siape=participante.matricula_siape) ) db_participante = result.unique().scalar_one() - data_insercao = db_participante.data_insercao - await session.delete(db_participante) - await session.commit() - # create a new - db_participante = models.Participante(**participante.model_dump()) - db_participante.data_insercao = data_insercao + for field, value in participante.model_dump().items(): + setattr(db_participante, field, value) db_participante.data_atualizacao = datetime.now() - session.add(db_participante) await session.commit() await session.refresh(db_participante) return schemas.ParticipanteSchema.model_validate(db_participante) diff --git a/tests/participantes_test.py b/tests/participantes_test.py index 5afc094..cb396c2 100644 --- a/tests/participantes_test.py +++ b/tests/participantes_test.py @@ -234,6 +234,28 @@ def test_put_duplicate_participante( assert_equal_participante(response.json(), input_part) +def test_update_participante_with_existing_pt( + truncate_participantes, # pylint: disable=unused-argument + example_part, # pylint: disable=unused-argument + example_pt, # pylint: disable=unused-argument + input_part: dict, + header_usr_1: dict, + client: Client, +): + """Atualiza um participante existente, sendo que o participante já + possui um Plano de Trabalho a ele associado. + """ + response = client.put( + f"/organizacao/{input_part['origem_unidade']}" + f"/{input_part['cod_unidade_autorizadora']}" + f"/{input_part['cod_unidade_lotacao']}" + f"/participante/{input_part['matricula_siape']}", + json=input_part, + headers=header_usr_1, + ) + assert response.status_code == status.HTTP_200_OK + + def test_create_participante_inconsistent( truncate_participantes, # pylint: disable=unused-argument input_part: dict,