146 lines
5.1 KiB
Python
146 lines
5.1 KiB
Python
from __future__ import annotations
|
|
|
|
import os
|
|
|
|
os.environ.setdefault("QT_QPA_PLATFORM", "offscreen")
|
|
|
|
from PySide6.QtCore import Qt, QTimer
|
|
from PySide6.QtWidgets import QApplication, QDialog, QMainWindow
|
|
|
|
from doctor_workstation.core import PermissionSet
|
|
from doctor_workstation.services import DemoDoctorRepository
|
|
from doctor_workstation.ui.appointment_drawer import AppointmentDrawer
|
|
from doctor_workstation.ui.dialogs.ai_consult_picker import AiConsultTargetDialog
|
|
from doctor_workstation.ui.dialogs.diagnosis import DiagnosisDialog, OrderDetailDrawer
|
|
from doctor_workstation.ui.dialogs.prescription import PrescriptionEditorDialog
|
|
from doctor_workstation.ui.shell import ShellWindow
|
|
from doctor_workstation.ui.theme import _install_business_dialog_styling
|
|
|
|
|
|
def test_new_dialog_and_im_window_use_85_percent_of_main_window() -> None:
|
|
app = QApplication.instance() or QApplication([])
|
|
_install_business_dialog_styling(app)
|
|
main = QMainWindow()
|
|
main.setProperty("doctorMainWindow", True)
|
|
main.setGeometry(40, 60, 1200, 800)
|
|
main.show()
|
|
app.processEvents()
|
|
|
|
dialog = QDialog(main)
|
|
dialog.setMinimumSize(1100, 700)
|
|
im_window = QMainWindow()
|
|
im_window.resize(1120, 760)
|
|
try:
|
|
for window in (dialog, im_window):
|
|
window.show()
|
|
app.processEvents()
|
|
assert window.size().width() == round(main.frameGeometry().width() * 0.85)
|
|
assert window.size().height() == round(main.frameGeometry().height() * 0.85)
|
|
assert abs(window.frameGeometry().center().x() - main.frameGeometry().center().x()) <= 1
|
|
assert abs(window.frameGeometry().center().y() - main.frameGeometry().center().y()) <= 1
|
|
window.hide()
|
|
main.resize(1400, 900)
|
|
app.processEvents()
|
|
for window in (dialog, im_window):
|
|
window.show()
|
|
app.processEvents()
|
|
assert window.width() == round(main.frameGeometry().width() * 0.85)
|
|
assert window.height() == round(main.frameGeometry().height() * 0.85)
|
|
finally:
|
|
im_window.close()
|
|
dialog.close()
|
|
main.close()
|
|
|
|
|
|
def test_frameless_drawer_keeps_its_owner_layout() -> None:
|
|
app = QApplication.instance() or QApplication([])
|
|
_install_business_dialog_styling(app)
|
|
main = QMainWindow()
|
|
main.setProperty("doctorMainWindow", True)
|
|
main.resize(1200, 800)
|
|
main.show()
|
|
app.processEvents()
|
|
drawer = QDialog(main)
|
|
drawer.setWindowFlag(Qt.WindowType.FramelessWindowHint, True)
|
|
drawer.resize(500, 400)
|
|
try:
|
|
drawer.show()
|
|
app.processEvents()
|
|
assert drawer.size().width() == 500
|
|
assert drawer.size().height() == 400
|
|
finally:
|
|
drawer.close()
|
|
main.close()
|
|
|
|
|
|
def test_modal_exec_uses_main_window_geometry() -> None:
|
|
app = QApplication.instance() or QApplication([])
|
|
_install_business_dialog_styling(app)
|
|
main = QMainWindow()
|
|
main.setProperty("doctorMainWindow", True)
|
|
main.setGeometry(30, 50, 1200, 800)
|
|
main.show()
|
|
app.processEvents()
|
|
dialog = QDialog(main)
|
|
try:
|
|
QTimer.singleShot(0, dialog.accept)
|
|
dialog.exec()
|
|
assert dialog.width() == round(main.frameGeometry().width() * 0.85)
|
|
assert dialog.height() == round(main.frameGeometry().height() * 0.85)
|
|
finally:
|
|
dialog.close()
|
|
main.close()
|
|
|
|
|
|
def test_owner_synchronized_business_drawers_use_main_window_85_percent() -> None:
|
|
app = QApplication.instance() or QApplication([])
|
|
_install_business_dialog_styling(app)
|
|
main = QMainWindow()
|
|
main.setProperty("doctorMainWindow", True)
|
|
main.setGeometry(30, 50, 1400, 900)
|
|
main.show()
|
|
app.processEvents()
|
|
repository = DemoDoctorRepository()
|
|
dialogs = [
|
|
AppointmentDrawer({"id": 501, "diagnosis_id": 501}, repository, main, autoload=False),
|
|
DiagnosisDialog(repository, main),
|
|
OrderDetailDrawer(main),
|
|
PrescriptionEditorDialog(repository, parent=main),
|
|
]
|
|
try:
|
|
for dialog in dialogs:
|
|
dialog.show()
|
|
app.processEvents()
|
|
app.processEvents()
|
|
assert dialog.width() == round(main.frameGeometry().width() * 0.85)
|
|
assert dialog.height() == round(main.frameGeometry().height() * 0.85)
|
|
dialog.hide()
|
|
finally:
|
|
for dialog in dialogs:
|
|
dialog.close()
|
|
main.close()
|
|
|
|
|
|
def test_maximized_workstation_opens_patient_picker_at_85_percent() -> None:
|
|
app = QApplication.instance() or QApplication([])
|
|
_install_business_dialog_styling(app)
|
|
repository = DemoDoctorRepository()
|
|
permissions = PermissionSet(["*"])
|
|
main = ShellWindow(
|
|
repository,
|
|
{"user": {"name": "测试医生"}, "demo_mode": True},
|
|
permissions,
|
|
)
|
|
main.showMaximized()
|
|
app.processEvents()
|
|
picker = AiConsultTargetDialog(repository, permissions, main)
|
|
try:
|
|
picker.show()
|
|
app.processEvents()
|
|
assert main.isMaximized()
|
|
assert picker.width() == round(main.frameGeometry().width() * 0.85)
|
|
assert picker.height() == round(main.frameGeometry().height() * 0.85)
|
|
finally:
|
|
picker.close()
|
|
main.close()
|