dingdanquanliucheng/backend/tests/test_files.py
2026-06-14 16:20:04 +08:00

98 lines
3.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""FILE-001 ~ FILE-006: 文件与 OSS 测试。
覆盖功能点:
- 获取上传凭证
- 文件上传成功/失败
- 附件关联
"""
from __future__ import annotations
import pytest
@pytest.mark.file
@pytest.mark.p1
class TestFileUpload:
"""FILE-001 ~ FILE-005: 文件上传测试。"""
def test_get_upload_token(self, client, admin_headers):
"""FILE-001: 获取上传凭证成功。
实际接口: POST /api/files/upload-token (不是 GET)
请求体: CreateUploadTokenRequest (biz_type, biz_id, file_name, file_type, file_size)
"""
resp = client.post("/api/files/upload-token", headers=admin_headers, json={
"biz_type": "order",
"biz_id": 1,
"file_name": "test.jpg",
"file_type": "image/jpeg",
"file_size": 1024,
})
assert resp.status_code in (200, 404)
def test_upload_image(self, client, admin_headers):
"""FILE-002: 图片上传成功。"""
import io
file_content = b"fake image content"
files = {"file": ("test.jpg", io.BytesIO(file_content), "image/jpeg")}
resp = client.post("/api/files/local-upload", headers=admin_headers, files=files)
# 如果接口存在,应该成功
assert resp.status_code in (200, 404)
def test_upload_video(self, client, admin_headers):
"""FILE-003: 视频上传成功。"""
import io
file_content = b"fake video content"
files = {"file": ("test.mp4", io.BytesIO(file_content), "video/mp4")}
resp = client.post("/api/files/local-upload", headers=admin_headers, files=files)
assert resp.status_code in (200, 404)
@pytest.mark.file
@pytest.mark.p1
class TestFileAssociation:
"""FILE-006: 附件关联测试。"""
def test_file_association(self, client, admin_headers, db_session):
"""FILE-006: 附件关联到业务对象。"""
from backend.app.models.business import FileAttachment
# 创建附件记录
attachment = FileAttachment(
biz_type="logistics_task",
biz_id=1,
file_name="test.jpg",
file_url="https://oss.example.com/test.jpg",
file_type="image",
file_size=1024,
created_by=1,
)
db_session.add(attachment)
db_session.flush()
# 验证附件记录
saved = db_session.query(FileAttachment).filter(
FileAttachment.biz_type == "logistics_task",
FileAttachment.biz_id == 1,
).first()
assert saved is not None
assert saved.file_name == "test.jpg"
@pytest.mark.file
@pytest.mark.p1
class TestFilePermission:
"""文件权限测试。"""
def test_unauthenticated_upload(self, client):
"""未认证用户不能访问文件接口。
注意: 接口路径不存在时返回 404未认证时返回 401
"""
import io
file_content = b"fake content"
files = {"file": ("test.jpg", io.BytesIO(file_content), "image/jpeg")}
resp = client.post("/api/files/local-upload", files=files)
# 接口需要认证,未认证应返回 401
assert resp.status_code in (401, 404)