40 lines
1.3 KiB
Python
40 lines
1.3 KiB
Python
"""Unit tests for auth profile / password request schemas."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import pytest
|
|
from pydantic import ValidationError
|
|
|
|
from backend.api.auth import PasswordChange, ProfileUpdate
|
|
from backend.api.platform.employees import PlatformEmployeePasswordReset
|
|
|
|
|
|
def test_profile_update_allows_partial_fields() -> None:
|
|
only_name = ProfileUpdate(display_name="张三")
|
|
assert only_name.display_name == "张三"
|
|
assert only_name.email is None
|
|
|
|
only_email = ProfileUpdate(email="a@example.com")
|
|
assert only_email.email == "a@example.com"
|
|
|
|
|
|
def test_profile_update_forbids_unknown_fields() -> None:
|
|
with pytest.raises(ValidationError):
|
|
ProfileUpdate(display_name="张三", username="hacked") # type: ignore[call-arg]
|
|
|
|
|
|
def test_password_change_enforces_new_password_length() -> None:
|
|
with pytest.raises(ValidationError):
|
|
PasswordChange(current_password="old-pass", new_password="short")
|
|
|
|
ok = PasswordChange(current_password="old-pass-1", new_password="new-pass-12")
|
|
assert ok.new_password == "new-pass-12"
|
|
|
|
|
|
def test_admin_password_reset_schema() -> None:
|
|
with pytest.raises(ValidationError):
|
|
PlatformEmployeePasswordReset(new_password="1234567")
|
|
|
|
payload = PlatformEmployeePasswordReset(new_password="reset-pass-9")
|
|
assert payload.new_password == "reset-pass-9"
|