Пример #1
0
 def query_server(self, url):
     QtWidgets.QApplication.processEvents()
     QtTest.QTest.keyClicks(self.wms_control.multilayers.cbWMS_URL, url)
     QtWidgets.QApplication.processEvents()
     QtTest.QTest.mouseClick(self.wms_control.multilayers.btGetCapabilities, QtCore.Qt.LeftButton)
     QtWidgets.QApplication.processEvents()
     wait_until_signal(self.wms_control.cpdlg.canceled)
Пример #2
0
    def test_server_no_thread(self, mockbox, mockthread):
        self.query_server(f"http://127.0.0.1:{self.port}")
        server = self.window.multilayers.listLayers.findItems(
            f"http://127.0.0.1:{self.port}/", QtCore.Qt.MatchFixedString)[0]
        self.window.cbAutoUpdate.setCheckState(False)
        server.setExpanded(True)
        self.window.multilayers.cbMultilayering.setChecked(True)
        server.child(0).setCheckState(0, 2)
        server.child(1).setCheckState(0, 2)

        QtTest.QTest.mouseClick(self.window.btGetMap, QtCore.Qt.LeftButton)
        QtWidgets.QApplication.processEvents()
        wait_until_signal(self.window.image_displayed)

        urlstr = f"http://127.0.0.1:{self.port}/mss/logo.png"
        md5_filname = os.path.join(
            self.window.wms_cache,
            hashlib.md5(urlstr.encode('utf-8')).hexdigest() + ".png")
        self.window.fetcher.fetch_legend(urlstr,
                                         use_cache=False,
                                         md5_filename=md5_filname)
        self.window.fetcher.fetch_legend(urlstr,
                                         use_cache=True,
                                         md5_filename=md5_filname)

        assert mockbox.critical.call_count == 0
        assert self.view.draw_image.call_count == 1
        assert self.view.draw_legend.call_count == 1
        assert self.view.draw_metadata.call_count == 1
Пример #3
0
    def test_server_getmap_cached(self, mockbox):
        """
        assert that a getmap call to a WMS server displays an image
        """
        self.query_server(f"http://127.0.0.1:{self.port}")

        QtTest.QTest.mouseClick(self.window.btGetMap, QtCore.Qt.LeftButton)
        QtWidgets.QApplication.processEvents()
        wait_until_signal(self.window.image_displayed)

        # assert mockbox.critical.call_count == 0

        assert self.view.draw_image.call_count == 1
        assert self.view.draw_legend.call_count == 1
        assert self.view.draw_metadata.call_count == 1
        self.view.reset_mock()

        QtTest.QTest.mouseClick(self.window.cbCacheEnabled,
                                QtCore.Qt.LeftButton)
        QtWidgets.QApplication.processEvents()
        QtTest.QTest.mouseClick(self.window.btGetMap, QtCore.Qt.LeftButton)
        QtWidgets.QApplication.processEvents()
        wait_until_signal(self.window.image_displayed)

        assert mockbox.critical.call_count == 0

        assert self.view.draw_image.call_count == 1
        assert self.view.draw_legend.call_count == 1
        assert self.view.draw_metadata.call_count == 1
Пример #4
0
    def test_singlelayer_handling(self, mockbox):
        """
        assert that singlelayer mode behaves as expected
        """
        self.query_server(f"http://127.0.0.1:{self.port}")
        server = self.window.multilayers.listLayers.findItems(f"http://127.0.0.1:{self.port}/",
                                                              QtCore.Qt.MatchFixedString)[0]
        self.window.cbAutoUpdate.setCheckState(False)
        assert server is not None
        assert "header" in self.window.multilayers.layers[f"http://127.0.0.1:{self.port}/"]
        assert "wms" in self.window.multilayers.layers[f"http://127.0.0.1:{self.port}/"]

        self.window.multilayers.cbMultilayering.setChecked(True)
        self.window.multilayers.cbMultilayering.setChecked(False)
        # Check using singlelayer mode contains no checkboxes
        for i in range(0, server.childCount()):
            layer = server.child(i)
            assert layer.data(0, QtCore.Qt.CheckStateRole) is None or not layer.data(0,
                                                                                     QtCore.Qt.CheckStateRole).isValid()

        # Check clicking on layers updates the UI
        self.window.multilayers.multilayer_clicked(server.child(0))
        assert self.window.lLayerName.text().endswith(server.child(0).text(0))
        self.window.multilayers.multilayer_clicked(server.child(1))
        assert self.window.lLayerName.text().endswith(server.child(1).text(0))

        # Check drawing not causing errors
        QtTest.QTest.mouseClick(self.window.btGetMap, QtCore.Qt.LeftButton)
        QtWidgets.QApplication.processEvents()
        wait_until_signal(self.window.image_displayed)

        assert mockbox.critical.call_count == 0
        assert self.view.draw_image.call_count == 1
        assert self.view.draw_legend.call_count == 1
        assert self.view.draw_metadata.call_count == 1
