102 lines
2.9 KiB
Python
102 lines
2.9 KiB
Python
"""Tests for usuarios schemas."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import pytest
|
|
|
|
pytest.importorskip("email_validator")
|
|
|
|
from src.modules.usuarios.schemas import UsuarioCreate, UsuarioOut, UsuarioUpdate
|
|
|
|
|
|
def test_usuario_create_accepts_full_payload_and_sets_aliases() -> None:
|
|
payload = {
|
|
"identificador": "user@test.com",
|
|
"senha": "plain-password",
|
|
"ativo": True,
|
|
"superadmin": False,
|
|
"auth-id-appwrite": "appwrite_user_1",
|
|
"nome": "Usuário Teste",
|
|
"email": "user@test.com",
|
|
"telefone": "11987654321",
|
|
"nivel": "admin",
|
|
"registro-completo": True,
|
|
"enderecos": ["endereco_1", "endereco_2"],
|
|
"empresasDados": ["empresa_1"],
|
|
"nome-social": "Teste",
|
|
"cpf": "12345678901",
|
|
}
|
|
|
|
model = UsuarioCreate.model_validate(payload)
|
|
dumped = model.model_dump(by_alias=True)
|
|
|
|
assert dumped == {
|
|
"identificador": "user@test.com",
|
|
"senha": "plain-password",
|
|
"ativo": True,
|
|
"superadmin": False,
|
|
"auth-id-appwrite": "appwrite_user_1",
|
|
"nome": "Usuário Teste",
|
|
"email": "user@test.com",
|
|
"telefone": "11987654321",
|
|
"nivel": "admin",
|
|
"registro-completo": True,
|
|
"enderecos": ["endereco_1", "endereco_2"],
|
|
"empresasDados": ["empresa_1"],
|
|
"nome-social": "Teste",
|
|
"cpf": "12345678901",
|
|
}
|
|
|
|
|
|
def test_usuario_create_defaults_are_applied() -> None:
|
|
model = UsuarioCreate.model_validate({
|
|
"identificador": "user@test.com",
|
|
"senha": "plain-password",
|
|
})
|
|
|
|
assert model.ativo is True
|
|
assert model.superadmin is False
|
|
assert model.registro_completo is False
|
|
assert model.enderecos == []
|
|
assert model.empresas_dados == []
|
|
|
|
|
|
def test_usuario_update_uses_aliases_and_optional_fields() -> None:
|
|
payload = {
|
|
"identificador": "novo@test.com",
|
|
"registro-completo": False,
|
|
"empresasDados": ["empresa_1", "empresa_2"],
|
|
"nome-social": "Novo Nome",
|
|
"telefone": "11987654321",
|
|
}
|
|
|
|
model = UsuarioUpdate.model_validate(payload)
|
|
dumped = model.model_dump(exclude_unset=True, by_alias=True)
|
|
|
|
assert dumped == {
|
|
"identificador": "novo@test.com",
|
|
"registro-completo": False,
|
|
"empresasDados": ["empresa_1", "empresa_2"],
|
|
"nome-social": "Novo Nome",
|
|
"telefone": "11987654321",
|
|
}
|
|
|
|
|
|
def test_usuario_out_does_not_expose_password_field() -> None:
|
|
payload = {
|
|
"id": "user_1",
|
|
"identificador": "user@test.com",
|
|
"senha": "hashed-value",
|
|
"ativo": True,
|
|
"superadmin": False,
|
|
"createdAt": "2025-10-02T19:38:10.336+00:00",
|
|
"updatedAt": "2025-10-09T13:57:07.833+00:00",
|
|
}
|
|
|
|
model = UsuarioOut.model_validate(payload)
|
|
|
|
with pytest.raises(AttributeError):
|
|
getattr(model, "senha")
|
|
|
|
dumped = model.model_dump()
|
|
assert "senha" not in dumped
|