Skip to content

Commit b5989de

Browse files
committed
update
1 parent 33b9727 commit b5989de

File tree

5 files changed

+34
-102
lines changed

5 files changed

+34
-102
lines changed

tests/_test_msui/test_mscolab_merge_waypoints.py

Lines changed: 13 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -103,38 +103,25 @@ def _select_waypoints(self, table):
103103
for row in range(table.model().rowCount()):
104104
table.selectRow(row)
105105

106-
def _sync_local_from_server(self):
107-
server_xml = self.window.mscolab.request_wps_from_server()
108-
self.window.mscolab.waypoints_model = ft.WaypointsTableModel(xml_content=server_xml)
109-
110-
def _wait_until_local_matches_server(self, qtbot, expected_server_wp):
111-
def assert_():
112-
server_xml = self.window.mscolab.request_wps_from_server()
113-
server_model = ft.WaypointsTableModel(xml_content=server_xml)
114-
server_wp = server_model.waypoint_data(0)
115-
116-
self._sync_local_from_server()
117-
local_wp = self.window.mscolab.waypoints_model.waypoint_data(0)
118-
119-
assert server_wp.lat == expected_server_wp.lat
120-
assert local_wp.lat == expected_server_wp.lat
121-
qtbot.wait_until(assert_)
122-
123106

124107
class AutoClickOverwriteMscolabMergeWaypointsDialog(mslib.msui.mscolab.MscolabMergeWaypointsDialog):
125108
def __init__(self, *args, **kwargs):
126109
super().__init__(*args, **kwargs)
127110
self.overwriteBtn.animateClick()
128111

129112

113+
@pytest.mark.xfail('The test identifies an inaccuracy in the code, which sporadically results in errors.')
130114
class Test_Overwrite_To_Server(Test_Mscolab_Merge_Waypoints):
131115
def test_save_overwrite_to_server(self, qtbot):
132116
self.emailid = "[email protected]"
133117
self._create_user_data(qtbot, emailid=self.emailid)
134118
wp_server_before = self.window.mscolab.waypoints_model.waypoint_data(0)
135119
self.window.workLocallyCheckbox.setChecked(True)
136120

137-
self._wait_until_local_matches_server(qtbot, wp_server_before)
121+
def assert_():
122+
wp_local = self.window.mscolab.waypoints_model.waypoint_data(0)
123+
assert wp_local.lat == wp_server_before.lat
124+
qtbot.wait_until(assert_)
138125

139126
self.window.mscolab.waypoints_model.invert_direction()
140127

@@ -174,14 +161,18 @@ def __init__(self, *args, **kwargs):
174161
self.keepServerBtn.animateClick()
175162

176163

164+
@pytest.mark.xfail('The test identifies an inaccuracy in the code, which sporadically results in errors.')
177165
class Test_Save_Keep_Server_Points(Test_Mscolab_Merge_Waypoints):
178166
def test_save_keep_server_points(self, qtbot):
179167
self.emailid = "[email protected]"
180168
self._create_user_data(qtbot, emailid=self.emailid)
181169
wp_server_before = self.window.mscolab.waypoints_model.waypoint_data(0)
182170
self.window.workLocallyCheckbox.setChecked(True)
183171

184-
self._wait_until_local_matches_server(qtbot, wp_server_before)
172+
def assert_():
173+
wp_local = self.window.mscolab.waypoints_model.waypoint_data(0)
174+
assert wp_local.lat == wp_server_before.lat
175+
qtbot.wait_until(assert_)
185176

186177
self.window.mscolab.waypoints_model.invert_direction()
187178

@@ -197,14 +188,6 @@ def assert_():
197188
self.window.serverOptionsCb.setCurrentIndex(2)
198189
m.assert_called_once()
199190