Пример #5
0
 def test_server_getmap(self, mockbox):
     """
     assert that a getmap call to a WMS server displays an image
     """
     self.query_server(f"http://127.0.0.1:{self.port}")
     QtTest.QTest.mouseClick(self.wms_control.btGetMap, QtCore.Qt.LeftButton)
     QtWidgets.QApplication.processEvents()
     wait_until_signal(self.wms_control.image_displayed)
     assert mockbox.critical.call_count == 0
Пример #6
0
 def query_server(self, url):
     while len(self.window.multilayers.cbWMS_URL.currentText()) > 0:
         QtTest.QTest.keyClick(self.window.multilayers.cbWMS_URL, QtCore.Qt.Key_Backspace)
         QtWidgets.QApplication.processEvents()
     QtTest.QTest.keyClicks(self.window.multilayers.cbWMS_URL, url)
     QtWidgets.QApplication.processEvents()
     QtTest.QTest.qWait(2000)  # time for the server to start up
     QtTest.QTest.mouseClick(self.window.multilayers.btGetCapabilities, QtCore.Qt.LeftButton)
     QtWidgets.QApplication.processEvents()
     wait_until_signal(self.window.cpdlg.canceled)
Пример #7
0
    def test_multilayer_drawing(self, mockbox):
        """
        assert that drawing a layer through code doesn't fail for vsec
        """
        self.query_server(f"http://127.0.0.1:{self.port}")
        server = self.window.multilayers.listLayers.findItems(
            f"http://127.0.0.1:{self.port}/", QtCore.Qt.MatchFixedString)[0]
        server.child(0).draw()
        wait_until_signal(self.window.image_displayed)

        assert mockbox.critical.call_count == 0
Пример #8
0
    def test_multilayer_handling(self, mockbox):
        """
        assert that multilayers get created, handled and drawn properly
        """
        self.query_server(f"http://127.0.0.1:{self.port}")
        server = self.window.multilayers.listLayers.findItems(
            f"http://127.0.0.1:{self.port}/", QtCore.Qt.MatchFixedString)[0]
        self.window.cbAutoUpdate.setCheckState(False)
        assert server is not None
        assert "header" in self.window.multilayers.layers[
            f"http://127.0.0.1:{self.port}/"]
        assert "wms" in self.window.multilayers.layers[
            f"http://127.0.0.1:{self.port}/"]
        self.window.multilayers.cbMultilayering.setChecked(True)

        for i in range(0, server.childCount()):
            layer_widget = server.child(i)
            assert layer_widget.checkState(0) == 0

        # Check activating and deactivating layers, and changing priorities works
        server.setExpanded(True)
        server.child(0).setCheckState(0, QtCore.Qt.Checked)
        server.child(2).setCheckState(0, QtCore.Qt.Checked)
        self.window.multilayers.listLayers.itemWidget(server.child(0),
                                                      2).setCurrentIndex(1)
        self.window.multilayers.multilayer_clicked(server.child(1))
        assert self.window.lLayerName.text() != server.child(1).text(0)
        assert self.window.multilayers.get_current_layer().text(
            0) in self.window.lLayerName.text()
        assert self.window.multilayers.listLayers.itemWidget(
            server.child(0), 2) is not None
        assert self.window.multilayers.listLayers.itemWidget(
            server.child(2), 2) is not None
        assert self.window.multilayers.listLayers.itemWidget(
            server.child(0), 2).currentText() == "2"
        assert self.window.multilayers.listLayers.itemWidget(
            server.child(1), 2) is None
        server.child(2).setCheckState(0, QtCore.Qt.Unchecked)
        assert self.window.multilayers.listLayers.itemWidget(
            server.child(2), 2) is None
        assert self.window.multilayers.listLayers.itemWidget(
            server.child(0), 2).currentText() == "1"

        # Check drawing not causing errors
        QtTest.QTest.mouseClick(self.window.btGetMap, QtCore.Qt.LeftButton)
        QtWidgets.QApplication.processEvents()
        wait_until_signal(self.window.image_displayed)

        assert mockbox.critical.call_count == 0
        assert self.view.draw_image.call_count == 1
        assert self.view.draw_legend.call_count == 1
        assert self.view.draw_metadata.call_count == 1
