Spaces:
Configuration error
Configuration error
| import pytest | |
| import os | |
| from aiohttp import web | |
| from app.user_manager import UserManager | |
| from unittest.mock import patch | |
| pytestmark = ( | |
| pytest.mark.asyncio | |
| ) # This applies the asyncio mark to all test functions in the module | |
| def user_manager(tmp_path): | |
| um = UserManager() | |
| um.get_request_user_filepath = lambda req, file, **kwargs: os.path.join( | |
| tmp_path, file | |
| ) | |
| return um | |
| def app(user_manager): | |
| app = web.Application() | |
| routes = web.RouteTableDef() | |
| user_manager.add_routes(routes) | |
| app.add_routes(routes) | |
| return app | |
| async def test_listuserdata_empty_directory(aiohttp_client, app, tmp_path): | |
| client = await aiohttp_client(app) | |
| resp = await client.get("/userdata?dir=test_dir") | |
| assert resp.status == 404 | |
| async def test_listuserdata_with_files(aiohttp_client, app, tmp_path): | |
| os.makedirs(tmp_path / "test_dir") | |
| with open(tmp_path / "test_dir" / "file1.txt", "w") as f: | |
| f.write("test content") | |
| client = await aiohttp_client(app) | |
| resp = await client.get("/userdata?dir=test_dir") | |
| assert resp.status == 200 | |
| assert await resp.json() == ["file1.txt"] | |
| async def test_listuserdata_recursive(aiohttp_client, app, tmp_path): | |
| os.makedirs(tmp_path / "test_dir" / "subdir") | |
| with open(tmp_path / "test_dir" / "file1.txt", "w") as f: | |
| f.write("test content") | |
| with open(tmp_path / "test_dir" / "subdir" / "file2.txt", "w") as f: | |
| f.write("test content") | |
| client = await aiohttp_client(app) | |
| resp = await client.get("/userdata?dir=test_dir&recurse=true") | |
| assert resp.status == 200 | |
| assert set(await resp.json()) == {"file1.txt", "subdir/file2.txt"} | |
| async def test_listuserdata_full_info(aiohttp_client, app, tmp_path): | |
| os.makedirs(tmp_path / "test_dir") | |
| with open(tmp_path / "test_dir" / "file1.txt", "w") as f: | |
| f.write("test content") | |
| client = await aiohttp_client(app) | |
| resp = await client.get("/userdata?dir=test_dir&full_info=true") | |
| assert resp.status == 200 | |
| result = await resp.json() | |
| assert len(result) == 1 | |
| assert result[0]["path"] == "file1.txt" | |
| assert "size" in result[0] | |
| assert "modified" in result[0] | |
| async def test_listuserdata_split_path(aiohttp_client, app, tmp_path): | |
| os.makedirs(tmp_path / "test_dir" / "subdir") | |
| with open(tmp_path / "test_dir" / "subdir" / "file1.txt", "w") as f: | |
| f.write("test content") | |
| client = await aiohttp_client(app) | |
| resp = await client.get("/userdata?dir=test_dir&recurse=true&split=true") | |
| assert resp.status == 200 | |
| assert await resp.json() == [ | |
| ["subdir/file1.txt", "subdir", "file1.txt"] | |
| ] | |
| async def test_listuserdata_invalid_directory(aiohttp_client, app): | |
| client = await aiohttp_client(app) | |
| resp = await client.get("/userdata?dir=") | |
| assert resp.status == 400 | |
| async def test_listuserdata_normalized_separator(aiohttp_client, app, tmp_path): | |
| os_sep = "\\" | |
| with patch("os.sep", os_sep): | |
| with patch("os.path.sep", os_sep): | |
| os.makedirs(tmp_path / "test_dir" / "subdir") | |
| with open(tmp_path / "test_dir" / "subdir" / "file1.txt", "w") as f: | |
| f.write("test content") | |
| client = await aiohttp_client(app) | |
| resp = await client.get("/userdata?dir=test_dir&recurse=true") | |
| assert resp.status == 200 | |
| result = await resp.json() | |
| assert len(result) == 1 | |
| assert "/" in result[0] # Ensure forward slash is used | |
| assert "\\" not in result[0] # Ensure backslash is not present | |
| assert result[0] == "subdir/file1.txt" | |
| # Test with full_info | |
| resp = await client.get( | |
| "/userdata?dir=test_dir&recurse=true&full_info=true" | |
| ) | |
| assert resp.status == 200 | |
| result = await resp.json() | |
| assert len(result) == 1 | |
| assert "/" in result[0]["path"] # Ensure forward slash is used | |
| assert "\\" not in result[0]["path"] # Ensure backslash is not present | |
| assert result[0]["path"] == "subdir/file1.txt" | |