更新
This commit is contained in:
@@ -7,7 +7,7 @@ from typing import Any
|
||||
os.environ.setdefault("QT_QPA_PLATFORM", "offscreen")
|
||||
|
||||
import pytest
|
||||
from PySide6.QtCore import QDate, QPoint
|
||||
from PySide6.QtCore import QDate, QPoint, QRect
|
||||
from PySide6.QtWidgets import QApplication, QDialogButtonBox, QInputDialog, QLabel
|
||||
|
||||
from doctor_workstation.core import PermissionSet
|
||||
@@ -175,6 +175,8 @@ def test_patient_refresh_generation_ignores_late_results(
|
||||
monkeypatch.setattr(patients_module, "run_async", queue_async)
|
||||
workspace = PatientListWorkspace(SimpleNamespace(), PermissionSet(["*"]))
|
||||
workspace.refresh()
|
||||
# Identical in-flight queries coalesce; a changed query starts a new generation.
|
||||
workspace.keyword_edit.setText("新结果")
|
||||
workspace.refresh()
|
||||
newer = {
|
||||
"lists": [{"id": 2, "diagnosis_id": 2, "patient_name": "新结果"}],
|
||||
@@ -621,62 +623,72 @@ def test_patient_list_reference_geometry_and_row_actions(
|
||||
repository = DemoDoctorRepository()
|
||||
session = repository.login(repository.DEMO_ACCOUNT, repository.DEMO_PASSWORD)
|
||||
page = PatientsPage(repository, permissions=session.permissions, current_user=session.user)
|
||||
# 1366x768 shell minus its 170 px patient rail, 26 px outer gutter,
|
||||
# and 62 px top bar leaves a 1170x680 page viewport.
|
||||
page.resize(1170, 680)
|
||||
page.filter_disclosure.set_expanded(True)
|
||||
# Patient pages use the approved 208 px rail and 76 px top bar.
|
||||
page.resize(1536 - 208, 960 - 76)
|
||||
page.show()
|
||||
application.processEvents()
|
||||
page.patient_workspace.refresh()
|
||||
application.processEvents()
|
||||
|
||||
workspace = page.patient_workspace
|
||||
assert page.header.height() == 62
|
||||
assert workspace.filter_card.height() <= 92
|
||||
assert all(
|
||||
button.minimumHeight() == 44 and button.maximumHeight() == 44
|
||||
for button in workspace.summary_buttons.values()
|
||||
)
|
||||
assert workspace.keyword_edit.objectName() == "PatientKeywordInput"
|
||||
assert workspace.status_host.objectName() == "PatientStatusFilterHost"
|
||||
assert workspace.quick_host.objectName() == "PatientQuickDateHost"
|
||||
assert workspace.date_host.objectName() == "PatientDateRangeHost"
|
||||
assert (
|
||||
workspace.keyword_edit.maximumWidth(),
|
||||
workspace.status_host.maximumWidth(),
|
||||
workspace.quick_host.maximumWidth(),
|
||||
workspace.date_host.maximumWidth(),
|
||||
) == (620, 440, 620, 420)
|
||||
assert workspace.search_button.objectName() == "PatientSearchButton"
|
||||
assert workspace.reset_button.objectName() == "PatientResetButton"
|
||||
assert workspace.custom_date_button.objectName() == "PatientCustomDateButton"
|
||||
for width in (1170, 1290, 1514):
|
||||
page.resize(width, 680)
|
||||
application.processEvents()
|
||||
for widget in (
|
||||
workspace.keyword_edit,
|
||||
workspace.status_host,
|
||||
workspace.search_button,
|
||||
workspace.reset_button,
|
||||
workspace.quick_host,
|
||||
workspace.date_host,
|
||||
workspace.custom_date_button,
|
||||
assert workspace.table.rowCount() == 4
|
||||
assert workspace.table.rowViewportPosition(3) + workspace.table.rowHeight(3) <= workspace.table.viewport().height()
|
||||
assert workspace.table.horizontalScrollBar().maximum() == 0
|
||||
assert workspace.pager.summary_label.text() == "共 4 条 · 已全部加载"
|
||||
assert workspace.pager.height() == 24
|
||||
assert workspace.pager.page_size == 15
|
||||
assert workspace.pager.page == 1
|
||||
assert not workspace.pager.has_more
|
||||
for width, height in ((1536, 960), (1366, 768), (1024, 640)):
|
||||
page.resize(width - 208, height - 76)
|
||||
for _ in range(3):
|
||||
application.processEvents()
|
||||
assert page.header.height() >= page.header.minimumSizeHint().height()
|
||||
for host, widgets in (
|
||||
(workspace.search_toolbar, (workspace.keyword_edit, workspace.search_button, workspace.reset_button)),
|
||||
(workspace.filter_card, (workspace.status_host, workspace.quick_host, workspace.date_host, workspace.custom_date_button)),
|
||||
(workspace.status_host, tuple(workspace.status_buttons.values())),
|
||||
(workspace.quick_host, tuple(workspace.quick_buttons.values())),
|
||||
(workspace.date_host, (workspace.start_date, workspace.end_date)),
|
||||
(workspace.summary_strip, tuple(workspace.summary_buttons.values())),
|
||||
):
|
||||
top_left = widget.mapTo(workspace.filter_card, QPoint(0, 0))
|
||||
assert top_left.x() >= 0
|
||||
assert top_left.x() + widget.width() <= workspace.filter_card.width()
|
||||
assert all(button.maximumWidth() == 420 for button in workspace.summary_buttons.values())
|
||||
for widget in widgets:
|
||||
assert widget.isVisibleTo(page)
|
||||
assert host.rect().contains(QRect(widget.mapTo(host, QPoint()), widget.size())), widget.objectName()
|
||||
for host in (workspace.search_toolbar, workspace.filter_card, workspace.summary_strip, workspace.pager):
|
||||
if workspace.content.isAncestorOf(host):
|
||||
workspace.scroll.ensureWidgetVisible(host, 0, 0)
|
||||
application.processEvents()
|
||||
assert workspace.scroll.viewport().rect().contains(QRect(host.mapTo(workspace.scroll.viewport(), QPoint()), host.size())), host.objectName()
|
||||
else:
|
||||
assert page.rect().contains(QRect(host.mapTo(page, QPoint()), host.size())), host.objectName()
|
||||
assert workspace.pager.isVisibleTo(page)
|
||||
workspace.table.scrollToBottom()
|
||||
application.processEvents()
|
||||
assert workspace.table.rowViewportPosition(3) + workspace.table.rowHeight(3) <= workspace.table.viewport().height()
|
||||
assert page.tabs.minimumHeight() == 0
|
||||
assert workspace.content_stack.minimumHeight() == 0
|
||||
assert workspace.table.minimumHeight() == 0
|
||||
assert workspace.bottom_actions.isHidden()
|
||||
assert workspace.table.viewport().height() // 36 >= 6
|
||||
assert workspace.pager.isVisibleTo(page)
|
||||
assert workspace.table.objectName() == "PatientTable"
|
||||
assert workspace.table.columnCount() == 10
|
||||
assert workspace.table.horizontalHeaderItem(9).text() == "操作"
|
||||
if workspace.table.rowCount():
|
||||
assert workspace.table.rowHeight(0) == 36
|
||||
assert workspace.table.cellWidget(0, 0) is not None
|
||||
assert workspace.table.cellWidget(0, 9) is not None
|
||||
assert workspace.table.horizontalHeader().visualIndex(9) == 9
|
||||
assert all(not workspace.table.isColumnHidden(column) for column in range(10))
|
||||
actions = workspace.table.cellWidget(0, 9)
|
||||
assert workspace.table.rowHeight(0) >= max(40, actions.minimumSizeHint().height() + 1)
|
||||
for button in [*actions.buttons, actions.more_button]:
|
||||
if button is not None:
|
||||
assert actions.rect().contains(button.geometry())
|
||||
assert workspace.table.cellWidget(0, 0) is not None
|
||||
assert workspace.table.cellWidget(0, 9) is not None
|
||||
page.close()
|
||||
application.processEvents()
|
||||
|
||||
Reference in New Issue
Block a user