76 lines
3.0 KiB
Python
76 lines
3.0 KiB
Python
"""Regressions for the blank strip between query results and pinned actions."""
|
|
from __future__ import annotations
|
|
|
|
import os
|
|
|
|
os.environ.setdefault("QT_QPA_PLATFORM", "offscreen")
|
|
|
|
import pytest
|
|
from PySide6.QtCore import QPoint
|
|
from PySide6.QtTest import QTest
|
|
from PySide6.QtWidgets import QApplication
|
|
|
|
from doctor_workstation.ui.diagnosis_index_widgets import DiagnosisTableHost
|
|
from doctor_workstation.ui.theme import apply_theme
|
|
|
|
|
|
@pytest.fixture(scope="module")
|
|
def application():
|
|
app = QApplication.instance() or QApplication([])
|
|
apply_theme(app)
|
|
return app
|
|
|
|
|
|
def settle(app):
|
|
for _ in range(4):
|
|
app.processEvents()
|
|
QTest.qWait(15)
|
|
|
|
|
|
def rows(count):
|
|
return [{"id": i + 1, "patient_name": f"演示患者{i + 1}", "age": 55,
|
|
"gender": 1, "has_appointment": 0, "diagnosis_confirmed": 1}
|
|
for i in range(count)]
|
|
|
|
|
|
@pytest.mark.parametrize("blue", [True, False])
|
|
def test_filter_results_fill_viewport_through_scrollbar_and_window_changes(application, blue):
|
|
host = DiagnosisTableHost(tech_blue=blue, action_policy={"view": True, "edit": True})
|
|
host.resize(1650, 680)
|
|
host.show()
|
|
for width, count in ((1650, 70), (1650, 2), (1900, 2), (900, 2),
|
|
(1900, 0), (1900, 2), (1366, 80), (1650, 2)):
|
|
host.resize(width, 680)
|
|
host.set_rows(rows(count))
|
|
settle(application)
|
|
main = host.main
|
|
viewport = main.viewport()
|
|
base_width = sum(host.LEFT_WIDTHS)
|
|
assert main.horizontalHeader().length() == max(base_width, viewport.width())
|
|
assert all(main.columnWidth(i) >= minimum for i, minimum in enumerate(host.LEFT_WIDTHS))
|
|
assert main.viewport().height() == host.fixed.viewport().height()
|
|
assert main.verticalScrollBar().maximum() == host.fixed.verticalScrollBar().maximum()
|
|
if viewport.width() >= base_width:
|
|
assert main.horizontalScrollBar().maximum() == 0
|
|
if count:
|
|
main.selectRow(1)
|
|
settle(application)
|
|
row = main.visualRect(host.model.index(1, 9))
|
|
point = QPoint(viewport.width() - 4, row.bottom() - 5)
|
|
# A real data cell, rather than the QTableView's blank background,
|
|
# must occupy the entire strip leading into the pinned actions.
|
|
assert main.indexAt(point).row() == 1
|
|
assert main.indexAt(point).column() == 9
|
|
if blue:
|
|
capture = viewport.grab()
|
|
scale = capture.devicePixelRatio()
|
|
pixel = QPoint(round(point.x() * scale), round(point.y() * scale))
|
|
assert capture.toImage().pixelColor(pixel).name() == "#eaf2ff"
|
|
else:
|
|
assert main.horizontalScrollBar().maximum() > 0
|
|
main.horizontalScrollBar().setValue(main.horizontalScrollBar().maximum())
|
|
settle(application)
|
|
assert main.visualRect(host.model.index(0, 9)).right() < viewport.width()
|
|
host.close()
|
|
host.deleteLater()
|