Skip to content

Commit e63baa1

Browse files
committed
migrate to unittest
1 parent 5e14faa commit e63baa1

15 files changed

+550
-423
lines changed

.github/workflows/test.yml

+32-20
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,47 @@
1-
name: Test
1+
name: Test plugin
22

33
on:
44
pull_request:
5-
branches: [main]
6-
workflow_dispatch:
5+
branches:
6+
- main
7+
8+
env:
9+
# plugin name/directory where the code for the plugin is stored
10+
PLUGIN_NAME: GTFS-GO
11+
# python notation to test running inside plugin
12+
TESTS_RUN_FUNCTION: test_suite.test_package
13+
# Docker settings
14+
DOCKER_IMAGE: qgis/qgis
715

816
jobs:
9-
Test:
17+
Test-plugin-felt:
1018
runs-on: ubuntu-latest
19+
1120
strategy:
1221
matrix:
13-
qgis_image_tag: [release-3_28]
14-
env:
15-
OS: ubuntu
16-
QGIS_IMAGE_TAG: ${{ matrix.qgis_image_tag }}
17-
steps:
18-
- uses: actions/checkout@v3
22+
docker_tags: [release-3_28]
1923

20-
- name: Pull QGIS
21-
run: docker pull qgis/qgis:${{ matrix.qgis_image_tag }}
24+
steps:
25+
- name: Checkout
26+
uses: actions/checkout@v2
2227

2328
- name: Export requirements.txt
2429
run: |
2530
pip3 install poetry
26-
poetry export --with dev -f requirements.txt -o requirements.txt
31+
poetry export --with dev --without pyqt5 -f requirements.txt -o requirements.txt
2732
28-
- name: Run tests
29-
run: docker run --rm --net=host --volume .:/app -w=/app -e QGIS_PLUGIN_IN_CI=1 qgis/qgis:${{ matrix.qgis_image_tag }} sh -c "pip3 install -r /app/requirements.txt && xvfb-run -s '+extension GLX -screen 0 1024x768x24' pytest -v --cov --cov-report=xml --cov-report=term"
33+
- name: Docker pull and create qgis-testing-environment
34+
run: |
35+
docker pull "$DOCKER_IMAGE":${{ matrix.docker_tags }}
36+
docker run -d --name qgis-testing-environment -v "$GITHUB_WORKSPACE":/tests_directory -e DISPLAY=:99 "$DOCKER_IMAGE":${{ matrix.docker_tags }}
37+
38+
- name: Docker set up QGIS
39+
run: |
40+
docker exec qgis-testing-environment sh -c "qgis_setup.sh $PLUGIN_NAME"
41+
docker exec qgis-testing-environment sh -c "rm -f /root/.local/share/QGIS/QGIS3/profiles/default/python/plugins/$PLUGIN_NAME"
42+
docker exec qgis-testing-environment sh -c "ln -s /tests_directory/$PLUGIN_NAME /root/.local/share/QGIS/QGIS3/profiles/default/python/plugins/$PLUGIN_NAME"
43+
docker exec qgis-testing-environment sh -c "pip3 install -r requirements.txt"
3044
31-
- name: Upload coverage reports to Codecov
32-
uses: codecov/[email protected]
33-
with:
34-
token: ${{ secrets.CODECOV_TOKEN }}
35-
slug: MIERUNE/GTFS-GO
45+
- name: Docker run plugin tests
46+
run: |
47+
docker exec qgis-testing-environment sh -c "qgis_testrunner.sh $TESTS_RUN_FUNCTION"

poetry.lock

+1-263
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pyproject.toml

-5
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,8 @@ python = "^3.9"
1010

1111

1212
[tool.poetry.group.dev.dependencies]
13-
pytest = "^7.2.1"
1413
ruff = "^0.4.3"
15-
pytest-qt = "^4.4.0"
16-
pytest-cov = "^5.0.0"
1714
pandas = "^2.2.2"
18-
pytest-mock = "^3.14.0"
19-
pytest-qgis = "^2.0.0"
2015

2116

2217
[build-system]

test_suite.py

+85
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
"""
2+
Test Suite.
3+
"""
4+
5+
import os
6+
import sys
7+
import tempfile
8+
import unittest
9+
10+
from osgeo import gdal
11+
from qgis.core import Qgis
12+
13+
try:
14+
from pip import main as pipmain
15+
except ImportError:
16+
from pip._internal import main as pipmain
17+
18+
try:
19+
import coverage
20+
except ImportError:
21+
pipmain(["install", "coverage"])
22+
import coverage
23+
24+
__author__ = "Alessandro Pasotti"
25+
__revision__ = "$Format:%H$"
26+
__date__ = "30/04/2018"
27+
__copyright__ = "Copyright 2018, North Road"
28+
29+
30+
def _run_tests(test_suite, package_name, with_coverage=False):
31+
"""Core function to test a test suite."""
32+
count = test_suite.countTestCases()
33+
print("########")
34+
print("%s tests has been discovered in %s" % (count, package_name))
35+
print("Python GDAL : %s" % gdal.VersionInfo("VERSION_NUM"))
36+
print("QGIS version : {}".format(Qgis.version()))
37+
print("########")
38+
if with_coverage:
39+
cov = coverage.Coverage(
40+
source=["/processing_r"],
41+
omit=["*/test/*"],
42+
)
43+
cov.start()
44+
45+
unittest.TextTestRunner(verbosity=3, stream=sys.stdout).run(test_suite)
46+
47+
if with_coverage:
48+
cov.stop()
49+
cov.save()
50+
51+
with tempfile.NamedTemporaryFile(delete=False) as report:
52+
cov.report(file=report)
53+
# Produce HTML reports in the `htmlcov` folder and open index.html
54+
# cov.html_report()
55+
report.close()
56+
57+
with open(report.name, "r", encoding="utf8") as fin:
58+
print(fin.read())
59+
60+
61+
def test_package(package="felt"):
62+
"""Test package.
63+
This function is called by travis without arguments.
64+
65+
:param package: The package to test.
66+
:type package: str
67+
"""
68+
test_loader = unittest.defaultTestLoader
69+
try:
70+
test_suite = test_loader.discover(package)
71+
except ImportError:
72+
test_suite = unittest.TestSuite()
73+
_run_tests(test_suite, package)
74+
75+
76+
def test_environment():
77+
"""Test package with an environment variable."""
78+
package = os.environ.get("TESTING_PACKAGE", "felt")
79+
test_loader = unittest.defaultTestLoader
80+
test_suite = test_loader.discover(package)
81+
_run_tests(test_suite, package)
82+
83+
84+
if __name__ == "__main__":
85+
test_package()

tests/conftest.py

-22
This file was deleted.

0 commit comments

Comments
 (0)