# -*- coding: utf-8 -*- """数据库后端选择:默认 SQLite,DSN 解析。""" from __future__ import annotations import os import unittest from _support import IsolatedDataRoot class TestDbBackend(unittest.TestCase): def test_resolve_backend_defaults_to_sqlite(self) -> None: with IsolatedDataRoot(): from db.backend import resolve_backend self.assertEqual(resolve_backend(), "sqlite") def test_parse_mysql_dsn(self) -> None: with IsolatedDataRoot(): from db.backend import parse_mysql_dsn params = parse_mysql_dsn("mysql://root:secret@192.168.0.20:3306/demo_db") self.assertEqual(params["host"], "192.168.0.20") self.assertEqual(params["port"], 3306) self.assertEqual(params["user"], "root") self.assertEqual(params["password"], "secret") self.assertEqual(params["database"], "demo_db") def test_resolve_backend_uses_mysql_dsn_from_env(self) -> None: with IsolatedDataRoot(): from db.backend import resolve_backend os.environ["MYSQL_DSN"] = "mysql://u:p@127.0.0.1:3306/t" try: self.assertEqual(resolve_backend(), "mysql") finally: os.environ.pop("MYSQL_DSN", None) def test_describe_active_store_sqlite(self) -> None: with IsolatedDataRoot(): from db.connection import describe_active_store info = describe_active_store() self.assertEqual(info["backend"], "sqlite") self.assertIn("db_path", info) if __name__ == "__main__": unittest.main()