diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0143bd2..cbd9014 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -70,7 +70,9 @@ jobs: run: uv sync --all-extras - name: Run tests - run: uv run pytest --junitxml=pytest.xml | tee pytest-coverage.txt + run: | + set -o pipefail + uv run pytest --junitxml=pytest.xml | tee pytest-coverage.txt - name: Coverage comment if: matrix.python-version == '3.12' && github.event_name == 'pull_request' diff --git a/bodepontoio/views.py b/bodepontoio/views.py index da4f97a..59b9124 100644 --- a/bodepontoio/views.py +++ b/bodepontoio/views.py @@ -1,6 +1,6 @@ from django.contrib.auth import get_user_model from rest_framework import permissions, status -from rest_framework.exceptions import AuthenticationFailed +from rest_framework.exceptions import ValidationError from rest_framework.response import Response from rest_framework.views import APIView from rest_framework_simplejwt.exceptions import TokenError @@ -43,14 +43,14 @@ def post(self, request): try: user = User.objects.get(email=serializer.validated_data["email"]) except User.DoesNotExist: - raise AuthenticationFailed("Código inválido ou expirado.") from None + raise ValidationError("Código inválido ou expirado.") from None if not user.is_active: - raise AuthenticationFailed("Conta de usuário desativada.") + raise ValidationError("Conta de usuário desativada.") success, error = verify_otp(user, serializer.validated_data["code"], OTPCode.Purpose.LOGIN) if not success: - raise AuthenticationFailed(error) + raise ValidationError(error) if not user.auth.is_email_verified: user.auth.is_email_verified = True @@ -199,11 +199,11 @@ def post(self, request): try: user = User.objects.get(email=serializer.validated_data["email"]) except User.DoesNotExist: - raise AuthenticationFailed("Código inválido ou expirado.") from None + raise ValidationError("Código inválido ou expirado.") from None success, error = verify_otp(user, serializer.validated_data["code"], OTPCode.Purpose.EMAIL_CONFIRM) if not success: - raise AuthenticationFailed(error) + raise ValidationError(error) user.auth.is_email_verified = True user.auth.save(update_fields=["is_email_verified"]) @@ -223,11 +223,11 @@ def post(self, request): try: user = User.objects.get(email=serializer.validated_data["email"]) except User.DoesNotExist: - raise AuthenticationFailed("Código inválido ou expirado.") from None + raise ValidationError("Código inválido ou expirado.") from None success, error = verify_otp(user, serializer.validated_data["code"], OTPCode.Purpose.PASSWORD_RESET) if not success: - raise AuthenticationFailed(error) + raise ValidationError(error) user.set_password(serializer.validated_data["new_password"]) user.save()