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