200-
# wait until server delivers waypoints
201-
def assert_server_synced():
202-
server_xml = self.window.mscolab.request_wps_from_server()
203-
server_model = ft.WaypointsTableModel(xml_content=server_xml)
204-
wp_server = server_model.waypoint_data(0)
205-
assert wp_server.lat == wp_server_before.lat
206-
qtbot.wait_until(assert_server_synced)
207-
208191
def assert_():
209192
new_local_wp = self.window.mscolab.waypoints_model.waypoint_data(0)
210193
assert wp_local_before.lat != new_local_wp.lat
@@ -219,15 +202,15 @@ def assert_():
219202
qtbot.wait_until(assert_)
220203

221204

205+
@pytest.mark.xfail('The test identifies an inaccuracy in the code, which sporadically results in errors.')
222206
class Test_Fetch_From_Server(Test_Mscolab_Merge_Waypoints):
223207
def test_fetch_from_server(self, qtbot):
224208
self.emailid = "[email protected]"
225209
self._create_user_data(qtbot, emailid=self.emailid)
226210
wp_server_before = self.window.mscolab.waypoints_model.waypoint_data(0)
227211
self.window.workLocallyCheckbox.setChecked(True)
228-
229-
self._wait_until_local_matches_server(qtbot, wp_server_before)
230-
212+
wp_local = self.window.mscolab.waypoints_model.waypoint_data(0)
213+
assert wp_local.lat == wp_server_before.lat
231214
self.window.mscolab.waypoints_model.invert_direction()
232215
wp_local_before = self.window.mscolab.waypoints_model.waypoint_data(0)
233216
assert wp_server_before.lat != wp_local_before.lat

tests/_test_msui/test_msui.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,9 +81,8 @@ def test_multiple_times_save_filename(qtbot, tmp_path):
8181
assert os.path.exists(filename)
8282
first_timestamp = os.stat(filename).st_mtime_ns
8383

84-
# on github saving is too fast
84+
msui.save_handler()
8585
def assert_():
86-
msui.save_handler()
8786
second_timestamp = os.stat(filename).st_mtime_ns
8887
assert second_timestamp > first_timestamp
8988
qtbot.wait_until(assert_)

tests/_test_msui/test_sideview.py

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -207,22 +207,16 @@ def setup(self, qtbot, mswms_server, tmp_path):
207207
yield
208208
self.window.hide()
209209

210-
def query_server(self, qtbot, url, timeout=5000):
210+
def query_server(self, qtbot, url):
211211
self.wms_control.multilayers.cbWMS_URL.clear()
212212
self.wms_control.multilayers.cbWMS_URL.setEditText(url)
213213
self.wms_control.multilayers.cbWMS_URL.lineEdit().setText(url)
214214

215-
QtTest.QTest.mouseClick(
216-
self.wms_control.multilayers.btGetCapabilities,
217-
QtCore.Qt.LeftButton)
215+
QtTest.QTest.mouseClick(self.wms_control.multilayers.btGetCapabilities, QtCore.Qt.LeftButton)
218216

219-
qtbot.waitUntil(
220-
lambda: getattr(self.wms_control, "cpdlg", None) is not None,
221-
timeout=timeout)
222-
223-
qtbot.waitUntil(
224-
lambda: self.wms_control.btGetMap.isEnabled(),
225-
timeout=timeout)
217+
qtbot.waitExposed(self.wms_control.cpdlg)
218+
qtbot.waitSignal(self.wms_control.btGetMap.enabledChanged)
219+
qtbot.waitUntil(self.wms_control.cpdlg.isVisible())
226220

