from datetime import date, timedelta from io import BytesIO from pathlib import Path from PIL import Image from starlette.datastructures import Headers, UploadFile from app.schemas.journal import JournalCategoryCreate, JournalEntryCreate, JournalEntryUpdate from app.services import journal_service def _make_category(db_session, user_id, name="일상", color=None): return journal_service.create_category(db_session, user_id, JournalCategoryCreate(name=name, color=color)) def _make_entry(db_session, user_id, category_id, entry_date=None, content="오늘의 기록", tags=None, **overrides): data = JournalEntryCreate( category_id=category_id, entry_date=entry_date or date.today(), title=overrides.pop("title", None), content=content, moods=overrides.pop("moods", []), tags=tags or [], ) return journal_service.create_entry(db_session, user_id, data) def _png_bytes(size=(800, 600)) -> bytes: buf = BytesIO() Image.new("RGB", size, "red").save(buf, format="PNG") return buf.getvalue() def _upload(filename: str, content_type: str, data: bytes) -> UploadFile: return UploadFile(file=BytesIO(data), filename=filename, headers=Headers({"content-type": content_type})) # ---- 카테고리 ---- def test_ensure_default_category_creates_once(db_session, test_user): first = journal_service.ensure_default_category(db_session, test_user.id) assert first.name == journal_service.DEFAULT_CATEGORY_NAME assert first.content_template == journal_service.DEFAULT_CATEGORY_TEMPLATE second = journal_service.ensure_default_category(db_session, test_user.id) assert second.id == first.id assert len(journal_service.list_categories(db_session, test_user.id)) == 1 def test_default_category_template_renders_as_headers_and_lists_not_bare_dashes(db_session, test_user): from app.markdown_utils import render_markdown category = journal_service.ensure_default_category(db_session, test_user.id) html = render_markdown(category.content_template) # "-"에 뒤 공백이 없으면 markdown이 목록으로 안 잡고 그냥 "

-

"로 렌더링해버리는 # 회귀가 있었다 — 다섯 항목 전부 실제