1
0
forked from erp-dev/erp

feat: tencent tiia upload image support

This commit is contained in:
2026-01-16 19:57:57 +08:00
parent c73014f69c
commit ea28d7a4cf
5 changed files with 296 additions and 0 deletions

View File

@@ -0,0 +1,54 @@
from unittest.mock import patch
from django.test import TestCase
from basic_info import models as basic_models
from printing import models as printing_models
class TencentTiiaPlateOrderUploadTestCase(TestCase):
def setUp(self):
self.merchant = basic_models.Merchant.objects.create(
name='测试商户',
type=basic_models.MerchantTypeEnum.FACTORY,
)
# PlateOrder.customer 必填
self.customer = basic_models.Customer.objects.create(
merchant=self.merchant,
name='客户A',
mobile='13900000000',
area='A',
)
@patch('api_v1.utils.tencentcloud_tiia.upload_image_url_to_tencent_tiia')
def test_upload_plate_order_images_to_tencent_tiia_uploads_all_urls(self, mocked_upload):
mocked_upload.side_effect = lambda **kwargs: {'mocked': True, 'kwargs': kwargs}
po = printing_models.PlateOrder.objects.create(
merchant=self.merchant,
customer=self.customer,
plate_image=[
{'url': 'https://example.com/a.png'},
{'path': 'uploads/2026/01/16/b.png'}, # 将由 build_public_media_url 归一化
'https://example.com/c.png',
{'imageUrl': 'https://example.com/d.png'},
],
)
from api_v1.utils.tencentcloud_tiia import upload_plate_order_images_to_tencent_tiia
results = upload_plate_order_images_to_tencent_tiia(plate_order_id=po.id)
# 至少应尝试上传 3 张绝对 URLexample.com: a/c/d
# uploads/... 会被转为基于 settings.QINIU_BUCKET_DOMAIN 的绝对/相对形式,这里不强耦合其结果,
# 只要 uploader 被调用次数 >= 3 即可。
self.assertGreaterEqual(mocked_upload.call_count, 3)
# entity_id 必须为 plate_order_id
for call in mocked_upload.call_args_list:
self.assertEqual(call.kwargs.get('entity_id'), str(po.id))
# 返回结构必须包含 ok/image_url 字段
self.assertIsInstance(results, list)
self.assertTrue(all(('ok' in r and 'image_url' in r) for r in results))