from pathlib import Path import pytest from app.adapters.storage.webdav import WebDAVStorageAdapter @pytest.mark.anyio async def test_webdav_adapter_supports_check_upload_download_and_exists( tmp_path: Path, fake_webdav: dict[str, object], ) -> None: adapter = WebDAVStorageAdapter( { "endpoint_url": fake_webdav["endpoint_url"], "username": fake_webdav["username"], "password": fake_webdav["password"], "root_path": "iron", } ) check_result = await adapter.check() assert check_result["status"] == "healthy" assert check_result["detail"] == "iron" source = tmp_path / "sample.txt" source.write_text("openlist-webdav", encoding="utf-8") put_result = await adapter.put_file(str(source), "blobs/ab/sample.txt") assert put_result["storage_key"] == "blobs/ab/sample.txt" assert await adapter.object_exists("blobs/ab/sample.txt") is True assert await adapter.object_exists("blobs/ab/missing.txt") is False target = tmp_path / "downloaded.txt" result_path = await adapter.download_file("blobs/ab/sample.txt", target) assert result_path.read_text(encoding="utf-8") == "openlist-webdav" @pytest.mark.anyio async def test_backend_route_can_check_webdav(api_client, fake_webdav: dict[str, object]) -> None: create_response = await api_client.post( "/api/backends", json={ "name": "openlist-main", "type": "webdav", "stability_class": "stable", "read_priority": 65, "write_priority": 65, "config": { "endpoint_url": fake_webdav["endpoint_url"], "username": fake_webdav["username"], "password": fake_webdav["password"], "root_path": "iron", }, }, ) assert create_response.status_code == 200 backend_id = create_response.json()["backend"]["id"] check_response = await api_client.post(f"/api/backends/{backend_id}/check") assert check_response.status_code == 200 assert check_response.json()["status"] == "healthy" assert check_response.json()["detail"] == "iron"