refactor(admin): remove geoserver config

This commit is contained in:
2026-06-12 15:28:14 +08:00
parent a6e7a2e75c
commit d99f4cec6a
14 changed files with 14 additions and 420 deletions
@@ -15,7 +15,6 @@ from app.domain.schemas.admin_metadata import (
MetadataUserSyncRequest,
MetadataUserUpdateRequest,
ProjectDatabaseUpsertRequest,
ProjectGeoServerConfigUpsertRequest,
ProjectMemberCreateRequest,
ProjectMemberUpdateRequest,
)
@@ -75,22 +74,6 @@ def _database_config(**overrides):
return SimpleNamespace(**data)
def _geoserver_config(**overrides):
data = {
"id": uuid4(),
"project_id": uuid4(),
"gs_base_url": "http://geoserver",
"gs_admin_user": "admin",
"gs_admin_password_encrypted": "encrypted-password",
"gs_datastore_name": "ds_postgis",
"default_extent": {"bbox": [1, 2, 3, 4]},
"srid": 4326,
"updated_at": datetime(2026, 1, 1, tzinfo=timezone.utc),
}
data.update(overrides)
return SimpleNamespace(**data)
def test_to_async_sqlalchemy_url_preserves_password():
url = admin_metadata._to_async_sqlalchemy_url(
"postgresql://tjwater:secret@192.168.1.114:5433/tjwater"
@@ -429,58 +412,6 @@ async def test_project_database_health_sanitizes_password_failures(monkeypatch):
assert "psycopg" not in response.detail
@pytest.mark.anyio
async def test_upsert_geoserver_config_hides_password_and_audits_without_plaintext(monkeypatch):
project_id = uuid4()
record = _geoserver_config(project_id=project_id)
repo = SimpleNamespace(
session=object(),
get_project_by_id=AsyncMock(return_value=_project(id=project_id)),
upsert_geoserver_config=AsyncMock(return_value=record),
)
monkeypatch.setattr(admin_metadata, "log_audit_event", AsyncMock())
response = await admin_metadata.upsert_project_geoserver_config(
ProjectGeoServerConfigUpsertRequest(
gs_base_url="http://geoserver",
gs_admin_user="admin",
gs_admin_password="secret-password",
gs_datastore_name="ds_postgis",
default_extent={"bbox": [1, 2, 3, 4]},
srid=4326,
),
project_id=project_id,
current_user=_user(role="admin", is_superuser=True),
metadata_repo=repo,
)
assert response.has_password is True
assert "password" not in response.model_dump()
request_data = admin_metadata.log_audit_event.await_args.kwargs["request_data"]
assert request_data["password_updated"] is True
assert "secret-password" not in str(request_data)
@pytest.mark.anyio
async def test_get_geoserver_config_returns_empty_state_when_unconfigured():
project_id = uuid4()
repo = SimpleNamespace(
get_project_by_id=AsyncMock(return_value=_project(id=project_id)),
get_geoserver_config_record=AsyncMock(return_value=None),
)
response = await admin_metadata.get_project_geoserver_config(
project_id=project_id,
current_user=_user(role="admin", is_superuser=True),
metadata_repo=repo,
)
assert response.project_id == project_id
assert response.configured is False
assert response.has_password is False
assert response.gs_datastore_name == "ds_postgis"
@pytest.mark.anyio
async def test_metadata_admin_dependency_rejects_non_admin_user():
with pytest.raises(HTTPException) as exc:
-5
View File
@@ -36,7 +36,6 @@ def test_meta_project_returns_map_extent(monkeypatch):
project_id = uuid4()
repo = SimpleNamespace(
get_project_by_id=lambda _project_id: None,
get_geoserver_config=lambda _project_id: None,
)
async def get_project_by_id(_project_id):
@@ -50,11 +49,7 @@ def test_meta_project_returns_map_extent(monkeypatch):
status="active",
)
async def get_geoserver_config(_project_id):
return None
repo.get_project_by_id = get_project_by_id
repo.get_geoserver_config = get_geoserver_config
app = build_test_app(module.router, "/api/v1")
app.dependency_overrides[module.get_project_context] = lambda: SimpleNamespace(
+3 -9
View File
@@ -84,7 +84,7 @@ def test_project_info_returns_404_when_missing(monkeypatch):
assert response.json()["detail"] == "Project missing not found"
def test_project_info_returns_geoserver_payload(monkeypatch):
def test_project_info_returns_project_workspace(monkeypatch):
module = _load_project_module(monkeypatch)
detail = SimpleNamespace(
project_id=uuid4(),
@@ -94,13 +94,6 @@ def test_project_info_returns_geoserver_payload(monkeypatch):
gs_workspace="ws",
map_extent={"xmin": 1, "ymin": 2, "xmax": 3, "ymax": 4},
status="active",
geoserver=SimpleNamespace(
gs_base_url="http://gs",
gs_admin_user="admin",
gs_datastore_name="store",
default_extent={"xmin": 1, "ymin": 2, "xmax": 3, "ymax": 4},
srid=4326,
),
)
repo = SimpleNamespace(get_project_detail_by_code=AsyncMock(return_value=detail))
app = build_test_app(module.router, "/api/v1")
@@ -112,7 +105,8 @@ def test_project_info_returns_geoserver_payload(monkeypatch):
assert response.status_code == 200
payload = response.json()
assert payload["code"] == "demo"
assert payload["geoserver"]["gs_base_url"] == "http://gs"
assert payload["gs_workspace"] == "ws"
assert "geoserver" not in payload
def test_open_project_returns_network_even_when_db_connection_fails(monkeypatch):