Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions docs/test-cases.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,11 @@ Legenda:
| TC-006 | Consulta | Buscar bookings filtrando por firstname e lastname | Funcional | Média | Automatizado | [get_booking.feature:15](../features/get_booking.feature#L15) |
| TC-007 | Atualização | Atualizar booking com token válido (PUT) | Funcional | Crítica | Automatizado | [update_booking.feature:4](../features/update_booking.feature#L4) |
| TC-008 | Atualização | Tentar atualizar booking sem token de autenticação | Negativo | Alta | Automatizado | [update_booking.feature:10](../features/update_booking.feature#L10) |
| TC-009 | Atualização | Atualizar parcialmente o booking com PATCH | Funcional | Média | Automatizado | [update_booking.feature:17](../features/update_booking.feature#L17) |
| TC-009 | Atualização | Atualizar parcialmente o booking com PATCH | Funcional | Média | Automatizado | [update_booking.feature:27](../features/update_booking.feature#L27) |
| TC-010 | Remoção | Remover booking com token válido | Funcional | Crítica | Automatizado | [delete_booking.feature:3](../features/delete_booking.feature#L3) |
| 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:27](../features/update_booking.feature#L27) |
| 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) |

`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.

Expand Down
10 changes: 10 additions & 0 deletions features/update_booking.feature
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,16 @@ Feature: Atualização de booking (PUT e PATCH)
When ele tenta atualizar o booking com novos dados
Then a resposta deve indicar acesso não autorizado

# Diferente do TC-008 (token ausente): aqui o token existe, mas é inválido.
# Validado manualmente que PATCH e DELETE se comportam da mesma forma (403),
# então não repetimos esse caso pros outros dois verbos.
@TC-013
Scenario: Tentar atualizar booking com token inválido
Given que existe um booking criado
And que ele possui um token de autenticação inválido
When ele tenta atualizar o booking com novos dados
Then a resposta deve indicar acesso não autorizado

# PATCH atualiza somente os campos enviados, mantendo o restante do booking.
@TC-009
Scenario: Atualizar parcialmente o booking com PATCH
Expand Down
1 change: 1 addition & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ markers = [
"TC-010: id do test case, ver docs/test-cases.md",
"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",
]

[tool.ruff]
Expand Down
5 changes: 5 additions & 0 deletions steps/test_booking_steps.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,11 @@ def com_token_de_autenticacao_valido(context: Context) -> None:
context.token = context.auth_client.get_valid_token()


@given("que ele possui um token de autenticação inválido")
def com_token_de_autenticacao_invalido(context: Context) -> None:
context.token = "token-invalido-qualquer"


@when(parsers.parse('ele solicita um token com o usuário "{username}" e a senha "{password}"'))
def solicita_um_token(context: Context, username: str, password: str) -> None:
context.last_response = context.auth_client.create_token(username, password)
Expand Down
Loading