Files
blackroad-operating-system/backend/tests/test_vscode_router.py
2025-11-16 06:41:33 -06:00

73 lines
2.2 KiB
Python

"""Tests for VS Code integration endpoints"""
from datetime import datetime, timezone
from typing import Optional
import pytest
from httpx import AsyncClient
from sqlalchemy.ext.asyncio import AsyncSession
from app.models import File
async def _create_file(db: AsyncSession, user_id: int, name: str, file_type: Optional[str]) -> File:
"""Helper to create a file record for tests."""
now = datetime.now(timezone.utc)
file = File(
user_id=user_id,
name=name,
original_name=name,
path=f"/workspace/{name}",
file_type=file_type,
extension=name.split(".")[-1],
size=128,
storage_key=f"storage/{name}",
storage_url=None,
checksum="checksum",
created_at=now,
updated_at=now,
)
db.add(file)
await db.commit()
await db.refresh(file)
return file
@pytest.mark.asyncio
async def test_list_code_files_handles_mime_types(
client: AsyncClient,
auth_headers: dict,
db_session: AsyncSession,
test_user: dict,
):
"""Ensure /files endpoint returns data even when file_type is missing."""
await _create_file(db_session, test_user["id"], "script.py", "text/x-python")
await _create_file(db_session, test_user["id"], "README", None)
response = await client.get("/api/vscode/files", headers=auth_headers)
assert response.status_code == 200
payload = response.json()
assert payload["total"] == 2
mime_values = {file_info["mime_type"] for file_info in payload["files"]}
assert "text/x-python" in mime_values
assert None in mime_values
@pytest.mark.asyncio
async def test_get_file_content_returns_metadata(
client: AsyncClient,
auth_headers: dict,
db_session: AsyncSession,
test_user: dict,
):
"""Ensure the file content endpoint responds with metadata."""
file = await _create_file(db_session, test_user["id"], "main.py", "text/x-python")
response = await client.get(f"/api/vscode/files/{file.id}/content", headers=auth_headers)
assert response.status_code == 200
payload = response.json()
assert payload["id"] == file.id
assert payload["metadata"]["mime_type"] == "text/x-python"
assert payload["metadata"]["size"] == 128