feat: add like/unlike toggle on blog posts with per-user tracking
- PostLike domain entity (post_id, liked_by) with BaseEntity integration
- Post entity: add like_count field (default 0) and to_dict serialization
- PostRepository interface: add get_like, add_like, remove_like methods
- TogglePostLikeUseCase: toggle logic (like → unlike, unlike → like)
- PostResponseDTO/PostResponseSchema: add like_count field
- PostLikeORM model with FK to posts and cascade delete
- SQLAlchemyPostRepository: implement like query/add/remove with ORM mapping
- DI provider registration for TogglePostLikeUseCase
- API endpoint POST /api/v1/posts/{id}/like (auth required)
- Unit tests: PostLike entity, Post.like_count, TogglePostLikeUseCase (7 tests)
- API tests: POST /api/v1/posts/{id}/like (4 tests)
- Test model files: FEATURE_LIKES.md, TEST_MODEL.md updated
This commit is contained in:
@@ -128,6 +128,19 @@ class TestPost:
|
||||
assert "created_at" in data
|
||||
assert "updated_at" in data
|
||||
|
||||
def test_like_count_defaults_to_zero(self) -> None:
|
||||
"""Test that a new post has like_count defaulting to 0.
|
||||
|
||||
TC-UNIT-827: Positive — like_count defaults to zero on creation.
|
||||
"""
|
||||
post = Post.create(
|
||||
title_str="Test Post",
|
||||
content_str="This is test content that is long enough",
|
||||
author_id="user-123",
|
||||
)
|
||||
|
||||
assert post.like_count == 0
|
||||
|
||||
def test_base_entity_eq_and_hash(self) -> None:
|
||||
"""Test BaseEntity equality and hash directly."""
|
||||
from app.domain.entities.base import BaseEntity
|
||||
|
||||
Reference in New Issue
Block a user