from datetime import UTC, datetime from porchlight.models import User from porchlight.oidc.claims import PorchlightUserInfo, user_to_claims def test_user_to_claims_minimal() -> None: user = User(userid="lusab-bansen", username="alice") claims = user_to_claims(user) assert claims["sub"] == "lusab-bansen" assert claims["preferred_username"] == "alice" assert "email" not in claims # None fields excluded def test_user_to_claims_full() -> None: user = User( userid="lusab-bansen", username="alice", preferred_username="Alice W.", given_name="Alice", family_name="Wonderland", nickname="ali", email="alice@example.com", email_verified=True, phone_number="+1234567890", phone_number_verified=False, picture="https://example.com/alice.jpg", locale="en", updated_at=datetime(2025, 1, 1, tzinfo=UTC), ) claims = user_to_claims(user) assert claims["sub"] == "lusab-bansen" assert claims["preferred_username"] == "Alice W." assert claims["given_name"] == "Alice" assert claims["family_name"] == "Wonderland" assert claims["nickname"] == "ali" assert claims["email"] == "alice@example.com" assert claims["email_verified"] is True assert claims["phone_number"] == "+1234567890" assert claims["phone_number_verified"] is False assert claims["picture"] == "https://example.com/alice.jpg" assert claims["locale"] == "en" assert claims["updated_at"] == int(datetime(2025, 1, 1, tzinfo=UTC).timestamp()) def test_porchlight_userinfo_returns_claims() -> None: userinfo = PorchlightUserInfo() userinfo.set_user_claims("lusab-bansen", {"sub": "lusab-bansen", "email": "a@b.com"}) result = userinfo("lusab-bansen", "client1") assert result["sub"] == "lusab-bansen" assert result["email"] == "a@b.com" def test_porchlight_userinfo_filters_claims() -> None: userinfo = PorchlightUserInfo() userinfo.set_user_claims("lusab-bansen", {"sub": "lusab-bansen", "email": "a@b.com", "name": "Alice"}) result = userinfo("lusab-bansen", "client1", user_info_claims={"email": None}) assert "email" in result assert "name" not in result def test_porchlight_userinfo_unknown_user() -> None: userinfo = PorchlightUserInfo() result = userinfo("unknown", "client1") assert result == {}