"""Unit tests: OAuth client config resolution, state generation, authorization URL, token exchange/refresh/revoke/userinfo — HTTP mocked (no real Google calls).""" import json import types from unittest.mock import MagicMock, patch import pytest import app.services.gmail_service as gs from app.services.gmail_service import ( GmailClient, GmailOauthError, build_authorization_url, exchange_code_for_tokens, generate_state, get_userinfo, parse_client_json, refresh_access_token, resolve_client_config, revoke_token,