- apps/solutions: SolutionIndexPage/SolutionPage (mirrors products/cases) - apps/home: HomePage.subpage_types now includes products/solutions/cases index pages (previously only blog, blocking admin page creation) - pytest.ini + conftest.py (root_page/home_page fixtures) - unit tests for core (SEOablePage, FormBlock API repr), products, cases, forms (lead submit API)
63 lines
2.2 KiB
Python
63 lines
2.2 KiB
Python
"""apps.core 基础单元测试:SEOablePage 抽象基类字段与公共 Block。"""
|
|
import pytest
|
|
|
|
from apps.core.blocks import FormBlock
|
|
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}
|