Files
wagtailcms/apps/blog/tests.py
T
Zhengen 147107501b 补充测试覆盖率 + 新增部署引导命令 bootstrap_deployment
- 新增 apps/blog、apps/solutions、apps/home、apps/api 测试文件,覆盖标签/排序/
  草稿过滤、HomePage.subpage_types 回归测试、page_preview 预览接口
- apps/core/tests.py 新增健康检查端点、发布 webhook 信号、bootstrap_deployment
  命令的测试用例,pytest 用例数从 40 增至 65,全部通过
- 修复 apps/api/urls.py 中 PagePreviewAPIViewSet.get_object() 未捕获
  DoesNotExist 导致 500 而非文档承诺 404 的 bug
- 新增 apps/core/management/commands/bootstrap_deployment.py:部署时按环境变量
  幂等创建首个超级管理员账号并联动初始化 RBAC 权限组,.env.example 补充对应
  环境变量说明
- 新增 OpenSearch + 中文分词本地 PoC 脚手架(docker-compose.opensearch.yml +
  docker/opensearch/Dockerfile),调研结论详见设计文档 §2.10
- 更新设计文档 §2.16 Phase 1 进度清单
2026-08-11 14:47:10 +08:00

86 lines
2.2 KiB
Python

"""apps.blog 单元测试:页面树结构、标签与列表排序。"""
import pytest
from django.utils import timezone
from apps.blog.models import BlogIndexPage, BlogPage
pytestmark = pytest.mark.django_db
@pytest.fixture
def blog_index(home_page):
index = BlogIndexPage(title="博客", slug="blog", intro="技术与行业洞察")
home_page.add_child(instance=index)
return index
def test_blog_page_can_be_created_under_index(blog_index):
post = BlogPage(
title="文章一",
slug="post-1",
published_at=timezone.now(),
intro="摘要一",
)
blog_index.add_child(instance=post)
assert BlogPage.objects.live().descendant_of(blog_index).count() == 1
def test_blog_page_supports_tags(blog_index):
post = BlogPage(
title="文章一",
slug="post-1",
published_at=timezone.now(),
)
blog_index.add_child(instance=post)
post.tags.add("Django", "Wagtail")
post.save()
post.refresh_from_db()
assert {t.name for t in post.tags.all()} == {"Django", "Wagtail"}
def test_blog_index_context_orders_by_published_at_desc(blog_index):
older = BlogPage(
title="较早的文章",
slug="older-post",
published_at=timezone.now() - timezone.timedelta(days=5),
)
blog_index.add_child(instance=older)
newer = BlogPage(
title="较新的文章",
slug="newer-post",
published_at=timezone.now(),
)
blog_index.add_child(instance=newer)
context = blog_index.get_context(request=None)
titles = [p.title for p in context["posts"]]
assert titles == ["较新的文章", "较早的文章"]
def test_blog_index_context_excludes_draft_posts(blog_index):
live_post = BlogPage(
title="已发布文章",
slug="live-post",
published_at=timezone.now(),
)
blog_index.add_child(instance=live_post)
draft_post = BlogPage(
title="草稿文章",
slug="draft-post",
published_at=timezone.now(),
live=False,
)
blog_index.add_child(instance=draft_post)
context = blog_index.get_context(request=None)
titles = [p.title for p in context["posts"]]
assert "已发布文章" in titles
assert "草稿文章" not in titles