Files
cmshoppe/tests/test_gui.py
T

132 lines
4.6 KiB
Python
Raw Normal View History

2026-06-27 09:56:53 +08:00
import unittest
import os
import sys
os.environ.setdefault("QT_QPA_PLATFORM", "offscreen")
sys.path.insert(0, os.path.dirname(__file__))
2026-06-27 10:30:45 +08:00
from _helpers import TempDirMixin
2026-06-27 09:56:53 +08:00
from app import gui
2026-06-27 10:30:45 +08:00
from app import accounts
2026-06-27 09:56:53 +08:00
if gui.QT_IMPORT_ERROR is not None:
raise unittest.SkipTest("PySide6 未安装")
2026-06-27 10:30:45 +08:00
from PySide6.QtWidgets import QApplication, QLineEdit
2026-06-27 09:56:53 +08:00
2026-06-27 10:30:45 +08:00
from app.gui import AccountDialog, AccountsTab, MainWindow, TAB_STYLE, TAB_TITLES
2026-06-27 09:56:53 +08:00
2026-06-27 10:30:45 +08:00
class GuiTests(TempDirMixin, unittest.TestCase):
2026-06-27 09:56:53 +08:00
@classmethod
def setUpClass(cls):
cls.app = QApplication.instance() or QApplication([])
2026-06-27 10:30:45 +08:00
def make_config(self, temp_dir):
return {
"chrome_path": "chrome.exe",
"user_data_root": os.path.join(temp_dir, "chrome_user_data_dir"),
"db_path": os.path.join(temp_dir, "cmshopee.db"),
"debug_port_range": [9222, 9260],
}
2026-06-27 09:56:53 +08:00
2026-06-27 10:30:45 +08:00
def test_main_window_has_five_tabs_in_workflow_order(self):
with self.make_temp_dir() as temp_dir:
window = MainWindow(config=self.make_config(temp_dir))
self.addCleanup(window.close)
self.assertEqual(5, window.tabs.count())
self.assertEqual(
TAB_TITLES,
[window.tabs.tabText(index) for index in range(window.tabs.count())],
)
self.assertEqual("就绪", window.statusBar().currentMessage())
self.assertEqual(TAB_STYLE, window.tabs.styleSheet())
self.assertIn("min-width: 128px", window.tabs.styleSheet())
self.assertIn("padding: 8px 18px", window.tabs.styleSheet())
self.assertIn("margin-right: 8px", window.tabs.styleSheet())
self.assert_removed(temp_dir)
2026-06-27 09:56:53 +08:00
def test_tab_switch_updates_status_bar(self):
2026-06-27 10:30:45 +08:00
with self.make_temp_dir() as temp_dir:
window = MainWindow(config=self.make_config(temp_dir))
self.addCleanup(window.close)
2026-06-27 09:56:53 +08:00
2026-06-27 10:30:45 +08:00
window.tabs.setCurrentIndex(2)
2026-06-27 09:56:53 +08:00
2026-06-27 10:30:45 +08:00
self.assertEqual("③ 更新shopee", window.tabs.tabText(window.tabs.currentIndex()))
self.assertEqual("当前:③ 更新shopee", window.statusBar().currentMessage())
self.assert_removed(temp_dir)
def test_accounts_tab_lists_accounts_without_showing_password(self):
with self.make_temp_dir() as temp_dir:
cfg = self.make_config(temp_dir)
accounts.create_account(
"主店",
"alias",
"seller.shopee.tw",
9222,
password="secret",
config=cfg,
)
window = MainWindow(config=cfg)
self.addCleanup(window.close)
tab = window.tabs.widget(TAB_TITLES.index("④ 账号管理"))
self.assertIsInstance(tab, AccountsTab)
self.assertEqual(1, tab.table.rowCount())
self.assertEqual("主店", tab.table.item(0, 0).text())
self.assertEqual("alias", tab.table.item(0, 1).text())
self.assertEqual("未知", tab.table.item(0, 4).text())
visible_values = [
tab.table.item(0, column).text()
for column in range(tab.table.columnCount())
if tab.table.item(0, column) is not None
]
self.assertNotIn("secret", visible_values)
self.assert_removed(temp_dir)
def test_account_dialog_masks_password_field(self):
with self.make_temp_dir() as temp_dir:
cfg = self.make_config(temp_dir)
account = accounts.create_account(
"主店",
"alias",
debug_port=9222,
password="secret",
config=cfg,
)
dialog = AccountDialog(account=account, config=cfg)
self.addCleanup(dialog.close)
self.assertEqual(QLineEdit.Password, dialog.password_edit.echoMode())
self.assertEqual("secret", dialog.password_edit.text())
self.assertIn(account.slug, dialog.user_data_dir_edit.text())
self.assert_removed(temp_dir)
def test_accounts_tab_updates_login_status_cell(self):
with self.make_temp_dir() as temp_dir:
cfg = self.make_config(temp_dir)
accounts.create_account("主店", "alias", debug_port=9222, config=cfg)
tab = AccountsTab(config=cfg)
self.addCleanup(tab.close)
tab._on_login_check_finished(
{"alias": "alias", "status": {"logged_in": True, "reason": None}}
)
self.assertEqual("已登录", tab.table.item(0, 4).text())
self.assert_removed(temp_dir)
2026-06-27 09:56:53 +08:00
if __name__ == "__main__":
unittest.main()