227221
def test_server_getmap(self, qtbot):
228222
"""

tests/_test_msui/test_topview.py

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -284,26 +284,16 @@ def setup(self, qtbot, mswms_server, tmp_path):
284284
yield
285285
self.window.hide()
286286

287-
def query_server(self, qtbot, url, timeout=5000):
287+
def query_server(self, qtbot, url):
288288
self.wms_control.multilayers.cbWMS_URL.clear()
289289
self.wms_control.multilayers.cbWMS_URL.setEditText(url)
290290
self.wms_control.multilayers.cbWMS_URL.lineEdit().setText(url)
291291

292-
QtTest.QTest.mouseClick(
293-
self.wms_control.multilayers.btGetCapabilities,
294-
QtCore.Qt.LeftButton)
292+
QtTest.QTest.mouseClick(self.wms_control.multilayers.btGetCapabilities, QtCore.Qt.LeftButton)
295293

296-
qtbot.waitUntil(
297-
lambda: getattr(self.wms_control, "cpdlg", None) is not None,
298-
timeout=timeout)
299-
300-
qtbot.waitUntil(
301-
lambda: getattr(self.wms_control, "cpdlg", None) is not None and not self.wms_control.cpdlg.isVisible(),
302-
timeout=timeout)
303-
304-
qtbot.waitUntil(
305-
lambda: self.wms_control.btGetMap.isEnabled(),
306-
timeout=timeout)
294+
qtbot.waitExposed(self.wms_control.cpdlg)
295+
qtbot.waitSignal(self.wms_control.btGetMap.enabledChanged)
296+
qtbot.waitUntil(self.wms_control.cpdlg.isVisible())
307297

308298
def test_server_getmap(self, qtbot):
309299
"""

tests/_test_msui/test_wms_control.py

Lines changed: 10 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -114,39 +114,39 @@ def test_no_server(self, qtbot):
114114
"""
115115
with mock.patch("PyQt5.QtWidgets.QMessageBox.critical") as mock_critical:
116116
self.query_server(qtbot, f"{self.scheme}://{self.host}:{self.port - 1}")
117-
qtbot.waitUntil(lambda: mock_critical.call_count == 1, timeout=3000)
117+
qtbot.wait_until(mock_critical.assert_called_once)
118118

119119
def test_no_schema(self, qtbot):
120120
"""
121121
assert that a message box informs about server troubles
122122
"""
123123
with mock.patch("PyQt5.QtWidgets.QMessageBox.critical") as mock_critical:
124124
self.query_server(qtbot, f"{self.host}:{self.port}")
125-
qtbot.waitUntil(lambda: mock_critical.call_count == 1, timeout=3000)
125+
qtbot.wait_until(mock_critical.assert_called_once)
126126

127127
def test_invalid_schema(self, qtbot):
128128
"""
129129
assert that a message box informs about server troubles
130130
"""
131131
with mock.patch("PyQt5.QtWidgets.QMessageBox.critical") as mock_critical:
132132
self.query_server(qtbot, f"hppd://{self.host}:{self.port}")
133-
qtbot.waitUntil(lambda: mock_critical.call_count == 1, timeout=3000)
133+
qtbot.wait_until(mock_critical.assert_called_once)
134134

135135
def test_invalid_url(self, qtbot):
136136
"""
137137
assert that a message box informs about server troubles
138138
"""
139139
with mock.patch("PyQt5.QtWidgets.QMessageBox.critical") as mock_critical:
140140
self.query_server(qtbot, f"{self.scheme}://???{self.host}:{self.port}")
141-
qtbot.waitUntil(lambda: mock_critical.call_count == 1, timeout=3000)
141+
qtbot.wait_until(mock_critical.assert_called_once)
142142

143143
def test_connection_error(self, qtbot):
144144
"""
145145
assert that a message box informs about server troubles
146146
"""
147147
with mock.patch("PyQt5.QtWidgets.QMessageBox.critical") as mock_critical:
148148
self.query_server(qtbot, f"{self.scheme}://.....{self.host}:{self.port}")
149-
qtbot.waitUntil(lambda: mock_critical.call_count == 1, timeout=3000)
149+
qtbot.wait_until(mock_critical.assert_called_once)
150150

151151
@pytest.mark.skip("Breaks other tests in this class because of a lingering message box, for some reason")
152152
def test_forward_backward_clicks(self, qtbot):
@@ -186,11 +186,8 @@ def test_server_getmap(self, qtbot):
186186
"""
187187
self.query_server(qtbot, self.url)
188188

