62 lines
3.8 KiB
Python
62 lines
3.8 KiB
Python
"""用已有真实绑定的三级账号逐项切换统计偏好,对比报表后恢复原始偏好行。"""
|
|
|
|
import argparse
|
|
import json
|
|
import subprocess
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
from sw_write_verify import Rehearsal
|
|
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser(description=__doc__)
|
|
parser.add_argument("--runtime", type=Path, required=True)
|
|
parser.add_argument("--config", type=Path, default=Path("configs/config.yaml"))
|
|
parser.add_argument("--old-url", default="http://127.0.0.1:18080")
|
|
parser.add_argument("--new-url", default="http://127.0.0.1:19001")
|
|
parser.add_argument("--output", type=Path, required=True)
|
|
args = parser.parse_args()
|
|
run = Rehearsal(args)
|
|
identity = json.loads((args.runtime / "test-business-identities.json").read_text())["level3"]
|
|
ids = {"legacy": identity["user_id"], "new": run.mapping[str(identity["user_id"])]}
|
|
originals, preferences = {}, {}
|
|
for side, db in (("legacy", "sw8"), ("new", "sw9")):
|
|
originals[side] = run.query(f"SELECT * FROM {db}.sys_user_preference WHERE user_id=%s", (ids[side],))
|
|
preferences[side] = run.call(side, "level3", "GET", run.prefix(side) + "/user/preference")["data"]
|
|
(args.runtime / "preferences-before-matrix.json").write_text(json.dumps(originals, ensure_ascii=False, indent=2, default=str), encoding="utf-8")
|
|
templates = json.loads((args.runtime / "level3-business-cases.json").read_text())
|
|
templates = [row for row in templates if row["name"] in ("channelData-list", "gameData-list", "rank-game", "workbench-summary")]
|
|
try:
|
|
for include, dedup in ((True, True), (True, False), (False, True), (False, False)):
|
|
mode = f"sub{int(include)}-dedup{int(dedup)}"
|
|
value = {"includeSubPromote": include, "idcardDedup": dedup}
|
|
for side in ("legacy", "new"):
|
|
run.call(side, "level3", "PUT", run.prefix(side) + "/user/preference", value)
|
|
actual = run.call(side, "level3", "GET", run.prefix(side) + "/user/preference")["data"]
|
|
run.check("偏好写入 " + mode + " " + side, actual == value)
|
|
cases = [{**row, "name": mode + "-" + row["name"]} for row in templates]
|
|
cases_file = args.runtime / ("preference-cases-" + mode + ".json")
|
|
cases_file.write_text(json.dumps(cases), encoding="utf-8")
|
|
output = args.output.with_name(args.output.stem + "-" + mode + args.output.suffix)
|
|
with (args.runtime / ("preference-" + mode + ".log")).open("wb") as log:
|
|
completed = subprocess.run([sys.executable, str(Path(__file__).with_name("sw_api_compare.py")), "--runtime", str(args.runtime), "--cases", str(cases_file),
|
|
"--identity", "level3", "--old-url", args.old_url, "--new-url", args.new_url, "--output", str(output)], stdout=log, stderr=subprocess.STDOUT)
|
|
run.check("偏好模式报表一致 " + mode, completed.returncode == 0, report=output.name)
|
|
finally:
|
|
for side, db in (("legacy", "sw8"), ("new", "sw9")):
|
|
run.call(side, "level3", "PUT", run.prefix(side) + "/user/preference", preferences[side])
|
|
if not originals[side]:
|
|
run.query(f"DELETE FROM {db}.sys_user_preference WHERE user_id=%s", (ids[side],))
|
|
else:
|
|
row = originals[side][0]
|
|
run.query(f"UPDATE {db}.sys_user_preference SET include_sub_promote=%s,idcard_dedup=%s,update_time=%s WHERE user_id=%s",
|
|
(row["include_sub_promote"], row["idcard_dedup"], row["update_time"], ids[side]))
|
|
actual = run.query(f"SELECT * FROM {db}.sys_user_preference WHERE user_id=%s", (ids[side],))
|
|
run.check("偏好原始行已恢复 " + side, actual == originals[side])
|
|
run.db.close()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|