生图模型可选(火山/gpt-image)+ 模特上身图提示词强化 + 多会话等改动
本轮(生图模型选择 + 火山接入): - 工作室新增「生图模型」选择器(模特上身图/平台套图头部 chip + 图片创作底部 Pill), 默认火山 Seedream,可切 gpt-image-2;选择写入 localStorage,下次进页面读回 - 后端 resolve_image_model 解析所选模型;enqueue_standalone_images 接 image_model - worker 按模型能力分流:有 image_edit(gpt-image)走多图编辑;无(火山)走 image_generation(image=参考图);新增 _ratio_to_volcano_size 让火山按比例出图 → 内衣等敏感品类用火山可绕开 gpt-image 的 sexual 内容审核 模特上身图提示词: - 穿戴/非穿戴分流、按 index 变化动作场景镜头、负面词尾接、多图参考序号自适应 - _product_reference_urls:商品参考真实上传图优先、排除 AI 生成图、可多张 其他(并入此前各会话未提交改动): - 图片创作多会话(ImageConversation + migration 0019)、任务中心按类型过滤 - accounts/projects/assets/team/auth 等零散调整、相关测试 - 测试脚本(tryon_*.py)、测试清单(core/bug/*.xlsx)
This commit is contained in:
@@ -126,6 +126,65 @@ class InvitationFlowTests(TestCase):
|
||||
self.assertEqual(gen2.status_code, 403)
|
||||
|
||||
|
||||
class MemberQuotaAndRoleTests(TestCase):
|
||||
"""PMC#3:① 新建子账号不填限额时默认 100(不再 0=不限,避免子账号无上限花团队池);
|
||||
② login/me 返回当前用户在团队的 role,前端据此只给主账号(owner)显示「团队」「消费」页。"""
|
||||
|
||||
def _register(self, client, username, **extra):
|
||||
return client.post(
|
||||
"/api/auth/register/",
|
||||
{"username": username, "password": "strong-password", **extra},
|
||||
format="json",
|
||||
)
|
||||
|
||||
def setUp(self):
|
||||
self.owner_client = APIClient()
|
||||
r = self._register(self.owner_client, "q-owner", team_name="Q Team", invite_code=make_create_team_code())
|
||||
self.assertEqual(r.status_code, 201)
|
||||
self.token = r.data["token"]
|
||||
self.team = Team.objects.get(name="Q Team")
|
||||
self.owner_client.credentials(HTTP_AUTHORIZATION=f"Token {self.token}")
|
||||
|
||||
def test_register_owner_payload_role_is_owner(self):
|
||||
# 注册即登录的返回体带 role=owner(主账号)
|
||||
r = self._register(APIClient(), "solo-owner", team_name="Solo", invite_code=make_create_team_code())
|
||||
self.assertEqual(r.data.get("role"), "owner")
|
||||
|
||||
def test_create_member_defaults_limit_100(self):
|
||||
res = self.owner_client.post(
|
||||
"/api/auth/team/members/",
|
||||
{"username": "sub-a", "password": "strong-password", "role": "member"},
|
||||
format="json",
|
||||
)
|
||||
self.assertEqual(res.status_code, 201, res.content)
|
||||
member = TeamMember.objects.get(user__username="sub-a", team=self.team)
|
||||
self.assertEqual(member.monthly_credit_limit, Decimal("100"))
|
||||
|
||||
def test_create_member_explicit_limit_respected(self):
|
||||
res = self.owner_client.post(
|
||||
"/api/auth/team/members/",
|
||||
{"username": "sub-b", "password": "strong-password", "role": "member", "monthly_credit_limit": 800},
|
||||
format="json",
|
||||
)
|
||||
self.assertEqual(res.status_code, 201, res.content)
|
||||
member = TeamMember.objects.get(user__username="sub-b", team=self.team)
|
||||
self.assertEqual(member.monthly_credit_limit, Decimal("800"))
|
||||
|
||||
def test_member_login_returns_member_role(self):
|
||||
self.owner_client.post(
|
||||
"/api/auth/team/members/",
|
||||
{"username": "sub-c", "password": "strong-password", "role": "member"},
|
||||
format="json",
|
||||
)
|
||||
login = APIClient().post(
|
||||
"/api/auth/login/",
|
||||
{"username": "sub-c", "password": "strong-password"},
|
||||
format="json",
|
||||
)
|
||||
self.assertEqual(login.status_code, 200)
|
||||
self.assertEqual(login.data.get("role"), "member")
|
||||
|
||||
|
||||
class PlatformAdminTests(TestCase):
|
||||
"""Phase 0:平台超管基础 —— 管理命令 / 权限类 / 登录 me 返回标志且团队为空。"""
|
||||
|
||||
|
||||
Reference in New Issue
Block a user