更新
This commit is contained in:
@@ -240,6 +240,7 @@ def test_real_demo_login_reaches_success_without_widget_adapter(
|
||||
api_base_url="https://127.0.0.1:9",
|
||||
request_timeout=30,
|
||||
demo_mode=True,
|
||||
debug_mode=True,
|
||||
remembered_account="",
|
||||
)
|
||||
payloads: list[dict[str, Any]] = []
|
||||
@@ -346,6 +347,7 @@ def test_server_settings_panel_keeps_controls_separated_at_minimum_window(
|
||||
api_base_url="",
|
||||
request_timeout=30,
|
||||
demo_mode=False,
|
||||
debug_mode=True,
|
||||
remembered_account="",
|
||||
)
|
||||
window = LoginWindow(object(), config=config, settings=settings)
|
||||
@@ -375,6 +377,49 @@ def test_server_settings_panel_keeps_controls_separated_at_minimum_window(
|
||||
application.processEvents()
|
||||
|
||||
|
||||
def test_production_login_hides_and_blocks_debug_controls(tmp_path: Any) -> None:
|
||||
application = QApplication.instance() or QApplication([])
|
||||
settings = QSettings(str(tmp_path / "production.ini"), QSettings.Format.IniFormat)
|
||||
settings.setValue("server/base_url", "https://stale.example.test")
|
||||
settings.setValue("server/verify_ssl", False)
|
||||
remote_repository = object()
|
||||
demo_repository = DemoDoctorRepository()
|
||||
config = SimpleNamespace(
|
||||
api_base_url="https://prod.example.test/adminapi",
|
||||
request_timeout=30,
|
||||
verify_ssl=True,
|
||||
demo_mode=True,
|
||||
debug_mode=False,
|
||||
remembered_account="",
|
||||
)
|
||||
window = LoginWindow(
|
||||
remote_repository,
|
||||
config=config,
|
||||
demo_repository=demo_repository,
|
||||
settings=settings,
|
||||
)
|
||||
window.show()
|
||||
application.processEvents()
|
||||
|
||||
assert not window.demo_check.isVisible()
|
||||
assert not window.debug_settings_section.isVisible()
|
||||
assert not window.server_toggle.isVisible()
|
||||
assert not window.server_panel.isVisible()
|
||||
assert not window.demo_check.isChecked()
|
||||
assert window.active_repository is remote_repository
|
||||
assert window.server_url_edit.text() == "https://prod.example.test/adminapi"
|
||||
assert window._credential_scope() == "https://prod.example.test/adminapi"
|
||||
|
||||
window._on_demo_toggled(True)
|
||||
window._toggle_server_panel(True)
|
||||
|
||||
assert not window.demo_check.isChecked()
|
||||
assert window.active_repository is remote_repository
|
||||
assert window.server_panel.isHidden()
|
||||
window.close()
|
||||
application.processEvents()
|
||||
|
||||
|
||||
def test_server_settings_can_persist_self_signed_debug_mode(tmp_path: Any) -> None:
|
||||
application = QApplication.instance() or QApplication([])
|
||||
settings = QSettings(str(tmp_path / "self-signed.ini"), QSettings.Format.IniFormat)
|
||||
@@ -383,6 +428,7 @@ def test_server_settings_can_persist_self_signed_debug_mode(tmp_path: Any) -> No
|
||||
request_timeout=30,
|
||||
verify_ssl=True,
|
||||
demo_mode=False,
|
||||
debug_mode=True,
|
||||
remembered_account="",
|
||||
)
|
||||
window = LoginWindow(object(), config=config, settings=settings)
|
||||
@@ -408,6 +454,7 @@ def test_login_applies_self_signed_setting_before_authentication(
|
||||
config = AppConfig(
|
||||
api_base_url="https://internal.example.test/adminapi",
|
||||
demo_mode=False,
|
||||
debug_mode=True,
|
||||
verify_ssl=True,
|
||||
)
|
||||
calls: list[str] = []
|
||||
@@ -500,6 +547,7 @@ def test_certificate_error_opens_server_settings(tmp_path: Any) -> None:
|
||||
request_timeout=30,
|
||||
verify_ssl=True,
|
||||
demo_mode=False,
|
||||
debug_mode=True,
|
||||
remembered_account="",
|
||||
)
|
||||
window = LoginWindow(object(), config=config, settings=settings)
|
||||
@@ -513,6 +561,31 @@ def test_certificate_error_opens_server_settings(tmp_path: Any) -> None:
|
||||
application.processEvents()
|
||||
|
||||
|
||||
def test_certificate_error_does_not_reveal_production_server_settings(tmp_path: Any) -> None:
|
||||
application = QApplication.instance() or QApplication([])
|
||||
settings = QSettings(str(tmp_path / "production-certificate.ini"), QSettings.Format.IniFormat)
|
||||
config = SimpleNamespace(
|
||||
api_base_url="https://prod.example.test/adminapi",
|
||||
request_timeout=30,
|
||||
verify_ssl=True,
|
||||
demo_mode=False,
|
||||
debug_mode=False,
|
||||
remembered_account="",
|
||||
)
|
||||
window = LoginWindow(object(), config=config, settings=settings)
|
||||
window.show()
|
||||
|
||||
window._on_login_error(RuntimeError("[SSL: CERTIFICATE_VERIFY_FAILED]"))
|
||||
application.processEvents()
|
||||
|
||||
assert not window.server_toggle.isChecked()
|
||||
assert not window.debug_settings_section.isVisible()
|
||||
assert window.server_panel.isHidden()
|
||||
assert "联系管理员" in window.error_banner.label.text()
|
||||
window.close()
|
||||
application.processEvents()
|
||||
|
||||
|
||||
def test_business_dialogs_can_be_maximized_but_prompts_cannot() -> None:
|
||||
"""Dense AI panels and editors were stuck at their constructed size."""
|
||||
|
||||
|
||||
Reference in New Issue
Block a user