Prefer Supabase auth emails in ops memberships
This commit is contained in:
@@ -90,3 +90,52 @@ def test_auth_me_auto_reconciles_missing_subscription(monkeypatch):
|
|||||||
payload = response.json()
|
payload = response.json()
|
||||||
assert payload["subscription_active"] is True
|
assert payload["subscription_active"] is True
|
||||||
assert payload["subscription_plan_code"] == "pro_monthly"
|
assert payload["subscription_plan_code"] == "pro_monthly"
|
||||||
|
|
||||||
|
|
||||||
|
def test_ops_memberships_prefers_supabase_auth_email(monkeypatch):
|
||||||
|
monkeypatch.setattr(routes, "_assert_entitlement", lambda request: None)
|
||||||
|
monkeypatch.setattr(routes, "_require_ops_admin", lambda request: None)
|
||||||
|
monkeypatch.setattr(routes.PAYMENT_CHECKOUT, "enabled", False)
|
||||||
|
|
||||||
|
class _FakeDB:
|
||||||
|
@staticmethod
|
||||||
|
def get_users_by_supabase_user_ids(user_ids):
|
||||||
|
return {
|
||||||
|
"user-1": {
|
||||||
|
"supabase_email": "stale@example.com",
|
||||||
|
"username": "tester",
|
||||||
|
"telegram_id": 1,
|
||||||
|
"created_at": "2026-03-01T00:00:00+00:00",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
import src.database.db_manager as db_module
|
||||||
|
|
||||||
|
monkeypatch.setattr(db_module, "DBManager", lambda: _FakeDB())
|
||||||
|
monkeypatch.setattr(
|
||||||
|
routes.SUPABASE_ENTITLEMENT,
|
||||||
|
"list_active_subscriptions",
|
||||||
|
lambda limit=200: [
|
||||||
|
{
|
||||||
|
"user_id": "user-1",
|
||||||
|
"plan_code": "pro_monthly",
|
||||||
|
"starts_at": "2026-03-22T00:00:00+00:00",
|
||||||
|
"expires_at": "2026-04-21T00:00:00+00:00",
|
||||||
|
}
|
||||||
|
],
|
||||||
|
)
|
||||||
|
monkeypatch.setattr(
|
||||||
|
routes.SUPABASE_ENTITLEMENT,
|
||||||
|
"get_auth_users",
|
||||||
|
lambda user_ids: {
|
||||||
|
"user-1": {
|
||||||
|
"email": "fresh@example.com",
|
||||||
|
"created_at": "2026-03-02T00:00:00+00:00",
|
||||||
|
}
|
||||||
|
},
|
||||||
|
)
|
||||||
|
response = client.get("/api/ops/memberships")
|
||||||
|
|
||||||
|
assert response.status_code == 200
|
||||||
|
payload = response.json()
|
||||||
|
assert payload["memberships"][0]["email"] == "fresh@example.com"
|
||||||
|
|||||||
+1
-1
@@ -294,7 +294,7 @@ async def ops_memberships(request: Request, limit: int = 200):
|
|||||||
auth_user = auth_user_map.get(user_id, {})
|
auth_user = auth_user_map.get(user_id, {})
|
||||||
row = {
|
row = {
|
||||||
"user_id": user_id,
|
"user_id": user_id,
|
||||||
"email": str(local_user.get("supabase_email") or auth_user.get("email") or ""),
|
"email": str(auth_user.get("email") or local_user.get("supabase_email") or ""),
|
||||||
"telegram_id": local_user.get("telegram_id"),
|
"telegram_id": local_user.get("telegram_id"),
|
||||||
"username": local_user.get("username"),
|
"username": local_user.get("username"),
|
||||||
"registered_at": local_user.get("created_at") or auth_user.get("created_at"),
|
"registered_at": local_user.get("created_at") or auth_user.get("created_at"),
|
||||||
|
|||||||
Reference in New Issue
Block a user