Пример #9
0
 def test_server_getmap(self, mockbox):
     """
     assert that a getmap call to a WMS server displays an image
     """
     self.query_server(f"http://127.0.0.1:{self.port}")
     QtTest.QTest.mouseClick(self.wms_control.btGetMap,
                             QtCore.Qt.LeftButton)
     QtWidgets.QApplication.processEvents()
     wait_until_signal(self.wms_control.image_displayed)
     assert self.window.getView().map.image is not None
     self.window.getView().set_map_appearance({})
     self.window.getView().clear_figure()
     assert self.window.getView().map.image is None
     self.window.mpl.canvas.redraw_map()
     assert mockbox.critical.call_count == 0
Пример #10
0
    def test_server_abort_getmap(self):
        """
        assert that an aborted getmap call does not change the displayed image
        """
        self.query_server(f"http://127.0.0.1:{self.port}")
        QtTest.QTest.mouseClick(self.window.btGetMap, QtCore.Qt.LeftButton)
        QtWidgets.QApplication.processEvents()
        QtTest.QTest.qWait(20)
        QtTest.QTest.keyClick(self.window.pdlg, QtCore.Qt.Key_Enter)
        QtWidgets.QApplication.processEvents()
        wait_until_signal(self.window.image_displayed)

        assert self.view.draw_image.call_count == 0
        assert self.view.draw_legend.call_count == 0
        assert self.view.draw_metadata.call_count == 0
        self.view.reset_mock()
Пример #11
0
    def test_server_service_cache(self, mockbox):
        """
        assert that changing between servers still allows image retrieval
        """
        self.query_server(f"http://127.0.0.1:{self.port}")
        assert mockbox.critical.call_count == 0

        QtTest.QTest.keyClick(self.window.multilayers.cbWMS_URL, QtCore.Qt.Key_Backspace)
        QtTest.QTest.keyClick(self.window.multilayers.cbWMS_URL, QtCore.Qt.Key_Backspace)
        QtWidgets.QApplication.processEvents()
        QtTest.QTest.mouseClick(self.window.multilayers.btGetCapabilities, QtCore.Qt.LeftButton)
        QtWidgets.QApplication.processEvents()
        wait_until_signal(self.window.cpdlg.canceled)
        assert mockbox.critical.call_count == 1
        assert self.view.draw_image.call_count == 0
        assert self.view.draw_legend.call_count == 0
        assert self.view.draw_metadata.call_count == 0
        mockbox.reset_mock()
        QtTest.QTest.keyClick(self.window.multilayers.cbWMS_URL, ord(str(self.port)[3]))
        QtTest.QTest.keyClick(self.window.multilayers.cbWMS_URL, QtCore.Qt.Key_Slash)
        QtWidgets.QApplication.processEvents()
        QtTest.QTest.mouseClick(self.window.multilayers.btGetCapabilities, QtCore.Qt.LeftButton)
        QtWidgets.QApplication.processEvents()
        wait_until_signal(self.window.cpdlg.canceled)
        assert mockbox.critical.call_count == 0

        QtTest.QTest.mouseClick(self.window.btGetMap, QtCore.Qt.LeftButton)
        QtWidgets.QApplication.processEvents()
        wait_until_signal(self.window.image_displayed)

        assert mockbox.critical.call_count == 0
        assert self.view.draw_image.call_count == 1
        assert self.view.draw_legend.call_count == 1
        assert self.view.draw_metadata.call_count == 1