Skip to content

Commit

Permalink
Resolução de todos os exercícios da aula 06
Browse files Browse the repository at this point in the history
  • Loading branch information
dunossauro committed Oct 5, 2024
1 parent ae6b26c commit 5bd5c0e
Show file tree
Hide file tree
Showing 4 changed files with 70 additions and 6 deletions.
42 changes: 39 additions & 3 deletions aulas/exercicios_resolvidos/aula_06.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,52 @@

## Exercício 01

Faça um teste para cobrir o cenário que levanta exception `credentials_exception` na autenticação caso o `User` não seja encontrado. Ao olhar a cobertura de `security.py` você vai notar que esse contexto não está coberto.
Faça um teste para cobrir o cenário que levanta exception `credentials_exception` na autenticação caso o `email` não seja enviado via JWT. Ao olhar a cobertura de `security.py` você vai notar que esse contexto não está coberto.

### Solução

...
Para executar o bloco de código você deve fazer uma chamada a qualquer endpoint que dependa do token (currentUser) e enviar um token que não contenha um endereço de e-mail (sub):

```python title="tests/test_app.py"
def test_get_current_user_not_found__exercicio(client):
data = {'no-email': 'test'}
token = create_access_token(data)

response = client.delete(
'/users/1',
headers={'Authorization': f'Bearer {token}'},
)

assert response.status_code == HTTPStatus.UNAUTHORIZED
assert response.json() == {'detail': 'Could not validate credentials'}
```

## Exercício 02

Faça um teste para cobrir o cenário que levanta exception `credentials_exception` na autenticação caso o email seja enviado, mas não exista um `User` correspondente cadastrado na base de dados. Ao olhar a cobertura de `security.py` você vai notar que esse contexto não está coberto.

### Solução

Para executar o bloco de código você deve fazer uma chamada a qualquer endpoint que dependa do token (currentUser) e enviar um token que contenha um endereço de email (sub) que não esteja cadastrado na base de dados:

```python title="tests/test_app.py"
def test_get_current_user_does_not_exists__exercicio(client):
data = {'sub': 'test@test'}
token = create_access_token(data)

response = client.delete(
'/users/1',
headers={'Authorization': f'Bearer {token}'},
)

assert response.status_code == HTTPStatus.UNAUTHORIZED
assert response.json() == {'detail': 'Could not validate credentials'}
```

## Exercício 03

Reveja os testes criados até a aula 5 e veja se eles ainda fazem sentido (testes envolvendo `#!python 400`)

### Solução

...
Os testes para os endpoints de PUT e DELETE, que verificam usuários não existentes na base de dados não fazem mais sentido. Já que para alterar ou deletar um user, você tem que ser validado pelo token. Esses testes podem ser deletados.
2 changes: 1 addition & 1 deletion codigo_das_aulas/06/fast_zero/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ def update_user(
except IntegrityError:
raise HTTPException(
status_code=HTTPStatus.CONFLICT,
detail='Username or Email already exists'
detail='Username or Email already exists',
)


Expand Down
1 change: 0 additions & 1 deletion codigo_das_aulas/06/tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,6 @@ def session():

@contextmanager
def _mock_db_time(*, model, time=datetime(2024, 1, 1)):

def fake_time_handler(mapper, connection, target):
if hasattr(target, 'created_at'):
target.created_at = time
Expand Down
31 changes: 30 additions & 1 deletion codigo_das_aulas/06/tests/test_security.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,10 @@

from jwt import decode

from fast_zero.security import SECRET_KEY, create_access_token
from fast_zero.security import (
SECRET_KEY,
create_access_token,
)


def test_jwt():
Expand All @@ -22,3 +25,29 @@ def test_jwt_invalid_token(client):

assert response.status_code == HTTPStatus.UNAUTHORIZED
assert response.json() == {'detail': 'Could not validate credentials'}


def test_get_current_user_not_found__exercicio(client):
data = {'no-email': 'test'}
token = create_access_token(data)

response = client.delete(
'/users/1',
headers={'Authorization': f'Bearer {token}'},
)

assert response.status_code == HTTPStatus.UNAUTHORIZED
assert response.json() == {'detail': 'Could not validate credentials'}


def test_get_current_user_does_not_exists__exercicio(client):
data = {'sub': 'test@test'}
token = create_access_token(data)

response = client.delete(
'/users/1',
headers={'Authorization': f'Bearer {token}'},
)

assert response.status_code == HTTPStatus.UNAUTHORIZED
assert response.json() == {'detail': 'Could not validate credentials'}

0 comments on commit 5bd5c0e

Please sign in to comment.