mirror of
https://github.com/qgis/QGIS.git
synced 2025-10-21 00:07:33 -04:00
148 lines
4.2 KiB
Python
148 lines
4.2 KiB
Python
"""QGIS Unit tests for Grass Algorithm with postgreraster provider
|
|
|
|
.. note:: This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 2 of the License, or
|
|
(at your option) any later version.
|
|
"""
|
|
|
|
__author__ = "Jan Caha"
|
|
__date__ = "01/08/2025"
|
|
__copyright__ = "Copyright 2025, The QGIS Project"
|
|
|
|
|
|
import os
|
|
import tempfile
|
|
from shutil import rmtree
|
|
|
|
import unittest
|
|
from qgis.testing import start_app, QgisTestCase
|
|
from qgis.core import (
|
|
QgsApplication,
|
|
QgsRasterLayer,
|
|
QgsDataSourceUri,
|
|
QgsAuthMethodConfig,
|
|
QgsProcessingContext,
|
|
QgsProcessingFeedback,
|
|
)
|
|
from qgis import processing
|
|
from grassprovider.grass_provider import GrassProvider
|
|
from grassprovider.grass_utils import GrassUtils
|
|
|
|
QGIS_AUTH_DB_DIR_PATH = tempfile.mkdtemp()
|
|
os.environ["QGIS_AUTH_DB_DIR_PATH"] = QGIS_AUTH_DB_DIR_PATH
|
|
|
|
start_app()
|
|
|
|
|
|
class TestProcessingGrassAlgsPostgreRasterProvider(QgisTestCase):
|
|
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
super().setUpClass()
|
|
cls.provider = GrassProvider()
|
|
QgsApplication.processingRegistry().addProvider(cls.provider)
|
|
cls.cleanup_paths = []
|
|
|
|
assert GrassUtils.installedVersion()
|
|
|
|
@classmethod
|
|
def tearDownClass(cls):
|
|
"""Run after all tests"""
|
|
rmtree(QGIS_AUTH_DB_DIR_PATH)
|
|
del os.environ["QGIS_AUTH_DB_DIR_PATH"]
|
|
super().tearDownClass()
|
|
|
|
def test_algorithm_r_buffer(self):
|
|
"""
|
|
Test grass algorithm r.buffer with postgreraster provider
|
|
"""
|
|
|
|
context = QgsProcessingContext()
|
|
feedback = QgsProcessingFeedback()
|
|
|
|
rl = QgsRasterLayer(
|
|
"dbname='mydb' host=localhost port=5432 user='asdf' password='42'"
|
|
" sslmode=disable table=some_table schema=some_schema column=rast sql=pk = 2",
|
|
"pg_layer",
|
|
"postgresraster",
|
|
)
|
|
|
|
alg = QgsApplication.processingRegistry().algorithmById("grass:r.buffer")
|
|
|
|
self.assertTrue(alg)
|
|
|
|
params = {
|
|
"input": rl,
|
|
"distances": "100,200,500",
|
|
"units": 0,
|
|
"-z": False,
|
|
"output": "TEMPORARY_OUTPUT",
|
|
"GRASS_REGION_PARAMETER": None,
|
|
"GRASS_REGION_CELLSIZE_PARAMETER": 0,
|
|
"GRASS_RASTER_FORMAT_OPT": "",
|
|
"GRASS_RASTER_FORMAT_META": "",
|
|
}
|
|
|
|
can_run, _ = alg.checkParameterValues(parameters=params, context=context)
|
|
|
|
self.assertTrue(can_run)
|
|
|
|
res = alg.run(params, context, feedback)
|
|
|
|
# should be tuple
|
|
self.assertTrue(res)
|
|
# should be true if algorithm run successfully
|
|
self.assertTrue(res[1])
|
|
# should be dict with output keys
|
|
self.assertTrue(isinstance(res[0], dict))
|
|
# should be path to result file
|
|
self.assertTrue(isinstance(res[0]["output"], str))
|
|
|
|
def test_algorithm_r_info(self):
|
|
"""
|
|
Test grass algorithm r.info with postgreraster provider
|
|
"""
|
|
|
|
context = QgsProcessingContext()
|
|
feedback = QgsProcessingFeedback()
|
|
|
|
rl = QgsRasterLayer(
|
|
"dbname='mydb' host=localhost port=5432 user='asdf' password='42'"
|
|
" sslmode=disable table=some_table schema=some_schema column=rast sql=pk = 2",
|
|
"pg_layer",
|
|
"postgresraster",
|
|
)
|
|
|
|
alg = QgsApplication.processingRegistry().algorithmById("grass:r.info")
|
|
|
|
params = {
|
|
"map": rl,
|
|
"-r": False,
|
|
"-g": False,
|
|
"-h": False,
|
|
"-e": False,
|
|
"html": "./report.html",
|
|
"GRASS_REGION_PARAMETER": None,
|
|
"GRASS_REGION_CELLSIZE_PARAMETER": 0,
|
|
}
|
|
|
|
can_run, _ = alg.checkParameterValues(parameters=params, context=context)
|
|
|
|
self.assertTrue(can_run)
|
|
|
|
res = alg.run(params, context, feedback)
|
|
|
|
# should be tuple
|
|
self.assertTrue(res)
|
|
# should be true if algorithm run successfully
|
|
self.assertTrue(res[1])
|
|
# should be dict with output keys
|
|
self.assertTrue(isinstance(res[0], dict))
|
|
# should be path to result file
|
|
self.assertTrue(isinstance(res[0]["html"], str))
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|