#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
模块名称：update_login_cases_reset.py
模块描述：批量更新登录模块用例的 config，添加 reset_login=True

用途：用例间登录态重置机制上线后，给数据库中已存在的登录用例补上配置。
     只更新 name 以 "登录-" 开头的用例，其他模块不受影响。

作者：czj
创建日期：2026-07-14
"""

import asyncio
import httpx
import sys

BASE_URL = "http://localhost:8001"


async def update():
    async with httpx.AsyncClient(timeout=30) as client:
        # 获取所有用例
        r = await client.get(f"{BASE_URL}/api/cases", params={"limit": 500})
        cases = r.json()["items"]
        print(f"总用例数: {len(cases)}")

        updated = 0
        for c in cases:
            # 只更新登录模块用例（name 以 "登录-" 开头）
            if c["name"].startswith("登录-"):
                config = c.get("config", {}) or {}
                if config.get("reset_login") is True:
                    print(f"  ⏭️  {c['name']} (已含 reset_login，跳过)")
                    continue
                config["reset_login"] = True
                resp = await client.put(
                    f"{BASE_URL}/api/cases/{c['id']}",
                    json={"config": config},
                )
                status = "✅" if resp.status_code == 200 else "❌"
                print(f"  {status} {c['name']} -> {resp.status_code}")
                if resp.status_code == 200:
                    updated += 1

        print(f"\n完成：共更新 {updated} 个登录用例")


if __name__ == "__main__":
    sys.stdout.reconfigure(encoding="utf-8")
    asyncio.run(update())
