Skip to content

Commit

Permalink
Adicionando resolução dos exercícios da aula 03
Browse files Browse the repository at this point in the history
  • Loading branch information
dunossauro committed Sep 6, 2024
1 parent 04bb55b commit d440a51
Show file tree
Hide file tree
Showing 6 changed files with 758 additions and 6 deletions.
2 changes: 1 addition & 1 deletion aulas/03.md
Original file line number Diff line number Diff line change
Expand Up @@ -612,7 +612,7 @@ E pronto! As alterações estão seguras no histórico do git, e podemos continu

1. Escrever um teste para o erro de `#!python 404` (NOT FOUND) para o endpoint de PUT;
2. Escrever um teste para o erro de `#!python 404` (NOT FOUND) para o endpoint de DELETE;
3. Criar um endpoint de GET para pegar um único recurso como `users/{id}` e fazer seus testes.
3. Criar um endpoint de GET para pegar um único recurso como `users/{id}` e fazer seus testes para `#!python 200` e `#!python 404`.

## Conclusão

Expand Down
88 changes: 88 additions & 0 deletions aulas/exercicios_resolvidos/aula_03.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
# Exercícios da aula 03

## Exercício 01

Escreva um teste para o erro de `#!python 404` (NOT FOUND) para o endpoint de PUT.

### Solução

A ideia de um teste de `#!python 404` para o PUT é **tentar** fazer a alteração de um usuário que não existe no banco de dados.

```python title="Teste de 404"
def test_update_user_should_return_not_found__exercicio(client):
response = client.put(
'/users/666', #(1)!
json={
'username': 'bob',
'email': '[email protected]',
'password': 'mynewpassword',
},
)
assert response.status_code == HTTPStatus.NOT_FOUND #(2)!
assert response.json() == {'detail': 'User not found'} #(3)!
```

1. O user com id `#!python 666` não existe no nosso sistema.
2. Como o user não existe, o status code retornado pela função será `#!python 404`
3. Por entrar no bloco de validação do `if` o `HTTPException` foi preenchido com `detail='User not found'`

## Exercício 02

Escreva um teste para o erro de `#!python 404` (NOT FOUND) para o endpoint de DELETE

### Solução

A ideia de um teste de 404 para o DELETE é **tentar** fazer a alteração de um usuário que não existe no banco de dados.

```python title="Teste de 404"
def test_delete_user_should_return_not_found__exercicio(client):
response = client.delete('/users/666') #(1)!

assert response.status_code == HTTPStatus.NOT_FOUND #(2)!
assert response.json() == {'detail': 'User not found'} #(3)!
```

1. O user com id `#!python 666` não existe no nosso sistema.
2. Como o user não existe, o status code retornado pela função será `#!python 404`
3. Por entrar no bloco de validação do `if` o `HTTPException` foi preenchido com `detail='User not found'`


## Exercício 03

Crie um endpoint de GET para pegar um único recurso como `users/{id}` e fazer seus testes para `#!python 200` e `#!python 404`.

### Solução

A implementação do endpoint é bastante parecida com as que fizemos até agora. Precisamos validar se existe um `id` comparível no nosso banco de dados falso. Nos baseando pela posição do elento na lista.

```python
@app.get('/users/{user_id}', response_model=UserPublic)
def read_user__exercicio(user_id: int):
if user_id > len(database) or user_id < 1:
raise HTTPException(
status_code=HTTPStatus.NOT_FOUND, detail='User not found'
)

return database[user_id - 1]
```

Um dos testes é sobre o retorno `#!python 404`, que é retornado um user que não existe na base de dados e outro é o comportamento padrão para quando o user é retornado com sucesso:

```python
def test_get_user_should_return_not_found__exercicio(client):
response = client.get('/users/666')

assert response.status_code == HTTPStatus.NOT_FOUND
assert response.json() == {'detail': 'User not found'}


def test_get_user___exercicio(client):
response = client.get('/users/1')

assert response.status_code == HTTPStatus.OK
assert response.json() == {
'username': 'bob',
'email': '[email protected]',
'id': 1,
}
```
10 changes: 10 additions & 0 deletions codigo_das_aulas/03/fast_zero/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,3 +51,13 @@ def delete_user(user_id: int):
del database[user_id - 1]

return {'message': 'User deleted'}


@app.get('/users/{user_id}', response_model=UserPublic)
def read_user__exercicio(user_id: int):
if user_id > len(database) or user_id < 1:
raise HTTPException(
status_code=HTTPStatus.NOT_FOUND, detail='User not found'
)

return database[user_id - 1]
Loading

0 comments on commit d440a51

Please sign in to comment.