Fix Files tests: isolated test dir, auto-create and cleanup
Tests create /.mcp-tests/ in oCIS at start, delete at end. No interference with user's real files. Fixed for stefan's actual oCIS account (was using admin before). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
+13
-13
@@ -272,11 +272,19 @@ class TestContacts:
|
|||||||
|
|
||||||
class TestFiles:
|
class TestFiles:
|
||||||
PORT = SERVERS["files"]
|
PORT = SERVERS["files"]
|
||||||
TEST_DIR = "/mcp-tests"
|
TEST_DIR = "/.mcp-tests"
|
||||||
|
|
||||||
|
@pytest.fixture(autouse=True, scope="class")
|
||||||
|
def ensure_test_dir(self):
|
||||||
|
"""Create test dir at start, delete at end. Isolated from real data."""
|
||||||
|
token = get_token(self.PORT)
|
||||||
|
tool_call(self.PORT, token, "create_folder", {"path": self.TEST_DIR})
|
||||||
|
yield
|
||||||
|
tool_call(self.PORT, token, "delete_file", {"path": self.TEST_DIR})
|
||||||
|
|
||||||
def test_list_root(self):
|
def test_list_root(self):
|
||||||
text = tool_call(self.PORT, get_token(self.PORT), "list_files", {"path": "/"})
|
text = tool_call(self.PORT, get_token(self.PORT), "list_files", {"path": "/"})
|
||||||
assert "DIR" in text or "mcp-tests" in text
|
assert "DIR" in text
|
||||||
|
|
||||||
def test_file_info_root(self):
|
def test_file_info_root(self):
|
||||||
text = tool_call(self.PORT, get_token(self.PORT), "file_info", {"path": "/"})
|
text = tool_call(self.PORT, get_token(self.PORT), "file_info", {"path": "/"})
|
||||||
@@ -287,26 +295,21 @@ class TestFiles:
|
|||||||
tag = f"test-{int(time.time())}"
|
tag = f"test-{int(time.time())}"
|
||||||
path = f"{self.TEST_DIR}/{tag}.txt"
|
path = f"{self.TEST_DIR}/{tag}.txt"
|
||||||
|
|
||||||
# Write
|
|
||||||
result = tool_call(self.PORT, token, "write_file", {
|
result = tool_call(self.PORT, token, "write_file", {
|
||||||
"path": path, "content": f"Hello MCP Test {tag}\nZeile 2",
|
"path": path, "content": f"Hello MCP Test {tag}\nZeile 2",
|
||||||
})
|
})
|
||||||
assert "geschrieben" in result.lower() or "written" in result.lower(), f"Write failed: {result}"
|
assert "geschrieben" in result.lower() or "written" in result.lower(), f"Write failed: {result}"
|
||||||
|
|
||||||
# Read
|
|
||||||
read_result = mcp_call(self.PORT, token, "tools/call", {"name": "read_file", "arguments": {"path": path}})
|
read_result = mcp_call(self.PORT, token, "tools/call", {"name": "read_file", "arguments": {"path": path}})
|
||||||
text = read_result["result"]["content"][0]["text"]
|
text = read_result["result"]["content"][0]["text"]
|
||||||
assert tag in text, f"Read mismatch: {text[:100]}"
|
assert tag in text
|
||||||
|
|
||||||
# Info
|
|
||||||
info = tool_call(self.PORT, token, "file_info", {"path": path})
|
info = tool_call(self.PORT, token, "file_info", {"path": path})
|
||||||
assert "bytes" in info.lower()
|
assert "bytes" in info.lower()
|
||||||
|
|
||||||
# Delete
|
|
||||||
del_result = tool_call(self.PORT, token, "delete_file", {"path": path})
|
del_result = tool_call(self.PORT, token, "delete_file", {"path": path})
|
||||||
assert "eloescht" in del_result.lower() or "deleted" in del_result.lower(), f"Delete failed: {del_result}"
|
assert "eloescht" in del_result.lower() or "deleted" in del_result.lower()
|
||||||
|
|
||||||
# Verify gone
|
|
||||||
info2 = tool_call(self.PORT, token, "file_info", {"path": path})
|
info2 = tool_call(self.PORT, token, "file_info", {"path": path})
|
||||||
assert "404" in info2 or "Nicht gefunden" in info2 or "Not found" in info2
|
assert "404" in info2 or "Nicht gefunden" in info2 or "Not found" in info2
|
||||||
|
|
||||||
@@ -321,8 +324,7 @@ class TestFiles:
|
|||||||
listing = tool_call(self.PORT, token, "list_files", {"path": self.TEST_DIR})
|
listing = tool_call(self.PORT, token, "list_files", {"path": self.TEST_DIR})
|
||||||
assert tag in listing
|
assert tag in listing
|
||||||
|
|
||||||
del_result = tool_call(self.PORT, token, "delete_file", {"path": path})
|
tool_call(self.PORT, token, "delete_file", {"path": path})
|
||||||
assert "eloescht" in del_result.lower() or "deleted" in del_result.lower()
|
|
||||||
|
|
||||||
def test_move_file(self):
|
def test_move_file(self):
|
||||||
token = get_token(self.PORT)
|
token = get_token(self.PORT)
|
||||||
@@ -334,11 +336,9 @@ class TestFiles:
|
|||||||
result = tool_call(self.PORT, token, "move_file", {"source": src, "destination": dst})
|
result = tool_call(self.PORT, token, "move_file", {"source": src, "destination": dst})
|
||||||
assert "erschoben" in result.lower() or "moved" in result.lower()
|
assert "erschoben" in result.lower() or "moved" in result.lower()
|
||||||
|
|
||||||
# Source gone, dest exists
|
|
||||||
read = mcp_call(self.PORT, token, "tools/call", {"name": "read_file", "arguments": {"path": dst}})
|
read = mcp_call(self.PORT, token, "tools/call", {"name": "read_file", "arguments": {"path": dst}})
|
||||||
assert "move test" in read["result"]["content"][0]["text"]
|
assert "move test" in read["result"]["content"][0]["text"]
|
||||||
|
|
||||||
# Cleanup
|
|
||||||
tool_call(self.PORT, token, "delete_file", {"path": dst})
|
tool_call(self.PORT, token, "delete_file", {"path": dst})
|
||||||
|
|
||||||
def test_search_files(self):
|
def test_search_files(self):
|
||||||
|
|||||||
Reference in New Issue
Block a user