Skip to content

Commit 73bee99

Browse files
feat: ensure team creator is added as a member when creating a team (#153)
* feat: ensure team creator is added as a member when creating a team * feat: improve mock user creation in team service tests for clarity --------- Co-authored-by: Amit Prakash <[email protected]>
1 parent e89ce55 commit 73bee99

File tree

3 files changed

+57
-0
lines changed

3 files changed

+57
-0
lines changed

todo/services/team_service.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,17 @@ def create_team(cls, dto: CreateTeamDTO, created_by_user_id: str) -> CreateTeamR
7070
)
7171
user_teams.append(user_team)
7272

73+
# Always add the creator as a member if not already in member_ids or as POC
74+
if created_by_user_id not in member_ids and created_by_user_id != dto.poc_id:
75+
user_team = UserTeamDetailsModel(
76+
user_id=PyObjectId(created_by_user_id),
77+
team_id=created_team.id,
78+
role_id=DEFAULT_ROLE_ID,
79+
created_by=PyObjectId(created_by_user_id),
80+
updated_by=PyObjectId(created_by_user_id),
81+
)
82+
user_teams.append(user_team)
83+
7384
# Create all user-team relationships
7485
if user_teams:
7586
UserTeamDetailsRepository.create_many(user_teams)

todo/tests/unit/services/test_team_service.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,3 +94,37 @@ def test_get_user_teams_repository_error(self, mock_get_by_user_id):
9494
TeamService.get_user_teams(self.user_id)
9595

9696
self.assertIn("Failed to get user teams", str(context.exception))
97+
98+
@patch("todo.services.team_service.TeamRepository.create")
99+
@patch("todo.services.team_service.UserTeamDetailsRepository.create_many")
100+
@patch("todo.dto.team_dto.UserRepository.get_by_id")
101+
def test_creator_always_added_as_member(self, mock_user_get_by_id, mock_create_many, mock_team_create):
102+
"""Test that the creator is always added as a member when creating a team"""
103+
# Patch user lookup to always return a mock user
104+
mock_user = type(
105+
"User",
106+
(),
107+
{"id": None, "name": "Test User", "email_id": "[email protected]", "created_at": None, "updated_at": None},
108+
)()
109+
mock_user_get_by_id.return_value = mock_user
110+
# Creator is not in member_ids or as POC
111+
creator_id = "507f1f77bcf86cd799439099"
112+
member_ids = ["507f1f77bcf86cd799439011"]
113+
poc_id = "507f1f77bcf86cd799439012"
114+
from todo.dto.team_dto import CreateTeamDTO
115+
116+
dto = CreateTeamDTO(
117+
name="Team With Creator",
118+
description="desc",
119+
member_ids=member_ids,
120+
poc_id=poc_id,
121+
)
122+
# Mock team creation
123+
mock_team = self.team_model
124+
mock_team_create.return_value = mock_team
125+
# Call create_team
126+
TeamService.create_team(dto, creator_id)
127+
# Check that creator_id is in the user_team relationships
128+
user_team_objs = mock_create_many.call_args[0][0]
129+
all_user_ids = [str(obj.user_id) for obj in user_team_objs]
130+
self.assertIn(creator_id, all_user_ids)

todo/views/team.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,18 @@ def get(self, request: Request):
4242
data=fallback_response.model_dump(mode="json"), status=status.HTTP_500_INTERNAL_SERVER_ERROR
4343
)
4444

45+
@extend_schema(
46+
operation_id="create_team",
47+
summary="Create a new team",
48+
description="Create a new team with the provided details. The creator is always added as a member, even if not in member_ids or as POC.",
49+
tags=["teams"],
50+
request=CreateTeamSerializer,
51+
responses={
52+
201: OpenApiResponse(response=CreateTeamResponse, description="Team created successfully"),
53+
400: OpenApiResponse(description="Bad request - validation error"),
54+
500: OpenApiResponse(description="Internal server error"),
55+
},
56+
)
4557
def post(self, request: Request):
4658
"""
4759
Create a new team.

0 commit comments

Comments
 (0)