From cc0e3d91d2de4f3ec9351306b2dea89a4e28beb2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9cile=20Vuilleumier?= Date: Thu, 22 Aug 2024 14:17:28 +0200 Subject: [PATCH] Test workspace --- geoservercloud/geoservercloud.py | 2 +- poetry.lock | 22 +++++++++++++- pyproject.toml | 1 + tests/conftest.py | 11 +++++++ tests/test_workspace.py | 52 ++++++++++++++++++++++++++++++++ 5 files changed, 86 insertions(+), 2 deletions(-) create mode 100644 tests/conftest.py create mode 100644 tests/test_workspace.py diff --git a/geoservercloud/geoservercloud.py b/geoservercloud/geoservercloud.py index f7764a6..d5bf328 100644 --- a/geoservercloud/geoservercloud.py +++ b/geoservercloud/geoservercloud.py @@ -333,7 +333,7 @@ def publish_gwc_layer( self.post_request( "/gwc/rest/reload", headers={"Content-Type": "application/json"}, - data="reload_configuration=1", + data="reload_configuration=1", # type: ignore ) payload = Templates.gwc_layer(workspace, layer, f"EPSG:{epsg}") return self.put_request( diff --git a/poetry.lock b/poetry.lock index a682f8c..d1f8619 100644 --- a/poetry.lock +++ b/poetry.lock @@ -500,6 +500,26 @@ urllib3 = ">=1.21.1,<3" socks = ["PySocks (>=1.5.6,!=1.5.7)"] use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] +[[package]] +name = "responses" +version = "0.25.3" +description = "A utility library for mocking out the `requests` Python library." +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "responses-0.25.3-py3-none-any.whl", hash = "sha256:521efcbc82081ab8daa588e08f7e8a64ce79b91c39f6e62199b19159bea7dbcb"}, + {file = "responses-0.25.3.tar.gz", hash = "sha256:617b9247abd9ae28313d57a75880422d55ec63c29d33d629697590a034358dba"}, +] + +[package.dependencies] +pyyaml = "*" +requests = ">=2.30.0,<3.0" +urllib3 = ">=1.25.10,<3.0" + +[package.extras] +tests = ["coverage (>=6.0.0)", "flake8", "mypy", "pytest (>=7.0.0)", "pytest-asyncio", "pytest-cov", "pytest-httpserver", "tomli", "tomli-w", "types-PyYAML", "types-requests"] + [[package]] name = "six" version = "1.16.0" @@ -557,4 +577,4 @@ files = [ [metadata] lock-version = "2.0" python-versions = ">=3.9,<4.0" -content-hash = "23e2455d1da8f608869338e21ce0c5e7d9120fe7df6252027a0ce6a98f3e8043" +content-hash = "127e8d9e5b12ae1b0b9e9e564464ef0a4e12e4aefe778a2fdc7565b059e2262a" diff --git a/pyproject.toml b/pyproject.toml index 2d99415..ad44579 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -15,6 +15,7 @@ xmltodict = "0.13.0" [tool.poetry.group.dev.dependencies] pytest = "8.2.2" +responses = "0.25.3" [build-system] requires = [ diff --git a/tests/conftest.py b/tests/conftest.py new file mode 100644 index 0000000..1d21149 --- /dev/null +++ b/tests/conftest.py @@ -0,0 +1,11 @@ +import pytest + +from geoservercloud import GeoServerCloud + +GEOSERVER_URL = "http://localhost:8080/geoserver" + + +@pytest.fixture(scope="session") +def geoserver(): + geoserver = GeoServerCloud(url=GEOSERVER_URL) + yield geoserver diff --git a/tests/test_workspace.py b/tests/test_workspace.py new file mode 100644 index 0000000..a12b85a --- /dev/null +++ b/tests/test_workspace.py @@ -0,0 +1,52 @@ +import responses +from conftest import GEOSERVER_URL + +from geoservercloud.geoservercloud import GeoServerCloud + + +def test_create_workspace(geoserver: GeoServerCloud) -> None: + workspace = "test_workspace" + + with responses.RequestsMock() as rsps: + rsps.post( + url=f"{GEOSERVER_URL}/rest/workspaces.json", + status=201, + ) + + response = geoserver.create_workspace(workspace) + + assert response.status_code == 201 + + +@responses.activate +def test_update_workspace(geoserver: GeoServerCloud) -> None: + workspace = "test_workspace" + + with responses.RequestsMock() as rsps: + rsps.post( + url=f"{GEOSERVER_URL}/rest/workspaces.json", + status=409, + ) + rsps.put( + url=f"{GEOSERVER_URL}/rest/workspaces/{workspace}.json", + status=200, + ) + + response = geoserver.create_workspace(workspace) + + assert response.status_code == 200 + + +@responses.activate +def test_delete_workspace(geoserver: GeoServerCloud) -> None: + workspace = "test_workspace" + + with responses.RequestsMock() as rsps: + rsps.delete( + url=f"{GEOSERVER_URL}/rest/workspaces/{workspace}.json", + status=200, + ) + + response = geoserver.delete_workspace(workspace) + + assert response.status_code == 200