Files
WonderQ-Project/WonderQ-Admin/tests/test_oss_upload.py
2026-08-28 09:52:11 +08:00

59 lines
1.7 KiB
Python

from io import BytesIO
from types import SimpleNamespace
from app.routers import admin as admin_router
class FakeOssResponse:
status = 200
def read(self, _size: int) -> bytes:
return b""
class FakeOssConnection:
instances: list["FakeOssConnection"] = []
def __init__(self, host: str, timeout: int):
self.host = host
self.timeout = timeout
self.request_path: str | None = None
self.__class__.instances.append(self)
def request(self, _method, path, **_kwargs) -> None:
self.request_path = path
def getresponse(self) -> FakeOssResponse:
return FakeOssResponse()
def close(self) -> None:
pass
def test_upload_uses_internal_endpoint_but_returns_public_url(monkeypatch):
FakeOssConnection.instances.clear()
monkeypatch.setattr(
admin_router,
"oss_settings",
lambda: SimpleNamespace(
oss_access_key_id="test-access-key",
oss_access_key_secret="test-access-secret",
oss_endpoint="oss-cn-guangzhou-internal.aliyuncs.com",
oss_public_base_url="https://one-feel-ota-data.oss-cn-guangzhou.aliyuncs.com",
oss_bucket_name="one-feel-ota-data",
),
)
monkeypatch.setattr(admin_router.http.client, "HTTPSConnection", FakeOssConnection)
url = admin_router.upload_image_to_oss(
BytesIO(b"image"),
"admin/general/image.webp",
"image/webp",
5,
)
connection = FakeOssConnection.instances[0]
assert connection.host == "one-feel-ota-data.oss-cn-guangzhou-internal.aliyuncs.com"
assert connection.request_path == "/admin/general/image.webp"
assert url == "https://one-feel-ota-data.oss-cn-guangzhou.aliyuncs.com/admin/general/image.webp"