feat(core): 补全剩余 6 个 StreamField Block (ProductCard/Pricing/Timeline/Team/TechStack/Video)
- apps/core/blocks.py 新增 ProductCardBlock/PricingBlock/TimelineBlock/TeamBlock/TechStackBlock/VideoBlock,COMMON_BLOCKS 扩充至 14 个内容 Block - TeamBlock 新增 TeamMemberChooserBlock(SnippetChooserBlock),复用 FormBlock 已有的 get_api_representation 展开模式,展开 TeamMember 完整字段(含 serialize_image 复用) - 为 blog/cases/home/products/solutions 五个 Page 模型生成并应用 alter field body 迁移(StreamField block 定义变更会写入迁移 state) - apps/core/tests.py 新增 TeamMemberChooserBlock 空值/展开单元测试,pytest 33 个用例全部通过 - 设计文档 §2.6/§2.16 同步更新为已实现
This commit is contained in:
+21
-1
@@ -2,7 +2,7 @@
|
||||
import pytest
|
||||
from rest_framework.test import APIClient
|
||||
|
||||
from apps.core.blocks import FormBlock
|
||||
from apps.core.blocks import FormBlock, TeamMemberChooserBlock
|
||||
from apps.core.models import (
|
||||
NavigationMenu,
|
||||
NavigationMenuItem,
|
||||
@@ -159,6 +159,26 @@ def test_testimonial_api_returns_list():
|
||||
assert response.data["items"][0]["author_name"] == "客户A"
|
||||
|
||||
|
||||
def test_team_member_chooser_block_api_representation_expands_fields():
|
||||
"""TeamMemberChooserBlock.get_api_representation 应展开 TeamMember 的完整字段,
|
||||
而不是仅返回 SnippetChooserBlock 默认的主键。"""
|
||||
member = TeamMember.objects.create(name="王五", role="产品经理", bio="十年行业经验")
|
||||
|
||||
block = TeamMemberChooserBlock()
|
||||
result = block.get_api_representation(member)
|
||||
|
||||
assert result["id"] == member.pk
|
||||
assert result["name"] == "王五"
|
||||
assert result["role"] == "产品经理"
|
||||
assert result["bio"] == "十年行业经验"
|
||||
assert result["photo"] is None
|
||||
|
||||
|
||||
def test_team_member_chooser_block_api_representation_handles_none():
|
||||
block = TeamMemberChooserBlock()
|
||||
assert block.get_api_representation(None) is None
|
||||
|
||||
|
||||
def test_partner_api_returns_list():
|
||||
Partner.objects.create(name="伙伴A", website_url="https://partner-a.example.com")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user