Exercícios da aula 03
Exercício 01
Escreva um teste para o erro de 404
(NOT FOUND) para o endpoint de PUT.
Solução
A ideia de um teste de 404
para o PUT é tentar fazer a alteração de um usuário que não existe no banco de dados.
def test_update_user_should_return_not_found__exercicio(client):
response = client.put(
'/users/666', #(1)!
json={
'username': 'bob',
'email': 'bob@example.com',
'password': 'mynewpassword',
},
)
assert response.status_code == HTTPStatus.NOT_FOUND #(2)!
assert response.json() == {'detail': 'User not found'} #(3)!
- O user com id
666
não existe no nosso sistema. - Como o user não existe, o status code retornado pela função será
404
- Por entrar no bloco de validação do
if
oHTTPException
foi preenchido comdetail='User not found'
Exercício 02
Escreva um teste para o erro de 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.
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)!
- O user com id
666
não existe no nosso sistema. - Como o user não existe, o status code retornado pela função será
404
- Por entrar no bloco de validação do
if
oHTTPException
foi preenchido comdetail='User not found'
Exercício 03
Crie um endpoint de GET para pegar um único recurso como users/{id}
e fazer seus testes para 200
e 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.
@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 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:
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': 'bob@example.com',
'id': 1,
}