"""notice service 单元测试(回归富文本 content 空值保护)。""" import json from modules.notice.service import notice_service from modules.notice.models import Notice from modules.notice.repository import notice_repo from modules.notice.schemas import NoticeForm def _resp_body(resp): return json.loads(resp.body) def _form(**overrides): data = dict(title="测试通知", source=1, url="https://example.com", status=1, isTop=1, click=0) data.update(overrides) return NoticeForm(**data) def test_add_notice_content_none_saves_null(fake_request, sqlite_db): resp = notice_service.add(fake_request, _form(content=None)) assert _resp_body(resp)["code"] == 0 row = notice_repo.filter(Notice.title == "测试通知").first() assert row is not None assert row.content is None def test_add_notice_plain_text_stored_as_is(fake_request, sqlite_db): resp = notice_service.add(fake_request, _form(title="纯文本通知", content="hello world")) assert _resp_body(resp)["code"] == 0 row = notice_repo.filter(Notice.title == "纯文本通知").first() assert row.content == "hello world" def test_update_notice_content_none_keeps_old(fake_request, sqlite_db): notice_service.add(fake_request, _form(title="保留旧内容", content="old-content")) row = notice_repo.filter(Notice.title == "保留旧内容").first() resp = notice_service.update( fake_request, _form(title="保留旧内容", content=None, id=row.id), ) assert _resp_body(resp)["code"] == 0 assert notice_repo.get_by_id(row.id).content == "old-content"