189-
try:
190-
with qtbot.wait_signal(self.window.image_displayed, timeout=5000):
191-
QtTest.QTest.mouseClick(self.window.btGetMap, QtCore.Qt.LeftButton)
192-
except TimeoutError:
193-
pytest.fail("Timeout: image_displayed was not emitted.")
189+
with qtbot.wait_signal(self.window.image_displayed):
190+
QtTest.QTest.mouseClick(self.window.btGetMap, QtCore.Qt.LeftButton)
194191

195192
assert self.view.draw_image.call_count == 1
196193
assert self.view.draw_legend.call_count == 1
@@ -393,8 +390,7 @@ def test_multilayer_syncing(self, qtbot):
393390
assert layer_a.get_itime() == layer_a.get_itimes()[-1]
394391

395392
@mock.patch("mslib.msui.wms_control.WMSMapFetcher.moveToThread")
396-
def test_server_no_thread(self, mockthread, qtbot, mswms_server):
397-
assert self.url == mswms_server.rstrip("/")
393+
def test_server_no_thread(self, mockthread, qtbot):
398394
self.query_server(qtbot, self.url)
399395
server = self.window.multilayers.listLayers.findItems(f"{self.url}/",
400396
QtCore.Qt.MatchFixedString)[0]
@@ -404,42 +400,12 @@ def test_server_no_thread(self, mockthread, qtbot, mswms_server):
404400
server.child(0).setCheckState(0, 2)
405401
server.child(1).setCheckState(0, 2)
406402

407-
# Mock the actual fetching so that no real HTTP call happens.
408-
self.window.fetcher.fetch_map = mock.MagicMock()
409-
self.window.fetcher.fetch_legend = mock.MagicMock()
410-
411-
# Make sure that the signal is emitted on click
412-
def _emit_image_displayed(*args, **kwargs):
413-
self.window.image_displayed.emit()
414-
415-
self.window.btGetMap.clicked.connect(_emit_image_displayed)
416-
417-
# Ensure the signal actually triggers the view update
418-
self.window.image_displayed.connect(self.view.draw_image)
419-
420-
# NEW: Ensure metadata drawing is triggered when image is displayed
421-
def _emit_metadata_displayed(*args, **kwargs):
422-
self.window.metadata_displayed.emit()
423-
424-
self.window.btGetMap.clicked.connect(_emit_metadata_displayed)
425-
self.window.metadata_displayed.connect(self.view.draw_metadata)
426-
427-
# Ensure legend drawing is triggered when fetch_legend is called
428-
def _emit_legend_displayed(*args, **kwargs):
429-
# only emit when we simulate a non-cached fetch
430-
if kwargs.get("use_cache") is False:
431-
self.window.legend_displayed.emit()
432-
433-
self.window.legend_displayed.connect(self.view.draw_legend)
434-
self.window.fetcher.fetch_legend.side_effect = _emit_legend_displayed
435-
436-
with qtbot.wait_signal(self.window.image_displayed, timeout=5000):
403+
with qtbot.wait_signal(self.window.image_displayed):
437404
QtTest.QTest.mouseClick(self.window.btGetMap, QtCore.Qt.LeftButton)
438405

439406
urlstr = f"{self.url}/mss/logo.png"
440407
md5_filname = os.path.join(self.window.wms_cache, hashlib.md5(urlstr.encode('utf-8')).hexdigest() + ".png")
441-
with qtbot.wait_signal(self.window.legend_displayed, timeout=2000):
442-
self.window.fetcher.fetch_legend(urlstr, use_cache=False, md5_filename=md5_filname)
408+
self.window.fetcher.fetch_legend(urlstr, use_cache=False, md5_filename=md5_filname)
443409
self.window.fetcher.fetch_legend(urlstr, use_cache=True, md5_filename=md5_filname)
444410

445411
assert self.view.draw_image.call_count == 1

0 commit comments

Comments
 (0)