feat(settings): support gateway source switching

This commit is contained in:
chengma
2026-07-20 16:29:28 +08:00
parent ed1d8ee764
commit 6a0cd1c763
18 changed files with 746 additions and 77 deletions
+42 -9
View File
@@ -2970,6 +2970,39 @@ class GuiTests(TempDirMixin, unittest.TestCase):
self.assert_removed(temp_dir)
def test_settings_gateway_selector_switches_panels_and_persists_only_on_save(self):
with self.make_temp_dir() as temp_dir:
cfg = self.make_config(temp_dir)
cfg["ai"] = appconfig.default_config()["ai"]
cfg["ai"]["backend"] = "cmhub"
tab = SettingsTab(
config=cfg,
config_path=cfg["config_path"],
ai_models_path=cfg["ai_models_path"],
)
self.addCleanup(tab.close)
self.assertTrue(tab.gateway_default_button.isChecked())
self.assertFalse(tab.gateway_custom_button.isChecked())
self.assertFalse(tab.cmhub_panel.isHidden())
self.assertTrue(tab.model_picker_panel.isHidden())
tab.gateway_custom_button.setChecked(True)
self.assertTrue(tab.gateway_custom_button.isChecked())
self.assertFalse(tab.gateway_default_button.isChecked())
self.assertTrue(tab.cmhub_panel.isHidden())
self.assertFalse(tab.model_picker_panel.isHidden())
self.assertFalse(tab.direct_role_panel.isHidden())
self.assertTrue(tab.is_dirty())
self.assertEqual("cmhub", appconfig.load_config(cfg["config_path"])["ai"]["backend"])
with mock.patch("app.gui.QMessageBox.information"):
self.assertTrue(tab.save_app_settings())
self.assertEqual("direct", appconfig.load_config(cfg["config_path"])["ai"]["backend"])
self.assert_removed(temp_dir)
def test_settings_tab_cmhub_alias_refresh_filters_unpriced_and_keeps_saved(self):
with self.make_temp_dir() as temp_dir:
cfg = self.make_config(temp_dir)
@@ -3103,8 +3136,8 @@ class GuiTests(TempDirMixin, unittest.TestCase):
"points_balance": 66,
}
)
self.assertIn("cmhub 账号「主账号」连接成功", tab.cmhub_result_label.text())
self.assertNotIn("cmhub 账号「cmhub_user」", tab.cmhub_result_label.text())
self.assertIn("账号「主账号」连接默认网关成功", tab.cmhub_result_label.text())
self.assertNotIn("账号「cmhub_user」连接默认网关成功", tab.cmhub_result_label.text())
self.assertIn("余额 66", tab.cmhub_result_label.text())
self.assertEqual(tab.cmhub_result_label.text(), statuses[-1])
@@ -3116,7 +3149,7 @@ class GuiTests(TempDirMixin, unittest.TestCase):
"points_balance": 67,
}
)
self.assertIn("cmhub 账号「备用账号」连接成功", tab.cmhub_result_label.text())
self.assertIn("账号「备用账号」连接默认网关成功", tab.cmhub_result_label.text())
tab._on_cmhub_finished(
{
@@ -3126,12 +3159,12 @@ class GuiTests(TempDirMixin, unittest.TestCase):
"points_balance": 77,
}
)
self.assertIn("cmhub 账号「o***r@example.com」连接成功", tab.cmhub_result_label.text())
self.assertIn("账号「o***r@example.com」连接默认网关成功", tab.cmhub_result_label.text())
self.assertNotIn("owner@example.com", tab.cmhub_result_label.text())
tab._on_cmhub_finished({"ok": True, "models": models, "points_balance": 88})
self.assertIn("cmhub 连接成功", tab.cmhub_result_label.text())
self.assertNotIn("cmhub 账号", tab.cmhub_result_label.text())
self.assertIn("默认网关连接成功", tab.cmhub_result_label.text())
self.assertNotIn("账号「", tab.cmhub_result_label.text())
self.assert_removed(temp_dir)
def test_settings_tab_tracks_dirty_state_and_programmatic_cmhub_refresh_is_clean(self):
@@ -3381,7 +3414,7 @@ class GuiTests(TempDirMixin, unittest.TestCase):
self.assertEqual("生图用时 0 秒", tab.cover_elapsed_label.text())
self.assertEqual(tab.title_elapsed_label.width(), tab.cover_elapsed_label.width())
self.assertEqual("generateCmhubBalanceLabel", tab.cmhub_balance_label.objectName())
self.assertEqual("cmhub余额:未获取", tab.cmhub_balance_label.text())
self.assertEqual("默认网关余额:未获取", tab.cmhub_balance_label.text())
self.assertTrue(tab.cmhub_balance_label.isHidden())
self.assertEqual(0, tab.title_progress_bar.value())
self.assertEqual(0, tab.cover_progress_bar.value())
@@ -3993,7 +4026,7 @@ class GuiTests(TempDirMixin, unittest.TestCase):
self.addCleanup(tab.close)
self.assertTrue(tab.cmhub_balance_label.isHidden())
self.assertEqual("cmhub余额:未获取", tab.cmhub_balance_label.text())
self.assertEqual("默认网关余额:未获取", tab.cmhub_balance_label.text())
tab._on_generate_progress(
{
@@ -4006,7 +4039,7 @@ class GuiTests(TempDirMixin, unittest.TestCase):
"points_balance": 88,
}
)
self.assertEqual("cmhub余额:88", tab.cmhub_balance_label.text())
self.assertEqual("默认网关余额:88", tab.cmhub_balance_label.text())
self.assertTrue(tab.cmhub_balance_label.isHidden())
with mock.patch("app.gui.QMessageBox.warning") as warning: