diff --git a/backend/apps/api/rest/v0/chapter.py b/backend/apps/api/rest/v0/chapter.py index 863a60784d..948d85ed4e 100644 --- a/backend/apps/api/rest/v0/chapter.py +++ b/backend/apps/api/rest/v0/chapter.py @@ -41,8 +41,14 @@ class ChapterDetail(ChapterBase): """Detail schema for Chapter (used in single item endpoints).""" country: str + leader_names: list[str] region: str + @staticmethod + def resolve_leader_names(obj): + """Resolve leader names.""" + return [leader.member_name for leader in obj.entity_leaders] + class ChapterError(Schema): """Chapter error schema.""" diff --git a/backend/apps/api/rest/v0/project.py b/backend/apps/api/rest/v0/project.py index 8583ced431..84baebc53f 100644 --- a/backend/apps/api/rest/v0/project.py +++ b/backend/apps/api/rest/v0/project.py @@ -40,6 +40,12 @@ class ProjectDetail(ProjectBase): """Detail schema for Project (used in single item endpoints).""" description: str + leader_names: list[str] + + @staticmethod + def resolve_leader_names(obj): + """Resolve leader names.""" + return [leader.member_name for leader in obj.entity_leaders] class ProjectError(Schema): diff --git a/backend/tests/apps/api/rest/v0/chapter_test.py b/backend/tests/apps/api/rest/v0/chapter_test.py index 0a29d4a53f..ab4460dfb6 100644 --- a/backend/tests/apps/api/rest/v0/chapter_test.py +++ b/backend/tests/apps/api/rest/v0/chapter_test.py @@ -31,11 +31,16 @@ ], ) def test_chapter_serializer_validation(chapter_data): + class MockEntityMember: + def __init__(self, name): + self.member_name = name + class MockChapter: def __init__(self, data): for key, value in data.items(): setattr(self, key, value) self.nest_key = data["key"] + self.entity_leaders = [MockEntityMember("Alice"), MockEntityMember("Bob")] chapter = ChapterDetail.from_orm(MockChapter(chapter_data)) @@ -44,6 +49,7 @@ def __init__(self, data): assert chapter.key == chapter_data["key"] assert chapter.latitude == chapter_data["latitude"] assert chapter.longitude == chapter_data["longitude"] + assert chapter.leader_names == ["Alice", "Bob"] assert chapter.name == chapter_data["name"] assert chapter.region == chapter_data["region"] assert chapter.updated_at == datetime.fromisoformat(chapter_data["updated_at"]) diff --git a/backend/tests/apps/api/rest/v0/project_test.py b/backend/tests/apps/api/rest/v0/project_test.py index 112b41fb5c..309a6dae84 100644 --- a/backend/tests/apps/api/rest/v0/project_test.py +++ b/backend/tests/apps/api/rest/v0/project_test.py @@ -27,17 +27,23 @@ ], ) def test_project_serializer_validation(project_data): + class MockEntityMember: + def __init__(self, name): + self.member_name = name + class MockProject: def __init__(self, data): for key, value in data.items(): setattr(self, key, value) self.nest_key = data["key"] + self.entity_leaders = [MockEntityMember("Alice"), MockEntityMember("Bob")] project = ProjectDetail.from_orm(MockProject(project_data)) assert project.created_at == datetime.fromisoformat(project_data["created_at"]) assert project.description == project_data["description"] assert project.key == project_data["key"] + assert project.leader_names == ["Alice", "Bob"] assert project.level == project_data["level"] assert project.name == project_data["name"] assert project.updated_at == datetime.fromisoformat(project_data["updated_at"])