"""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,
