From 633fc73b820ca4f27ddfcea05c32eca171646c2e Mon Sep 17 00:00:00 2001 From: ThomasTDS Date: Sat, 19 Sep 2026 16:41:51 -0300 Subject: [PATCH] =?UTF-8?q?Adiciona=20cen=C3=A1rio=20de=20remo=C3=A7=C3=A3?= =?UTF-8?q?o=20de=20booking=20inexistente=20(TC-014)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Validei manualmente contra a API real: DELETE num id que nunca existiu retorna 405 (Method Not Allowed), não 404 como seria esperado. Documentado no .feature como comportamento observado da API pública, não como bug da nossa automação. --- docs/test-cases.md | 1 + features/delete_booking.feature | 9 +++++++++ pyproject.toml | 1 + steps/test_booking_steps.py | 11 +++++++++++ 4 files changed, 22 insertions(+) diff --git a/docs/test-cases.md b/docs/test-cases.md index 89854b6..cffe28f 100644 --- a/docs/test-cases.md +++ b/docs/test-cases.md @@ -25,6 +25,7 @@ Legenda: | TC-011 | Remoção | Tentar remover booking sem token de autenticação | Negativo | Alta | Automatizado | [delete_booking.feature:9](../features/delete_booking.feature#L9) | | TC-012 | Atualização | Tentar atualizar parcialmente booking sem token (PATCH) | Negativo | Alta | Automatizado | [update_booking.feature:36](../features/update_booking.feature#L36) | | TC-013 | Atualização | Tentar atualizar booking com token inválido (PUT) | Negativo | Alta | Automatizado | [update_booking.feature:17](../features/update_booking.feature#L17) | +| TC-014 | Remoção | Tentar remover um booking que não existe | Negativo | Baixa | Automatizado | [delete_booking.feature:16](../features/delete_booking.feature#L16) | `BookingApiClient.get_booking_ids` também aceita filtro por `checkin`/`checkout`, mas o TC-006 cobre só `firstname`/`lastname`: o filtro por data na API pública de demonstração é conhecido por ser instável, e testá-lo arriscaria um teste flaky em vez de validar um comportamento real. diff --git a/features/delete_booking.feature b/features/delete_booking.feature index 35d0ed3..4cde0d3 100644 --- a/features/delete_booking.feature +++ b/features/delete_booking.feature @@ -13,3 +13,12 @@ Feature: Remoção de booking And que ele não possui nenhum token de autenticação When ele tenta remover o booking Then a resposta deve indicar acesso não autorizado + + # Comportamento observado na API pública: remover um id que nunca existiu + # retorna 405 (Method Not Allowed), não 404 como seria de se esperar. + # Documentado como comportamento real da API, não como bug da automação. + @TC-014 + Scenario: Tentar remover um booking que não existe + Given que ele possui um token de autenticação válido + When ele tenta remover o booking pelo id "999999999" + Then a resposta deve indicar que o método não é permitido diff --git a/pyproject.toml b/pyproject.toml index 2957605..384ec41 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -48,6 +48,7 @@ markers = [ "TC-011: id do test case, ver docs/test-cases.md", "TC-012: id do test case, ver docs/test-cases.md", "TC-013: id do test case, ver docs/test-cases.md", + "TC-014: id do test case, ver docs/test-cases.md", ] [tool.ruff] diff --git a/steps/test_booking_steps.py b/steps/test_booking_steps.py index 5e02ed9..8db0436 100644 --- a/steps/test_booking_steps.py +++ b/steps/test_booking_steps.py @@ -207,7 +207,18 @@ def tenta_remover_o_booking(context: Context) -> None: context.last_response = context.booking_client.delete_booking(context.booking_id, context.token or "") +@when(parsers.parse('ele tenta remover o booking pelo id "{booking_id}"')) +def tenta_remover_o_booking_pelo_id_informado(context: Context, booking_id: str) -> None: + context.last_response = context.booking_client.delete_booking(int(booking_id), context.token or "") + + @then("o booking deve ser removido com sucesso") def booking_deve_ser_removido_com_sucesso(context: Context) -> None: assert context.last_response is not None assert context.last_response.status_code == 201 + + +@then("a resposta deve indicar que o método não é permitido") +def resposta_indica_metodo_nao_permitido(context: Context) -> None: + assert context.last_response is not None + assert context.last_response.status_code == 405