gestaogovbr / api-pgd

API integradora dos sistemas do Programa de Gestão.
https://www.gov.br/servidor/pt-br/assuntos/programa-de-gestao
GNU Affero General Public License v3.0
11 stars 5 forks source link

No `PUT` `plano_entregas`, uma entrega com campo `data_entrega` e valor `null` dá erro 500 #95

Closed augusto-herrmann closed 5 months ago

augusto-herrmann commented 5 months ago

Ao enviar um plano de entregas pelo endpoint PUT /organizacao/{cod_SIAPE_instituidora}/plano_entregas/{id_plano_entrega_unidade, se houver uma entrega com campo data_entrega presente e valor null, a API retorna erro 500.

  File "/api-pgd/src/schemas.py", line 424, in must_be_in_period
    if any(
       ^^^^
  File "/api-pgd/src/schemas.py", line 425, in <genexpr>
    entrega.data_entrega < self.data_inicio_plano_entregas
TypeError: '<' not supported between instances of 'NoneType' and 'datetime.date'
INFO:     127.0.0.1:48940 - "GET /docs HTTP/1.1" 200 OK

O comportamento esperado seria rejeitar a entrada com erro 422, por não validar o esquema.

Criar o caso de teste em questão e implementar para fazer passar o teste.

augusto-herrmann commented 5 months ago

Conforme alinhamento com área de negócio, o melhor comportamento para os campos opcionais seria aceitar a entrada e tratar a presença do parâmetro com valor null de maneira igual à omissão do campo.

augusto-herrmann commented 5 months ago

Foi reportado que, mesmo omitindo o campo, o erro ainda persiste.

Verifiquei que os testes de campos opcionais não estão batendo com os campos opcionais definidos no schema.py. É necessário revisar os testes de omissão de campos opcionais.

augusto-herrmann commented 5 months ago

Actually, I have checked that in the requirements spreadsheet defined by the stakeholder the data_entrega field is defined as mandatory for Entrega.

Still, the Pydantic schema (where the field is currently optional) should be made consistent with the SQLAlchemy model (where the field is currently defined as not nullable).