"""apps.core 基础单元测试:SEOablePage 抽象基类字段与公共 Block。""" import pytest from apps.core.blocks import FormBlock from apps.core.models import SimpleContentPage from apps.forms.models import FormDefinition, FormDefinitionField pytestmark = pytest.mark.django_db def test_seoable_page_fields_available_on_subclass(home_page): """SEOablePage 是抽象基类,其 SEO 字段应出现在具体子类(HomePage)上。""" home_page.seo_title_override = "自定义标题" home_page.seo_description_override = "自定义描述" home_page.canonical_url = "https://example.com/" home_page.schema_json = {"@type": "Organization"} home_page.save() home_page.refresh_from_db() assert home_page.seo_title_override == "自定义标题" assert home_page.seo_description_override == "自定义描述" assert home_page.canonical_url == "https://example.com/" assert home_page.schema_json == {"@type": "Organization"} def test_form_block_api_representation_expands_fields(): """FormBlock.get_api_representation 应展开 FormDefinition 及其子字段, 而不是仅返回 SnippetChooserBlock 默认的主键。""" form_def = FormDefinition.objects.create( name="联系我们", submit_button_text="立即提交", success_message="已收到您的信息", ) FormDefinitionField.objects.create( form=form_def, label="姓名", field_key="name", field_type="text", required=True, ) FormDefinitionField.objects.create( form=form_def, label="意向", field_key="interest", field_type="select", required=False, choices="产品咨询, 合作洽谈", ) block = FormBlock() result = block.get_api_representation({"form": form_def}) assert result["form"]["id"] == form_def.pk assert result["form"]["name"] == "联系我们" assert result["form"]["submit_button_text"] == "立即提交" assert len(result["form"]["fields"]) == 2 assert result["form"]["fields"][1]["choices"] == ["产品咨询", "合作洽谈"] def test_form_block_api_representation_handles_empty_form(): block = FormBlock() result = block.get_api_representation({"form": None}) assert result == {"form": None} def test_simple_content_page_can_be_created_under_home(home_page): """隐私政策等法务页面应可作为 HomePage 的子页面创建,并保留富文本内容。""" page = SimpleContentPage( title="隐私政策", slug="privacy-policy", body="

我们重视您的个人信息保护。

", ) home_page.add_child(instance=page) page.refresh_from_db() assert SimpleContentPage.objects.live().descendant_of(home_page).count() == 1 assert "个人信息保护" in page.body