From 93dda1f7061c65aa8d655c3ce2c9b9d1470d2908 Mon Sep 17 00:00:00 2001 From: KatKatKateryna Date: Mon, 29 Jan 2024 04:01:02 +0000 Subject: [PATCH] tests --- tests/__init__.py | 1 + .../{features_tests => converter}/__init__.py | 0 .../features_tests}/__init__.py | 0 .../test_feature_conversions.py | 0 .../features_tests/test_feature_utils.py | 5 + .../geometry_tests}/__init__.py | 0 .../geometry_tests/conftest.py | 0 .../geometry_tests/test_conversions.py | 8 ++ .../geometry_tests/test_mesh_mixed.py} | 2 + .../geometry_tests/test_point_mixed.py | 3 + .../geometry_tests/test_polygon copy.py | 8 ++ .../converter/geometry_tests/test_polygon.py | 8 ++ .../geometry_tests/test_polyline copy.py | 17 +++ .../converter/geometry_tests/test_polyline.py | 17 +++ .../geometry_tests/test_transform.py | 1 + .../geometry_tests/test_utils_mixed.py} | 0 .../unit/converter/layer_tests}/__init__.py | 0 .../layer_tests/test_layer_conversions.py | 0 .../converter/layer_tests/test_layer_init.py | 9 ++ .../layer_tests/test_layer_symbology.py | 0 .../layer_tests/test_layer_utils.py | 0 tests/unit/features_tests/conftest.py | 28 ---- .../unit/features_tests/test_feature_utils.py | 27 ---- .../__init__.py} | 0 tests/unit/plugin_utils/helpers.py | 11 ++ tests/unit/plugin_utils/object_utils.py | 8 ++ .../__init__.py} | 0 tests/unit/ui_widgets/test_dockwidget.py | 7 + .../unit/ui_widgets/test_transform_widget.py | 7 + .../test_polyline.py => utils/__init__.py} | 0 tests/unit/utils/test_panel_logging,py | 13 ++ tests/unit/utils/test_proj_vars.py | 17 +++ tests/unit/utils/test_utils.py | 6 + tests/unit/utils/test_validation.py | 8 ++ tests_qgis/__init__.py | 4 + .../unit/converter/__init__.py | 0 .../test_feature_conversions_qgis.py | 8 ++ .../feature_tests/test_feature_utils_qgis.py | 129 ++++++++++++++++++ .../unit/converter/geometry_tests/__init__.py | 0 .../unit/converter/geometry_tests/conftest.py | 127 +++++++++++++++++ .../geometry_tests/test_conversions_qgis.py | 92 +++++++++++++ .../geometry_tests/test_mesh_mixed.py | 51 +++++++ .../geometry_tests/test_point_mixed.py | 41 ++++++ .../geometry_tests/test_polygon_qgis.py | 8 ++ .../geometry_tests/test_polyline_qgis.py | 17 +++ .../geometry_tests/test_transform.py | 27 ++++ .../geometry_tests/test_utils_mixed.py | 36 +++++ .../unit/converter/layer_tests/__init__.py | 0 .../test_layer_conversions_qgis.py | 17 +++ .../layer_tests/test_layer_init_qgis.py | 9 ++ .../layer_tests/test_layer_symbology_qgis.py | 10 ++ .../layer_tests/test_layer_utils_qgis.py | 25 ++++ .../unit/geometry_tests/test_point_mixed.py | 13 -- 53 files changed, 757 insertions(+), 68 deletions(-) rename tests/unit/{features_tests => converter}/__init__.py (100%) rename tests/unit/{geometry_tests => converter/features_tests}/__init__.py (100%) rename tests/unit/{ => converter}/features_tests/test_feature_conversions.py (100%) create mode 100644 tests/unit/converter/features_tests/test_feature_utils.py rename tests/unit/{layer_tests => converter/geometry_tests}/__init__.py (100%) rename tests/unit/{ => converter}/geometry_tests/conftest.py (100%) create mode 100644 tests/unit/converter/geometry_tests/test_conversions.py rename tests/unit/{geometry_tests/test_mesh_default.py => converter/geometry_tests/test_mesh_mixed.py} (98%) rename tests/unit/{ => converter}/geometry_tests/test_point_mixed.py (80%) create mode 100644 tests/unit/converter/geometry_tests/test_polygon copy.py create mode 100644 tests/unit/converter/geometry_tests/test_polygon.py create mode 100644 tests/unit/converter/geometry_tests/test_polyline copy.py create mode 100644 tests/unit/converter/geometry_tests/test_polyline.py create mode 100644 tests/unit/converter/geometry_tests/test_transform.py rename tests/unit/{geometry_tests/test_utils.py => converter/geometry_tests/test_utils_mixed.py} (100%) rename {tests_qgis/unit/geometry_tests => tests/unit/converter/layer_tests}/__init__.py (100%) rename tests/unit/{ => converter}/layer_tests/test_layer_conversions.py (100%) create mode 100644 tests/unit/converter/layer_tests/test_layer_init.py rename tests/unit/{ => converter}/layer_tests/test_layer_symbology.py (100%) rename tests/unit/{ => converter}/layer_tests/test_layer_utils.py (100%) delete mode 100644 tests/unit/features_tests/conftest.py delete mode 100644 tests/unit/features_tests/test_feature_utils.py rename tests/unit/{geometry_tests/test_conversions.py => plugin_utils/__init__.py} (100%) create mode 100644 tests/unit/plugin_utils/helpers.py create mode 100644 tests/unit/plugin_utils/object_utils.py rename tests/unit/{geometry_tests/test_polygon.py => ui_widgets/__init__.py} (100%) create mode 100644 tests/unit/ui_widgets/test_dockwidget.py create mode 100644 tests/unit/ui_widgets/test_transform_widget.py rename tests/unit/{geometry_tests/test_polyline.py => utils/__init__.py} (100%) create mode 100644 tests/unit/utils/test_panel_logging,py create mode 100644 tests/unit/utils/test_proj_vars.py create mode 100644 tests/unit/utils/test_utils.py create mode 100644 tests/unit/utils/test_validation.py rename tests/unit/geometry_tests/test_transform.py => tests_qgis/unit/converter/__init__.py (100%) create mode 100644 tests_qgis/unit/converter/feature_tests/test_feature_conversions_qgis.py create mode 100644 tests_qgis/unit/converter/feature_tests/test_feature_utils_qgis.py create mode 100644 tests_qgis/unit/converter/geometry_tests/__init__.py create mode 100644 tests_qgis/unit/converter/geometry_tests/conftest.py create mode 100644 tests_qgis/unit/converter/geometry_tests/test_conversions_qgis.py create mode 100644 tests_qgis/unit/converter/geometry_tests/test_mesh_mixed.py create mode 100644 tests_qgis/unit/converter/geometry_tests/test_point_mixed.py create mode 100644 tests_qgis/unit/converter/geometry_tests/test_polygon_qgis.py create mode 100644 tests_qgis/unit/converter/geometry_tests/test_polyline_qgis.py create mode 100644 tests_qgis/unit/converter/geometry_tests/test_transform.py create mode 100644 tests_qgis/unit/converter/geometry_tests/test_utils_mixed.py create mode 100644 tests_qgis/unit/converter/layer_tests/__init__.py create mode 100644 tests_qgis/unit/converter/layer_tests/test_layer_conversions_qgis.py create mode 100644 tests_qgis/unit/converter/layer_tests/test_layer_init_qgis.py create mode 100644 tests_qgis/unit/converter/layer_tests/test_layer_symbology_qgis.py create mode 100644 tests_qgis/unit/converter/layer_tests/test_layer_utils_qgis.py delete mode 100644 tests_qgis/unit/geometry_tests/test_point_mixed.py diff --git a/tests/__init__.py b/tests/__init__.py index 3ced6e78..43b51f5e 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -1,4 +1,5 @@ import sys +#sys.path.append(r"C:\Users\katri\AppData\Roaming\Speckle\connector_installations\QGIS") sys.path.append(r"C:\OSGeo4W\apps\qgis\python") sys.path.insert(0,r"C:\Users\katri\AppData\Roaming\Speckle\connector_installations\QGIS") diff --git a/tests/unit/features_tests/__init__.py b/tests/unit/converter/__init__.py similarity index 100% rename from tests/unit/features_tests/__init__.py rename to tests/unit/converter/__init__.py diff --git a/tests/unit/geometry_tests/__init__.py b/tests/unit/converter/features_tests/__init__.py similarity index 100% rename from tests/unit/geometry_tests/__init__.py rename to tests/unit/converter/features_tests/__init__.py diff --git a/tests/unit/features_tests/test_feature_conversions.py b/tests/unit/converter/features_tests/test_feature_conversions.py similarity index 100% rename from tests/unit/features_tests/test_feature_conversions.py rename to tests/unit/converter/features_tests/test_feature_conversions.py diff --git a/tests/unit/converter/features_tests/test_feature_utils.py b/tests/unit/converter/features_tests/test_feature_utils.py new file mode 100644 index 00000000..08451cb7 --- /dev/null +++ b/tests/unit/converter/features_tests/test_feature_utils.py @@ -0,0 +1,5 @@ +from speckle.converter.features.utils import ( + addFeatVariant, + updateFeat, + getPolygonFeatureHeight, +) diff --git a/tests/unit/layer_tests/__init__.py b/tests/unit/converter/geometry_tests/__init__.py similarity index 100% rename from tests/unit/layer_tests/__init__.py rename to tests/unit/converter/geometry_tests/__init__.py diff --git a/tests/unit/geometry_tests/conftest.py b/tests/unit/converter/geometry_tests/conftest.py similarity index 100% rename from tests/unit/geometry_tests/conftest.py rename to tests/unit/converter/geometry_tests/conftest.py diff --git a/tests/unit/converter/geometry_tests/test_conversions.py b/tests/unit/converter/geometry_tests/test_conversions.py new file mode 100644 index 00000000..6d0b5c3b --- /dev/null +++ b/tests/unit/converter/geometry_tests/test_conversions.py @@ -0,0 +1,8 @@ +from speckle.converter.geometry.conversions import ( + convertToSpeckle, + convertToNative, + multiPointToNative, + multiPolylineToNative, + multiPolygonToNative, + convertToNativeMulti, +) diff --git a/tests/unit/geometry_tests/test_mesh_default.py b/tests/unit/converter/geometry_tests/test_mesh_mixed.py similarity index 98% rename from tests/unit/geometry_tests/test_mesh_default.py rename to tests/unit/converter/geometry_tests/test_mesh_mixed.py index 9ab5590f..e109ac2e 100644 --- a/tests/unit/geometry_tests/test_mesh_default.py +++ b/tests/unit/converter/geometry_tests/test_mesh_mixed.py @@ -5,6 +5,8 @@ fill_mesh_parts, constructMeshFromRaster, constructMesh, + meshPartsFromPolygon, + meshToNative, ) from typing import Tuple import pathlib diff --git a/tests/unit/geometry_tests/test_point_mixed.py b/tests/unit/converter/geometry_tests/test_point_mixed.py similarity index 80% rename from tests/unit/geometry_tests/test_point_mixed.py rename to tests/unit/converter/geometry_tests/test_point_mixed.py index e5478986..899c8859 100644 --- a/tests/unit/geometry_tests/test_point_mixed.py +++ b/tests/unit/converter/geometry_tests/test_point_mixed.py @@ -1,5 +1,8 @@ from speckle.converter.geometry.point import ( scalePointToNative, + pointToSpeckle, + pointToNative, + pointToNativeWithoutTransforms, ) from specklepy.objects.geometry import Point diff --git a/tests/unit/converter/geometry_tests/test_polygon copy.py b/tests/unit/converter/geometry_tests/test_polygon copy.py new file mode 100644 index 00000000..8ea8bda9 --- /dev/null +++ b/tests/unit/converter/geometry_tests/test_polygon copy.py @@ -0,0 +1,8 @@ +from speckle.converter.geometry.polygon import ( + polygonToSpeckleMesh, + getZaxisTranslation, + isFlat, + polygonToSpeckle, + polygonToNative, + getPolyBoundaryVoids, +) diff --git a/tests/unit/converter/geometry_tests/test_polygon.py b/tests/unit/converter/geometry_tests/test_polygon.py new file mode 100644 index 00000000..8ea8bda9 --- /dev/null +++ b/tests/unit/converter/geometry_tests/test_polygon.py @@ -0,0 +1,8 @@ +from speckle.converter.geometry.polygon import ( + polygonToSpeckleMesh, + getZaxisTranslation, + isFlat, + polygonToSpeckle, + polygonToNative, + getPolyBoundaryVoids, +) diff --git a/tests/unit/converter/geometry_tests/test_polyline copy.py b/tests/unit/converter/geometry_tests/test_polyline copy.py new file mode 100644 index 00000000..7f19f87e --- /dev/null +++ b/tests/unit/converter/geometry_tests/test_polyline copy.py @@ -0,0 +1,17 @@ +from speckle.converter.geometry.polyline import ( + polylineFromVerticesToSpeckle, + unknownLineToSpeckle, + compoudCurveToSpeckle, + anyLineToSpeckle, + polylineToSpeckle, + arcToSpeckle, + getArcCenter, + lineToNative, + polylineToNative, + ellipseToNative, + curveToNative, + arcToNative, + circleToNative, + polycurveToNative, + speckleEllipseToPoints, +) diff --git a/tests/unit/converter/geometry_tests/test_polyline.py b/tests/unit/converter/geometry_tests/test_polyline.py new file mode 100644 index 00000000..7f19f87e --- /dev/null +++ b/tests/unit/converter/geometry_tests/test_polyline.py @@ -0,0 +1,17 @@ +from speckle.converter.geometry.polyline import ( + polylineFromVerticesToSpeckle, + unknownLineToSpeckle, + compoudCurveToSpeckle, + anyLineToSpeckle, + polylineToSpeckle, + arcToSpeckle, + getArcCenter, + lineToNative, + polylineToNative, + ellipseToNative, + curveToNative, + arcToNative, + circleToNative, + polycurveToNative, + speckleEllipseToPoints, +) diff --git a/tests/unit/converter/geometry_tests/test_transform.py b/tests/unit/converter/geometry_tests/test_transform.py new file mode 100644 index 00000000..14f3bece --- /dev/null +++ b/tests/unit/converter/geometry_tests/test_transform.py @@ -0,0 +1 @@ +from speckle.converter.geometry.transform import transform diff --git a/tests/unit/geometry_tests/test_utils.py b/tests/unit/converter/geometry_tests/test_utils_mixed.py similarity index 100% rename from tests/unit/geometry_tests/test_utils.py rename to tests/unit/converter/geometry_tests/test_utils_mixed.py diff --git a/tests_qgis/unit/geometry_tests/__init__.py b/tests/unit/converter/layer_tests/__init__.py similarity index 100% rename from tests_qgis/unit/geometry_tests/__init__.py rename to tests/unit/converter/layer_tests/__init__.py diff --git a/tests/unit/layer_tests/test_layer_conversions.py b/tests/unit/converter/layer_tests/test_layer_conversions.py similarity index 100% rename from tests/unit/layer_tests/test_layer_conversions.py rename to tests/unit/converter/layer_tests/test_layer_conversions.py diff --git a/tests/unit/converter/layer_tests/test_layer_init.py b/tests/unit/converter/layer_tests/test_layer_init.py new file mode 100644 index 00000000..1effd4a8 --- /dev/null +++ b/tests/unit/converter/layer_tests/test_layer_init.py @@ -0,0 +1,9 @@ +from speckle.converter.layers import ( + getAllLayers, + getAllLayersWithTree, + findAndClearLayerGroup, + getSavedLayers, + getSelectedLayers, + getSelectedLayersWithStructure, + getTreeFromLayers, +) diff --git a/tests/unit/layer_tests/test_layer_symbology.py b/tests/unit/converter/layer_tests/test_layer_symbology.py similarity index 100% rename from tests/unit/layer_tests/test_layer_symbology.py rename to tests/unit/converter/layer_tests/test_layer_symbology.py diff --git a/tests/unit/layer_tests/test_layer_utils.py b/tests/unit/converter/layer_tests/test_layer_utils.py similarity index 100% rename from tests/unit/layer_tests/test_layer_utils.py rename to tests/unit/converter/layer_tests/test_layer_utils.py diff --git a/tests/unit/features_tests/conftest.py b/tests/unit/features_tests/conftest.py deleted file mode 100644 index a86f1495..00000000 --- a/tests/unit/features_tests/conftest.py +++ /dev/null @@ -1,28 +0,0 @@ -import math -from typing import Union -import pytest -from specklepy_qt_ui.qt_ui.DataStorage import DataStorage - -from specklepy.objects.encoding import CurveTypeEncoding -from specklepy.objects.geometry import Arc, Line, Mesh, Point, Plane, Polycurve, Vector -from qgis._core import ( - QgsCoordinateTransform, - Qgis, - QgsPointXY, - QgsGeometry, - QgsRasterBandStats, - QgsFeature, - QgsFields, - QgsField, - QgsVectorLayer, - QgsRasterLayer, - QgsCoordinateReferenceSystem, - QgsProject, - QgsUnitTypes, -) - -@pytest.fixture() -def qgis_feature(): - sample_obj = QgsFeature() - return sample_obj - diff --git a/tests/unit/features_tests/test_feature_utils.py b/tests/unit/features_tests/test_feature_utils.py deleted file mode 100644 index d8690aac..00000000 --- a/tests/unit/features_tests/test_feature_utils.py +++ /dev/null @@ -1,27 +0,0 @@ -from speckle.converter.features.utils import ( - addFeatVariant, - updateFeat, - getPolygonFeatureHeight, -) -from qgis._core import ( - QgsCoordinateTransform, - Qgis, - QgsPointXY, - QgsGeometry, - QgsRasterBandStats, - QgsFeature, - QgsFields, - QgsField, - QgsVectorLayer, - QgsRasterLayer, - QgsCoordinateReferenceSystem, - QgsProject, - QgsUnitTypes, -) -def test_addFeatVariant(qgis_feature): - key = "some key" - variant = 10 # string - value = "value to add" - result = addFeatVariant(key, variant, value, qgis_feature) - assert isinstance(result, QgsFeature) - \ No newline at end of file diff --git a/tests/unit/geometry_tests/test_conversions.py b/tests/unit/plugin_utils/__init__.py similarity index 100% rename from tests/unit/geometry_tests/test_conversions.py rename to tests/unit/plugin_utils/__init__.py diff --git a/tests/unit/plugin_utils/helpers.py b/tests/unit/plugin_utils/helpers.py new file mode 100644 index 00000000..ef7e4418 --- /dev/null +++ b/tests/unit/plugin_utils/helpers.py @@ -0,0 +1,11 @@ +from plugin_utils.helpers import ( + get_scale_factor, + get_scale_factor_to_meter, + jsonFromList, + constructCommitURL, + getAppName, + findOrCreatePath, + removeSpecialCharacters, + splitTextIntoLines, + findFeatColors, +) diff --git a/tests/unit/plugin_utils/object_utils.py b/tests/unit/plugin_utils/object_utils.py new file mode 100644 index 00000000..9c8b0158 --- /dev/null +++ b/tests/unit/plugin_utils/object_utils.py @@ -0,0 +1,8 @@ +from plugin_utils.object_utils import ( + traverseObject, + traverseValue, + callback, + getBaseValidName, + loopObj, + loopVal, +) diff --git a/tests/unit/geometry_tests/test_polygon.py b/tests/unit/ui_widgets/__init__.py similarity index 100% rename from tests/unit/geometry_tests/test_polygon.py rename to tests/unit/ui_widgets/__init__.py diff --git a/tests/unit/ui_widgets/test_dockwidget.py b/tests/unit/ui_widgets/test_dockwidget.py new file mode 100644 index 00000000..72c9bc0f --- /dev/null +++ b/tests/unit/ui_widgets/test_dockwidget.py @@ -0,0 +1,7 @@ +from speckle.ui_widgets.dockwidget_main import SpeckleQGISDialog + + +def test_create_widget(): + # widget = SpeckleQGISDialog() + # widget.createMappingDialog() + assert True diff --git a/tests/unit/ui_widgets/test_transform_widget.py b/tests/unit/ui_widgets/test_transform_widget.py new file mode 100644 index 00000000..1d1675b6 --- /dev/null +++ b/tests/unit/ui_widgets/test_transform_widget.py @@ -0,0 +1,7 @@ +from speckle.ui_widgets.widget_transforms import MappingSendDialogQGIS + + +def test_create_widget(): + # widget = MappingSendDialogQGIS() + # widget.runSetup() + assert True diff --git a/tests/unit/geometry_tests/test_polyline.py b/tests/unit/utils/__init__.py similarity index 100% rename from tests/unit/geometry_tests/test_polyline.py rename to tests/unit/utils/__init__.py diff --git a/tests/unit/utils/test_panel_logging,py b/tests/unit/utils/test_panel_logging,py new file mode 100644 index 00000000..302e9ffd --- /dev/null +++ b/tests/unit/utils/test_panel_logging,py @@ -0,0 +1,13 @@ +from speckle.utils.panel_logging import logToUser, Logging + + +def test_logToUser(): + msg = "" + func = None + level = 1 + plugin = None + url = "" + blue = False + report = False + # logToUser(msg, func, level, plugin, url, blue, report) + assert False diff --git a/tests/unit/utils/test_proj_vars.py b/tests/unit/utils/test_proj_vars.py new file mode 100644 index 00000000..f61f92ca --- /dev/null +++ b/tests/unit/utils/test_proj_vars.py @@ -0,0 +1,17 @@ +from speckle.utils.project_vars import ( + get_project_streams, + set_project_streams, + get_project_saved_layers, + set_project_layer_selection, + get_rotation, + set_rotation, + get_survey_point, + set_survey_point, + get_crs_offsets, + set_crs_offsets, + get_transformations, + set_transformations, + get_elevationLayer, + set_elevationLayer, + setProjectReferenceSystem, +) diff --git a/tests/unit/utils/test_utils.py b/tests/unit/utils/test_utils.py new file mode 100644 index 00000000..ec726f72 --- /dev/null +++ b/tests/unit/utils/test_utils.py @@ -0,0 +1,6 @@ +from speckle.utils.utils import get_qgis_python_path + + +def test_get_qgis_python_path(): + result = get_qgis_python_path() + assert isinstance(result, str) diff --git a/tests/unit/utils/test_validation.py b/tests/unit/utils/test_validation.py new file mode 100644 index 00000000..27863908 --- /dev/null +++ b/tests/unit/utils/test_validation.py @@ -0,0 +1,8 @@ +from speckle.utils.validation import ( + tryGetClient, + tryGetStream, + validateStream, + validateBranch, + validateCommit, + validateTransport, +) diff --git a/tests_qgis/__init__.py b/tests_qgis/__init__.py index e69de29b..fe607ad5 100644 --- a/tests_qgis/__init__.py +++ b/tests_qgis/__init__.py @@ -0,0 +1,4 @@ +import sys + +sys.path.insert(0,r"C:\OSGeo4W\apps\qgis\python") +sys.path.insert(0,r"C:\Users\katri\AppData\Roaming\Speckle\connector_installations\QGIS") diff --git a/tests/unit/geometry_tests/test_transform.py b/tests_qgis/unit/converter/__init__.py similarity index 100% rename from tests/unit/geometry_tests/test_transform.py rename to tests_qgis/unit/converter/__init__.py diff --git a/tests_qgis/unit/converter/feature_tests/test_feature_conversions_qgis.py b/tests_qgis/unit/converter/feature_tests/test_feature_conversions_qgis.py new file mode 100644 index 00000000..20686e8a --- /dev/null +++ b/tests_qgis/unit/converter/feature_tests/test_feature_conversions_qgis.py @@ -0,0 +1,8 @@ +from speckle.converter.features.feature_conversions import ( + featureToSpeckle, + rasterFeatureToSpeckle, + featureToNative, + bimFeatureToNative, + nonGeomFeatureToNative, + cadFeatureToNative, +) diff --git a/tests_qgis/unit/converter/feature_tests/test_feature_utils_qgis.py b/tests_qgis/unit/converter/feature_tests/test_feature_utils_qgis.py new file mode 100644 index 00000000..73e6e694 --- /dev/null +++ b/tests_qgis/unit/converter/feature_tests/test_feature_utils_qgis.py @@ -0,0 +1,129 @@ +import pytest +from speckle.converter.features.utils import ( + addFeatVariant, + updateFeat, + getPolygonFeatureHeight, +) + +from specklepy.objects import Base +from specklepy_qt_ui.qt_ui.DataStorage import DataStorage + +try: + from qgis._core import ( + QgsCoordinateTransform, + Qgis, + QgsPointXY, + QgsGeometry, + QgsRasterBandStats, + QgsFeature, + QgsFields, + QgsField, + QgsVectorLayer, + QgsRasterLayer, + QgsCoordinateReferenceSystem, + QgsProject, + QgsUnitTypes, + ) +except ModuleNotFoundError: + pass + + +@pytest.fixture() +def data_storage(): + sample_obj = DataStorage() + sample_obj.project = QgsProject.instance() + return sample_obj + + +def test_addFeatVariant(): + key = "some key" + variant = 10 # string + value = "value to add" + feature = QgsFeature() + result = addFeatVariant(key, variant, value, feature) + assert isinstance(result, QgsFeature) + + +def test_updateFeat(): + feat = QgsFeature() + fields = QgsFields() + fields.append(QgsField("attr1", 4)) + fields.append(QgsField("attr2", 10)) + fields.append(QgsField("attr3_attr31", 4)) + fields.append(QgsField("attr3_attr32", 4)) + feat.setFields(fields) + + base = Base() + base.attr1 = 1 + base.attr2 = "xx" + base.attr3 = Base() + base.attr3.attr31 = 222 + base.attr3.attr32 = 333 + + result = updateFeat(feat, fields, base) + assert isinstance(result, QgsFeature) + assert result["attr1"] == 1 + + +def test_getPolygonFeatureHeight(data_storage): + feat = QgsFeature() + fields = QgsFields() + fields.append(QgsField("height_m", 4)) + feat.setFields(fields) + feat["height_m"] = 10 + + geomType = "Polygon" + layer_name = "layer1" + layer = QgsVectorLayer(geomType + "?crs=" + "WGS84", layer_name, "memory") + # layer.setCrs(QgsCoordinateReferenceSystem(32630)) + + data_storage.project.setCrs(QgsCoordinateReferenceSystem(32630)) + data_storage.savedTransforms = [] + data_storage.savedTransforms.append( + layer_name + " ('height_m') -> Extrude polygon by selected attribute" + ) + result = getPolygonFeatureHeight(feat, layer, data_storage) + assert result == 10 + + +def test_getPolygonFeatureHeight_geo_crs(data_storage): + feat = QgsFeature() + fields = QgsFields() + fields.append(QgsField("height_m", 4)) + feat.setFields(fields) + feat["height_m"] = 10 + + geomType = "Polygon" + layer_name = "layer1" + layer = QgsVectorLayer(geomType + "?crs=" + "WGS84", layer_name, "memory") + + data_storage.project.setCrs(QgsCoordinateReferenceSystem(4326)) + data_storage.savedTransforms = [] + data_storage.savedTransforms.append( + layer_name + " ('height_m') -> Extrude polygon by selected attribute" + ) + result = getPolygonFeatureHeight(feat, layer, data_storage) + assert result is None + + +def test_getPolygonFeatureHeight_ignore(data_storage): + feat = QgsFeature() + fields = QgsFields() + fields.append(QgsField("height_m", 4)) + feat.setFields(fields) + feat["height_m"] = 10 + + geomType = "Polygon" + layer_name = "layer1" + layer = QgsVectorLayer(geomType + "?crs=" + "WGS84", layer_name, "memory") + # layer.setCrs(QgsCoordinateReferenceSystem(32630)) + + data_storage.project.setCrs(QgsCoordinateReferenceSystem(32630)) + data_storage.savedTransforms = [] + data_storage.savedTransforms.append( + layer_name + + " ('floors') -> Extrude polygon by selected attribute (randomly populate)" + ) + result = getPolygonFeatureHeight(feat, layer, data_storage) + assert isinstance(result, int) + assert 10 <= result <= 20 diff --git a/tests_qgis/unit/converter/geometry_tests/__init__.py b/tests_qgis/unit/converter/geometry_tests/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests_qgis/unit/converter/geometry_tests/conftest.py b/tests_qgis/unit/converter/geometry_tests/conftest.py new file mode 100644 index 00000000..bc4cbe0a --- /dev/null +++ b/tests_qgis/unit/converter/geometry_tests/conftest.py @@ -0,0 +1,127 @@ +import math +from typing import Union +import pytest +from specklepy_qt_ui.qt_ui.DataStorage import DataStorage + +from specklepy.objects.encoding import CurveTypeEncoding +from specklepy.objects.geometry import ( + Arc, + Line, + Polyline, + Mesh, + Point, + Plane, + Polycurve, + Vector, +) +from specklepy.objects.GIS.geometry import GisPolygonGeometry + +try: + from qgis.core import ( + QgsPoint, + QgsLineString, + QgsPolygon, + QgsProject, + ) +except ModuleNotFoundError: + pass + + +@pytest.fixture() +def data_storage(): + sample_obj = DataStorage() + sample_obj.project = QgsProject.instance() + return sample_obj + + +@pytest.fixture() +def qgis_polygon(): + geom = QgsPolygon() + linestring = QgsLineString() + linestring.addVertex(QgsPoint(4, 4, 0)) + linestring.addVertex(QgsPoint(-4, 4, 0)) + linestring.addVertex(QgsPoint(-4, -4, 0)) + linestring.addVertex(QgsPoint(4, -4, 0)) + + geom.setExteriorRing(linestring) + return geom + + +@pytest.fixture() +def polyline(): + polyline = Polyline() + polyline.value = [] + polyline.closed = True + polyline.units = "m" + polyline.value.extend([4, 4, 0]) + polyline.value.extend([-4, 4, 0]) + polyline.value.extend([-4, -4, 0]) + polyline.value.extend([4, -4, 0]) + return polyline + + +@pytest.fixture() +def polygon(): + polyline = Polyline() + polyline.value = [] + polyline.closed = True + polyline.units = "m" + polyline.value.extend([4, 4, 0]) + polyline.value.extend([-4, 4, 0]) + polyline.value.extend([-4, -4, 0]) + polyline.value.extend([4, -4, 0]) + + polyline2 = Polyline() + polyline2.value = [] + polyline2.closed = True + polyline2.units = "m" + polyline2.value.extend([4, 4, 0]) + polyline2.value.extend([-4, 4, 0]) + polyline2.value.extend([-4, -4, 0]) + polyline2.value.extend([4, -4, 0]) + + geom = GisPolygonGeometry() + geom.boundary = polyline + geom.voids = [polyline2] + geom.displayValue = [] + return geom + + +@pytest.fixture() +def arc(): + arc = Arc() + arc.startPoint = Point.from_list([-5, 0, 0]) + arc.midPoint = Point.from_list([0, 5, 0]) + arc.endPoint = Point.from_list([5, 0, 0]) + arc.plane = Plane() + arc.plane.origin = Point.from_list([-5, 0, 0]) + arc.units = "m" + arc.plane.normal = Vector.from_list([0, 0, 1]) + arc.plane.origin.units = "m" + arc.radius = 5 + arc.angleRadians = math.pi + return arc + + +@pytest.fixture() +def polycurve(): + poly = Polycurve() + segm1 = Line.from_list( + [CurveTypeEncoding.Line.value, -10, 0, 0, -5, 0, 0, -5, 0, 0, 3] + ) + segm2 = Line.from_list( + [CurveTypeEncoding.Line.value, -5, 0, 0, 0, 0, 0, -5, 0, 0, 3] + ) + # segm2 = Polyline() + # segm3 = Arc() + poly.segments = [segm1, segm2] # , segm3] + return poly + + +@pytest.fixture() +def mesh(): + mesh_obj = Mesh().create( + vertices=[0, 0, 0, 100, 0, 0, 0, 100, 0], faces=[3, 0, 1, 2] + ) + mesh.units = "m" + return mesh_obj diff --git a/tests_qgis/unit/converter/geometry_tests/test_conversions_qgis.py b/tests_qgis/unit/converter/geometry_tests/test_conversions_qgis.py new file mode 100644 index 00000000..9125f98c --- /dev/null +++ b/tests_qgis/unit/converter/geometry_tests/test_conversions_qgis.py @@ -0,0 +1,92 @@ +import pytest + + +from speckle.converter.geometry.conversions import ( + convertToSpeckle, + convertToNative, + multiPointToNative, + multiPolylineToNative, + multiPolygonToNative, + convertToNativeMulti, +) + +from specklepy.objects import Base +from specklepy.objects.GIS.geometry import GisPolygonGeometry + +from specklepy.objects.geometry import ( + Line, + Mesh, + Point, + Polyline, + Curve, + Arc, + Circle, + Ellipse, + Polycurve, +) + +try: + from qgis.core import ( + QgsPoint, + QgsFeature, + QgsLineString, + QgsMultiPoint, + QgsMultiLineString, + QgsMultiPolygon, + QgsPolygon, + QgsVectorLayer, + ) +except ModuleNotFoundError: + pass + + +def test_convertToSpeckle(data_storage): + pt = QgsPoint(0, 0, 0) + feature = QgsFeature() + feature.setGeometry(pt) + + geomType = "Point" + layer_name = "layer1" + + layer = QgsVectorLayer(geomType + "?crs=" + "WGS84", layer_name, "memory") + + result = convertToSpeckle(feature, layer, data_storage) + assert isinstance(result, tuple) + assert isinstance(result[0], Base) + assert isinstance(result[1], int) + + +def test_convertToNative_pt(data_storage): + pt = Point.from_list([0, 4, 0]) + pt.units = "m" + result = convertToNative(pt, data_storage) + assert isinstance(result, QgsPoint) + + +def test_convertToNative_polyline(polyline, data_storage): + result = convertToNative(polyline, data_storage) + assert isinstance(result, QgsLineString) + + +def test_multiPointToNative(data_storage): + pts = [Point.from_list([0, 4, 0]) for i in range(4)] + result = multiPointToNative(pts, data_storage) + assert isinstance(result, QgsMultiPoint) + + +def test_multiPolylineToNative(polyline, data_storage): + polylines = [polyline for i in range(4)] + result = multiPolylineToNative(polylines, data_storage) + assert isinstance(result, QgsMultiLineString) + + +def test_multiPolygonToNative(polygon, data_storage): + polygons = [polygon for i in range(4)] + result = multiPolygonToNative(polygons, data_storage) + assert isinstance(result, QgsMultiPolygon) + + +def test_convertToNativeMulti(polygon, data_storage): + polygons = [polygon for i in range(4)] + result = convertToNativeMulti(polygons, data_storage) + assert isinstance(result, QgsMultiPolygon) diff --git a/tests_qgis/unit/converter/geometry_tests/test_mesh_mixed.py b/tests_qgis/unit/converter/geometry_tests/test_mesh_mixed.py new file mode 100644 index 00000000..6d5cf5f7 --- /dev/null +++ b/tests_qgis/unit/converter/geometry_tests/test_mesh_mixed.py @@ -0,0 +1,51 @@ +from speckle.converter.geometry.mesh import ( + meshPartsFromPolygon, + meshToNative, +) +from typing import Tuple +import pathlib + +import shapefile +from specklepy.objects.geometry import Mesh + +try: + from qgis.core import ( + QgsFeature, + QgsVectorLayer, + QgsMultiPolygon, + ) +except ModuleNotFoundError: + pass + + +def test_meshPartsFromPolygon(polygon, data_storage): + polyBorder = polygon.boundary.as_points() + voidsAsPts = [] + existing_vert = 0 + feature = QgsFeature() + + geomType = "Polygon" + layer = QgsVectorLayer(geomType + "?crs=" + "WGS84", "", "memory") + height = None + result = meshPartsFromPolygon( + polyBorder, + voidsAsPts, + existing_vert, + feature, + polygon, + layer, + height, + data_storage, + ) + assert isinstance(result, Tuple) + assert len(result) == 5 + assert isinstance(result[0], int) + assert isinstance(result[1], list) + assert isinstance(result[2], list) + assert isinstance(result[3], list) + assert isinstance(result[4], int) + + +def test_meshToNative(mesh, data_storage): + result = meshToNative([mesh], data_storage) + assert isinstance(result, QgsMultiPolygon) diff --git a/tests_qgis/unit/converter/geometry_tests/test_point_mixed.py b/tests_qgis/unit/converter/geometry_tests/test_point_mixed.py new file mode 100644 index 00000000..386ff4ff --- /dev/null +++ b/tests_qgis/unit/converter/geometry_tests/test_point_mixed.py @@ -0,0 +1,41 @@ +from speckle.converter.geometry.point import ( + pointToSpeckle, + pointToNative, + pointToNativeWithoutTransforms, +) +from specklepy.objects.geometry import Point + +try: + from qgis.core import ( + QgsPoint, QgsFeature, QgsVectorLayer + ) +except ModuleNotFoundError: + pass + +def test_pointToSpeckle(data_storage): + pt = QgsPoint(0,0,0) + feature = QgsFeature() + feature.setGeometry(pt) + + geomType = "Point" + layer_name = "layer1" + + layer = QgsVectorLayer( + geomType + "?crs=" + "WGS84", layer_name, "memory" + ) + xform = None + result = pointToSpeckle(pt, feature, layer, data_storage, xform) + assert isinstance(result, Point) + + +def test_pointToNative(data_storage): + pt = Point.from_list([0, 4, 0]) + result = pointToNative(pt, data_storage) + assert isinstance(result, QgsPoint) + + +def test_pointToNativeWithoutTransforms(data_storage): + pt = Point.from_list([0, 4, 0]) + result = pointToNativeWithoutTransforms(pt, data_storage) + assert isinstance(result, QgsPoint) + diff --git a/tests_qgis/unit/converter/geometry_tests/test_polygon_qgis.py b/tests_qgis/unit/converter/geometry_tests/test_polygon_qgis.py new file mode 100644 index 00000000..8ea8bda9 --- /dev/null +++ b/tests_qgis/unit/converter/geometry_tests/test_polygon_qgis.py @@ -0,0 +1,8 @@ +from speckle.converter.geometry.polygon import ( + polygonToSpeckleMesh, + getZaxisTranslation, + isFlat, + polygonToSpeckle, + polygonToNative, + getPolyBoundaryVoids, +) diff --git a/tests_qgis/unit/converter/geometry_tests/test_polyline_qgis.py b/tests_qgis/unit/converter/geometry_tests/test_polyline_qgis.py new file mode 100644 index 00000000..7f19f87e --- /dev/null +++ b/tests_qgis/unit/converter/geometry_tests/test_polyline_qgis.py @@ -0,0 +1,17 @@ +from speckle.converter.geometry.polyline import ( + polylineFromVerticesToSpeckle, + unknownLineToSpeckle, + compoudCurveToSpeckle, + anyLineToSpeckle, + polylineToSpeckle, + arcToSpeckle, + getArcCenter, + lineToNative, + polylineToNative, + ellipseToNative, + curveToNative, + arcToNative, + circleToNative, + polycurveToNative, + speckleEllipseToPoints, +) diff --git a/tests_qgis/unit/converter/geometry_tests/test_transform.py b/tests_qgis/unit/converter/geometry_tests/test_transform.py new file mode 100644 index 00000000..5965c02c --- /dev/null +++ b/tests_qgis/unit/converter/geometry_tests/test_transform.py @@ -0,0 +1,27 @@ +import pytest + +from speckle.converter.geometry.transform import transform + +try: + from qgis.core import ( + QgsProject, + QgsCoordinateReferenceSystem, + QgsCoordinateTransform, + QgsPointXY, + QgsProject, + QgsCoordinateReferenceSystem, + QgsCoordinateTransform, + QgsPointXY, + ) +except ModuleNotFoundError: + pass + + +def test_transform(data_storage): + project = data_storage.project + pt = QgsPointXY(0, 0) + crsSrc = QgsCoordinateReferenceSystem(4326) + crsDest = QgsCoordinateReferenceSystem(4326) + result = transform(project, pt, crsSrc, crsDest) + assert isinstance(result, QgsPointXY) + assert result == pt diff --git a/tests_qgis/unit/converter/geometry_tests/test_utils_mixed.py b/tests_qgis/unit/converter/geometry_tests/test_utils_mixed.py new file mode 100644 index 00000000..71786c85 --- /dev/null +++ b/tests_qgis/unit/converter/geometry_tests/test_utils_mixed.py @@ -0,0 +1,36 @@ +import pytest + + +from speckle.converter.geometry.utils import ( + triangulatePolygon, + getPolyPtsSegments, +) + +try: + from qgis.core import ( + QgsPoint, + QgsLineString, + QgsPolygon, + ) +except ModuleNotFoundError: + pass + + +def test_triangulatePolygon(qgis_polygon, data_storage): + result = triangulatePolygon(qgis_polygon, data_storage) + assert isinstance(result, tuple) + assert len(result) == 3 + assert isinstance(result[0], dict) + assert isinstance(result[1], list) + assert isinstance(result[2], int) + + +def test_getPolyPtsSegments(qgis_polygon, data_storage): + result = getPolyPtsSegments(qgis_polygon, data_storage) + assert isinstance(result, tuple) + assert len(result) == 4 + assert isinstance(result[0], list) + assert isinstance(result[1], list) + assert isinstance(result[2], list) + assert isinstance(result[3], list) + assert len(result[3]) == 0 diff --git a/tests_qgis/unit/converter/layer_tests/__init__.py b/tests_qgis/unit/converter/layer_tests/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests_qgis/unit/converter/layer_tests/test_layer_conversions_qgis.py b/tests_qgis/unit/converter/layer_tests/test_layer_conversions_qgis.py new file mode 100644 index 00000000..0c360981 --- /dev/null +++ b/tests_qgis/unit/converter/layer_tests/test_layer_conversions_qgis.py @@ -0,0 +1,17 @@ +from speckle.converter.layers.layer_conversions import ( + convertSelectedLayersToSpeckle, + layerToSpeckle, + layerToNative, + nonGeometryLayerToNative, + addExcelMainThread, + addNonGeometryMainThread, + geometryLayerToNative, + bimVectorLayerToNative, + addBimMainThread, + cadVectorLayerToNative, + addCadMainThread, + vectorLayerToNative, + addVectorMainThread, + rasterLayerToNative, + addRasterMainThread, +) diff --git a/tests_qgis/unit/converter/layer_tests/test_layer_init_qgis.py b/tests_qgis/unit/converter/layer_tests/test_layer_init_qgis.py new file mode 100644 index 00000000..1effd4a8 --- /dev/null +++ b/tests_qgis/unit/converter/layer_tests/test_layer_init_qgis.py @@ -0,0 +1,9 @@ +from speckle.converter.layers import ( + getAllLayers, + getAllLayersWithTree, + findAndClearLayerGroup, + getSavedLayers, + getSelectedLayers, + getSelectedLayersWithStructure, + getTreeFromLayers, +) diff --git a/tests_qgis/unit/converter/layer_tests/test_layer_symbology_qgis.py b/tests_qgis/unit/converter/layer_tests/test_layer_symbology_qgis.py new file mode 100644 index 00000000..7362e75e --- /dev/null +++ b/tests_qgis/unit/converter/layer_tests/test_layer_symbology_qgis.py @@ -0,0 +1,10 @@ +from speckle.converter.layers.symbology import ( + featureColorfromNativeRenderer, + gradientColorRampToSpeckle, + gradientColorRampToNative, + get_r_g_b, + vectorRendererToNative, + makeDefaultRenderer, + rasterRendererToNative, + rendererToSpeckle, +) diff --git a/tests_qgis/unit/converter/layer_tests/test_layer_utils_qgis.py b/tests_qgis/unit/converter/layer_tests/test_layer_utils_qgis.py new file mode 100644 index 00000000..f92cd2b8 --- /dev/null +++ b/tests_qgis/unit/converter/layer_tests/test_layer_utils_qgis.py @@ -0,0 +1,25 @@ +from speckle.converter.layers.utils import ( + getLayerGeomType, + getVariantFromValue, + colorFromSpeckle, + getLayerAttributes, + traverseDict, + validateAttributeName, + trySaveCRS, + reprojectPt, + getClosestIndex, + getArrayIndicesFromXY, + getHeightWithRemainderFromArray, + getXYofArrayPoint, + isAppliedLayerTransformByKeywords, + getElevationLayer, + get_raster_stats, + getRasterArrays, + moveVertically, + moveVerticallySegment, + tryCreateGroupTree, + tryCreateGroup, + findUpdateJsonItemPath, + collectionsFromJson, + getDisplayValueList, +) diff --git a/tests_qgis/unit/geometry_tests/test_point_mixed.py b/tests_qgis/unit/geometry_tests/test_point_mixed.py deleted file mode 100644 index 63137476..00000000 --- a/tests_qgis/unit/geometry_tests/test_point_mixed.py +++ /dev/null @@ -1,13 +0,0 @@ -from speckle.converter.geometry.point import ( - pointToSpeckle, - pointToNative, - pointToNativeWithoutTransforms, -) -from specklepy.objects.geometry import Point - - -def test_pointToSpeckle(data_storage): - pt = Point.from_list([0, 4, 0]) - pt.units = "m" - result = pointToSpeckle(pt, pt.units, data_storage) - assert isinstance(result, Point)