Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 12 additions & 10 deletions app/apis/FirebaseAuth.py
Original file line number Diff line number Diff line change
Expand Up @@ -105,9 +105,10 @@ async def ver_datos_usuarios(firebase_app: App) -> tuple[int, list[dict] | None]
usuarios = list_users(app=firebase_app)

while True:
AUX.extend(
[
{
lista = []
for x in usuarios.users:
if x.custom_claims["eliminado"] == False:
lista.append({
"correo": x.email,
"uid": x.uid,
"nombre": x.display_name,
Expand All @@ -118,11 +119,9 @@ async def ver_datos_usuarios(firebase_app: App) -> tuple[int, list[dict] | None]
),
"ultima_conexion": convertir_datetime_str(
x.user_metadata.last_refresh_timestamp
),
}
for x in usuarios.users
]
)
)
})
AUX.extend(lista)
if not usuarios.has_next_page:
break
else:
Expand All @@ -147,6 +146,9 @@ async def ver_datos_usuario(firebase_app: App, uid: str) -> tuple[int, dict | No
try:
usuario = get_user(uid, firebase_app)

if usuario.custom_claims["eliminado"] == True:
raise UserNotFoundError("")

RES = {
"correo": usuario.email,
"uid": usuario.uid,
Expand Down Expand Up @@ -203,7 +205,7 @@ def actualizar_estado_usuario(
uid=uid,
disabled=usuario.desactivar,
app=firebase_app,
custom_claims={"admin": usuario.administrador},
custom_claims={"admin": usuario.administrador, "eliminado": usuario.eliminado},
)

RES = {
Expand Down Expand Up @@ -237,7 +239,7 @@ def establecer_rol_usuario(firebase_app: App, uid: str) -> tuple[int, str | None
tuple[int, str | None]: Un código de estado indicando el resultado de la operación.
"""
try:
set_custom_user_claims(uid, {"admin": False}, app=firebase_app)
set_custom_user_claims(uid, {"admin": False, "eliminado": False}, app=firebase_app)
return (COD_EXITO, None)
except NotFoundError:
return (COD_ERROR_ESPERADO, None)
Expand Down
3 changes: 2 additions & 1 deletion app/models/Peticiones.py
Original file line number Diff line number Diff line change
Expand Up @@ -124,4 +124,5 @@ class UsuarioActualizar(BaseModel):
Clase que representa una petición para actualizar el estado de un usuario.
"""
desactivar: bool
administrador: bool
administrador: bool
eliminado: bool
18 changes: 9 additions & 9 deletions tests/scripts/api/test_firebaseauth.py
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ async def test_26(mocker: MockerFixture):
USUARIO.display_name = "usuario"
USUARIO.user_metadata = METADATOS
USUARIO.disabled = False
USUARIO.custom_claims = { "admin": False }
USUARIO.custom_claims = { "admin": False, "eliminado": False }

LISTA.users = [USUARIO]
LISTA.has_next_page = False
Expand Down Expand Up @@ -192,7 +192,7 @@ async def test_27(mocker: MockerFixture):
USUARIO.display_name = "usuario"
USUARIO.user_metadata = METADATOS
USUARIO.disabled = False
USUARIO.custom_claims = { "admin": False }
USUARIO.custom_claims = { "admin": False, "eliminado": False }

LISTA2.users = [USUARIO]
LISTA2.has_next_page = False
Expand Down Expand Up @@ -240,7 +240,7 @@ async def test_39(mocker: MockerFixture):
USUARIO.display_name = "usuario"
USUARIO.user_metadata = METADATOS
USUARIO.disabled = False
USUARIO.custom_claims = { "admin": False }
USUARIO.custom_claims = { "admin": False, "eliminado": False }

FIREBASE = mocker.patch("app.apis.FirebaseAuth.get_user", return_value=USUARIO)

Expand Down Expand Up @@ -341,39 +341,39 @@ def test_50(mocker: MockerFixture):
METADATOS.last_refresh_timestamp = 175354900809
USUARIO.user_metadata = METADATOS

INST = UsuarioActualizar(desactivar=True, administrador=False)
INST = UsuarioActualizar(desactivar=True, administrador=False, eliminado=False)

INSTANCIA = {"correo": "correo@correo.com", "uid": "1234", "nombre": "usuario", "administrador": False, "estado": True, "fecha_registro": "23/07/1975 08:41 AM", "ultima_conexion": "23/07/1975 08:41 AM"}
FIREBASE = mocker.patch("app.apis.FirebaseAuth.update_user", return_value=USUARIO)
RES = actualizar_estado_usuario("firebase_app", "1234", INST)

assert RES == (1, INSTANCIA)

FIREBASE.assert_called_once_with(uid="1234", disabled=True, app="firebase_app", custom_claims={"admin": False})
FIREBASE.assert_called_once_with(uid="1234", disabled=True, app="firebase_app", custom_claims={"admin": False, "eliminado": False})

def test_51(mocker: MockerFixture):
"""
Test para validar que la función "actualizar_estado_usuario" retorne un error cuando el UID
proveído no corresponde a un usuario existente.
"""
INST = UsuarioActualizar(desactivar=False, administrador=False)
INST = UsuarioActualizar(desactivar=False, administrador=False, eliminado=False)
FIREBASE = mocker.patch("app.apis.FirebaseAuth.update_user")
FIREBASE.side_effect = UserNotFoundError("Estado inválido")
RES = actualizar_estado_usuario("firebase_app", "1234", INST)

assert RES == (0, None)

FIREBASE.assert_called_once_with(uid="1234", disabled=False, app="firebase_app", custom_claims={"admin": False})
FIREBASE.assert_called_once_with(uid="1234", disabled=False, app="firebase_app", custom_claims={"admin": False, "eliminado": False})

def test_52(mocker: MockerFixture):
"""
Test para validar que la función "actualizar_estado_usuario" maneje correctamente las excepciones
"""
INST = UsuarioActualizar(desactivar=False, administrador=False)
INST = UsuarioActualizar(desactivar=False, administrador=False, eliminado=False)
FIREBASE = mocker.patch("app.apis.FirebaseAuth.update_user")
FIREBASE.side_effect = Exception("Error inesperado")
RES = actualizar_estado_usuario("firebase_app", "1234", INST)

assert RES == (-1, "Error inesperado")

FIREBASE.assert_called_once_with(uid="1234", disabled=False, app="firebase_app", custom_claims={"admin": False})
FIREBASE.assert_called_once_with(uid="1234", disabled=False, app="firebase_app", custom_claims={"admin": False, "eliminado": False})
2 changes: 1 addition & 1 deletion tests/scripts/models/test_peticiones.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ def test_29():
"""
Test para validar que la clase reconoce correctamente una instancia.
"""
instancia = UsuarioActualizar(**{"desactivar": False, "administrador": True})
instancia = UsuarioActualizar(**{"desactivar": False, "administrador": True, "eliminado": False})
assert instancia.desactivar == False
assert instancia.administrador == True

Expand Down
8 changes: 4 additions & 4 deletions tests/scripts/routers/test_usuarios_router.py
Original file line number Diff line number Diff line change
Expand Up @@ -294,7 +294,7 @@ def test_60(mocker: MockerFixture):
"Host": "localhost",
"Authorization": "Bearer token_valido",
},
json={"desactivar": False, "administrador": False},
json={"desactivar": False, "administrador": False, "eliminado": False},
)

assert RES.status_code == 200
Expand Down Expand Up @@ -322,7 +322,7 @@ def test_61(mocker: MockerFixture):
"Host": "localhost",
"Authorization": "Bearer token_invalido",
},
json={"desactivar": True, "administrador": False},
json={"desactivar": True, "administrador": False, "eliminado": False},
)

assert RES.status_code == 403
Expand Down Expand Up @@ -352,7 +352,7 @@ def test_62(mocker: MockerFixture):
"Host": "localhost",
"Authorization": "Bearer token_valido",
},
json={"desactivar": True, "administrador": False},
json={"desactivar": True, "administrador": False, "eliminado": False},
)

assert RES.status_code == 404
Expand Down Expand Up @@ -381,7 +381,7 @@ def test_63(mocker: MockerFixture):
"Host": "localhost",
"Authorization": "Bearer token_valido",
},
json={"desactivar": True, "administrador": False},
json={"desactivar": True, "administrador": False, "eliminado": False},
)

assert RES.status_code == 500
Expand Down