Files
strukto-ai--mirage/python/tests/core/onedrive/test_structural.py
T
wehub-resource-sync bcbd1bdb22
Integ / changes (push) Has been skipped
Pre-commit / pre-commit (push) Failing after 1s
CLI exit codes / changes (push) Has been skipped
Test (Install) / changes (push) Has been skipped
Test (Python) / changes (push) Has been skipped
Test (TypeScript) / changes (push) Has been skipped
CLI exit codes / cli-gate (push) Has been cancelled
Test (Install) / test-install-gate (push) Has been cancelled
Integ / integ-gate (push) Has been cancelled
Test (Python) / test-python-gate (push) Has been cancelled
Test (TypeScript) / test-typescript-gate (push) Has been cancelled
Test (Install) / python-minimal (3.12) (push) Has been cancelled
Test (Install) / python-minimal (3.11) (push) Has been cancelled
Test (Install) / python-extra (agno, mirage.agents.agno) (push) Has been cancelled
Test (Install) / python-extra (chroma, mirage.resource.chroma) (push) Has been cancelled
Test (Install) / python-extra (pdf, mirage.core.filetype.pdf) (push) Has been cancelled
Integ / integ (push) Has been cancelled
Integ / integ-database (push) Has been cancelled
Integ / integ-database-ts (push) Has been cancelled
Integ / integ-data (push) Has been cancelled
Integ / integ-ssh (push) Has been cancelled
Integ / integ-ssh-ts (push) Has been cancelled
Test (Python) / audit (push) Has been cancelled
Test (TypeScript) / test (push) Has been cancelled
Test (TypeScript) / python-fs-shim (push) Has been cancelled
CLI exit codes / Python CLI (push) Has been cancelled
CLI exit codes / TypeScript CLI (push) Has been cancelled
CLI exit codes / Cross-language snapshot interop (push) Has been cancelled
Test (Python) / test (push) Has been cancelled
Test (Python) / import-isolation (deepagents, openai, mirage.agents.openai_agents) (push) Has been cancelled
Test (Python) / import-isolation (deepagents, pydantic-ai, mirage.agents.pydantic_ai) (push) Has been cancelled
Integ / integ-ts (push) Has been cancelled
Integ / integ-fuse (push) Has been cancelled
Test (Install) / python-extra (databricks, mirage.resource.databricks_volume) (push) Has been cancelled
Test (Install) / python-extra (deepagents, mirage.agents.langchain) (push) Has been cancelled
Test (Install) / python-extra (email, mirage.resource.email) (push) Has been cancelled
Test (Install) / python-extra (fuse, mirage.fuse.mount) (push) Has been cancelled
Test (Install) / python-extra (hdf5, mirage.core.filetype.hdf5) (push) Has been cancelled
Test (Install) / python-extra (hf, mirage.resource.hf_buckets) (push) Has been cancelled
Test (Install) / python-extra (lancedb, mirage.resource.lancedb) (push) Has been cancelled
Test (Install) / python-extra (langfuse, mirage.resource.langfuse) (push) Has been cancelled
Test (Install) / python-extra (mongodb, mirage.resource.mongodb) (push) Has been cancelled
Test (Install) / python-extra (nextcloud, mirage.resource.nextcloud) (push) Has been cancelled
Test (Install) / python-extra (openai, mirage.agents.openai_agents) (push) Has been cancelled
Test (Install) / python-extra (openhands, mirage.agents.openhands, 3.12) (push) Has been cancelled
Test (Install) / python-extra (parquet, mirage.core.filetype.parquet) (push) Has been cancelled
Test (Install) / python-extra (postgres, mirage.resource.postgres) (push) Has been cancelled
Test (Install) / python-extra (pydantic-ai, mirage.agents.pydantic_ai) (push) Has been cancelled
Test (Install) / python-extra (qdrant, mirage.resource.qdrant) (push) Has been cancelled
Test (Install) / python-extra (redis, mirage.resource.redis) (push) Has been cancelled
Test (Install) / python-extra (s3, mirage.resource.s3) (push) Has been cancelled
Test (Install) / python-extra (ssh, mirage.resource.ssh) (push) Has been cancelled
Test (Install) / ts-minimal (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:30:44 +08:00

107 lines
3.3 KiB
Python

import pytest
from aioresponses import CallbackResult, aioresponses
from mirage.accessor.onedrive import OneDriveAccessor, OneDriveConfig
from mirage.core.onedrive.create import create
from mirage.core.onedrive.exists import exists
from mirage.core.onedrive.mkdir import mkdir
from mirage.core.onedrive.rename import rename
from mirage.core.onedrive.rm import rm_r
from mirage.core.onedrive.rmdir import rmdir
from mirage.core.onedrive.unlink import unlink
from mirage.types import PathSpec
def _accessor(**kw) -> OneDriveAccessor:
return OneDriveAccessor(OneDriveConfig(access_token="tok", **kw))
_BASE = "https://graph.microsoft.com/v1.0/me/drive"
@pytest.mark.asyncio
async def test_mkdir_posts_folder_to_parent_children():
body = {}
def _cb(url, **kwargs):
body.update(kwargs.get("json") or {})
return CallbackResult(status=201, payload={"id": "F"})
with aioresponses() as m:
m.post(_BASE + "/root:/a:/children", callback=_cb)
await mkdir(_accessor(), PathSpec.from_str_path("/a/b"))
assert body["name"] == "b"
assert "folder" in body
@pytest.mark.asyncio
async def test_create_puts_empty_content():
captured = {}
def _cb(url, **kwargs):
captured["body"] = kwargs.get("data")
return CallbackResult(status=201, payload={"id": "X"})
with aioresponses() as m:
m.put(_BASE + "/root:/a.txt:/content", callback=_cb)
await create(_accessor(), PathSpec.from_str_path("/a.txt"))
assert captured["body"] in (b"", None)
@pytest.mark.asyncio
async def test_unlink_deletes_item():
with aioresponses() as m:
m.delete(_BASE + "/root:/a.txt", status=204)
await unlink(_accessor(), PathSpec.from_str_path("/a.txt"))
@pytest.mark.asyncio
async def test_rmdir_deletes_folder():
with aioresponses() as m:
m.delete(_BASE + "/root:/docs", status=204)
await rmdir(_accessor(), PathSpec.from_str_path("/docs"))
@pytest.mark.asyncio
async def test_rm_r_deletes_tree():
with aioresponses() as m:
m.delete(_BASE + "/root:/docs", status=204)
await rm_r(_accessor(), PathSpec.from_str_path("/docs"))
@pytest.mark.asyncio
async def test_rename_patches_name():
body = {}
def _cb(url, **kwargs):
body.update(kwargs.get("json") or {})
return CallbackResult(status=200, payload={"id": "X", "name": "b.txt"})
with aioresponses() as m:
m.patch(_BASE + "/root:/a.txt", callback=_cb)
await rename(_accessor(), PathSpec.from_str_path("/a.txt"),
PathSpec.from_str_path("/b.txt"))
assert body["name"] == "b.txt"
@pytest.mark.asyncio
async def test_exists_true_and_false():
with aioresponses() as m:
m.get(_BASE + "/root:/a.txt",
payload={
"id": "X",
"name": "a.txt",
"file": {}
})
assert await exists(_accessor(),
PathSpec.from_str_path("/a.txt")) is True
with aioresponses() as m:
m.get(_BASE + "/root:/missing.txt",
status=404,
payload={"error": {
"code": "itemNotFound",
"message": "no"
}})
assert await exists(_accessor(),
PathSpec.from_str_path("/missing.txt")) is False