Skip to content

Commit 790ae8a

Browse files
committed
feat: enhance tests for member enrichment function with improved coverage and logging
1 parent c16925e commit 790ae8a

File tree

1 file changed

+49
-3
lines changed

1 file changed

+49
-3
lines changed

backend/tests/groups/test_enrich_members.py

Lines changed: 49 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ async def test_enrich_members_empty_list(self):
8383

8484
@pytest.mark.asyncio
8585
async def test_enrich_members_invalid_object_ids(self):
86-
"""Test enrichment with invalid ObjectIds - covers lines 46-47"""
86+
"""Test enrichment with invalid ObjectIds - covers lines 47, 52, 108-109"""
8787
members = [
8888
{"userId": "invalid_id_123", "role": "admin", "joinedAt": "2023-01-01"},
8989
{"userId": "also_invalid", "role": "member", "joinedAt": "2023-01-02"},
@@ -92,12 +92,20 @@ async def test_enrich_members_invalid_object_ids(self):
9292
mock_db = MagicMock()
9393

9494
with patch.object(self.service, "get_db", return_value=mock_db):
95-
enriched = await self.service._enrich_members_with_user_details(members)
95+
# Patch logger to verify warning is called (covers line 47)
96+
with patch("app.groups.service.logger") as mock_logger:
97+
enriched = await self.service._enrich_members_with_user_details(members)
98+
# Verify logger.warning was called for invalid ObjectIds (line 47)
99+
assert mock_logger.warning.call_count == 2
96100

97-
# Should return fallback members since no valid ObjectIds - covers line 52
101+
# Should return fallback members since no valid ObjectIds (line 52)
98102
assert len(enriched) == 2
103+
# Verify _create_fallback_member output (lines 108-109)
104+
assert enriched[0]["userId"] == "invalid_id_123"
99105
assert "User" in enriched[0]["user"]["name"]
100106
assert enriched[0]["role"] == "admin"
107+
assert enriched[0]["user"]["email"] == "[email protected]"
108+
assert enriched[0]["joinedAt"] == "2023-01-01"
101109

102110
@pytest.mark.asyncio
103111
async def test_enrich_members_member_without_userId(self):
@@ -262,3 +270,41 @@ async def test_enrich_members_batch_query_optimization(self):
262270
assert len(enriched) == 10
263271
for i, member in enumerate(enriched):
264272
assert member["user"]["name"] == f"User {i}"
273+
274+
def test_create_fallback_member_short_user_id(self):
275+
"""Test _create_fallback_member with short user ID - covers lines 108-109"""
276+
member = {"userId": "ab", "role": "member", "joinedAt": "2023-01-01"}
277+
278+
result = self.service._create_fallback_member(member)
279+
280+
# Verify fallback member structure (lines 108-109)
281+
assert result["userId"] == "ab"
282+
assert result["role"] == "member"
283+
assert result["joinedAt"] == "2023-01-01"
284+
assert result["user"]["name"] == "User ab" # Uses the short ID since len < 4
285+
assert result["user"]["email"] == "[email protected]"
286+
assert result["user"]["imageUrl"] is None
287+
288+
def test_create_fallback_member_long_user_id(self):
289+
"""Test _create_fallback_member with long user ID - covers lines 108-109"""
290+
long_id = "abcdefghijklmnop"
291+
member = {"userId": long_id, "role": "admin", "joinedAt": "2023-01-01"}
292+
293+
result = self.service._create_fallback_member(member)
294+
295+
# Verify fallback member structure with last 4 chars
296+
assert result["userId"] == long_id
297+
assert result["role"] == "admin"
298+
assert result["user"]["name"] == "User mnop" # Uses last 4 chars
299+
assert result["user"]["email"] == "[email protected]"
300+
assert result["user"]["imageUrl"] is None
301+
302+
def test_create_fallback_member_no_user_id(self):
303+
"""Test _create_fallback_member when userId is missing"""
304+
member = {"role": "member", "joinedAt": "2023-01-01"} # No userId
305+
306+
result = self.service._create_fallback_member(member)
307+
308+
# Should use "unknown" as fallback
309+
assert result["userId"] == "unknown"
310+
assert result["user"]["name"] == "User nown" # Last 4 chars of "unknown"

0 commit comments

Comments
 (0)