Код: Выделить всё
@router.post("/login", response_model=schemas.TokenResponse)
async def login_for_access_token(
form_data: OAuth2PasswordRequestForm = Depends(),
user_interactor: UserInteractor = Depends(get_user_interactor),
token_interactor: TokenInteractor = Depends(get_token_interactor),
config: AppConfig = Depends(get_config),
security_service: SecurityService = Depends(get_security_service)
):
user = await user_interactor.verify_user_password(form_data.username, form_data.password)
if not user:
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail="Incorrect username or password",
headers={"WWW-Authenticate": "Bearer"},
)
# .. some logic ..
return schemas.TokenResponse(..)
Код: Выделить всё
async def test_login_user(client: AsyncClient, test_user):
response = await client.post(
"/api/v1/auth/login",
data={"username": test_user.username, "password": "testpassword"}
)
assert response.status_code == 200
assert "access_token" in response.json()
assert "refresh_token" in response.json()
assert response.json()["token_type"] == "bearer"
async def test_login_invalid_credentials(client: AsyncClient):
response = await client.post(
"/api/v1/auth/login",
data={"username": "nonexistentuser", "password": "wrongpassword"}
)
assert response.status_code == 401
assert "Incorrect username or password" in response.json()["detail"]
assert "WWW-Authenticate" in response.headers
assert response.headers["WWW-Authenticate"] == "Bearer"

Стоит упомянуть оба тесты проходят без каких-либо ошибок, и поведение соответствует ожиданиям.
Чего мне не хватает в моих тестах, чтобы инструмент покрытия кода помечал, если не пользователь: и следующую строку как покрытую ?
Пытался сделать следующее, все варианты не удалось:
- Вызывается pytest из CLI как pytest -vv -rw --cov= --cov-report=term-missing вместо проверки app.codecov.io — тот же результат, тот же процент;
- Попытка обернуть вызов клиента в:
Код: Выделить всё
async def test_login_invalid_credentials(client: AsyncClient):
with pytest.raises(fastapi.HTTPException) as err:
response = await client.post(..)
# asserts here
Подробнее здесь: https://stackoverflow.com/questions/790 ... ly-codecov