diff --git a/todo/repositories/task_repository.py b/todo/repositories/task_repository.py index 10b97363..eb27c0b2 100644 --- a/todo/repositories/task_repository.py +++ b/todo/repositories/task_repository.py @@ -78,16 +78,26 @@ def _get_assigned_task_ids_for_user(cls, user_id: str) -> List[ObjectId]: direct_task_ids = [assignment.task_id for assignment in direct_assignments] # Get teams where user is a member - from todo.repositories.team_repository import UserTeamDetailsRepository + from todo.repositories.team_repository import UserTeamDetailsRepository, TeamRepository user_teams = UserTeamDetailsRepository.get_by_user_id(user_id) team_ids = [str(team.team_id) for team in user_teams] - # Get tasks assigned to those teams + # Get tasks assigned to those teams (only if user is POC) team_task_ids = [] - for team_id in team_ids: - team_assignments = TaskAssignmentRepository.get_by_assignee_id(team_id, "team") - team_task_ids.extend([assignment.task_id for assignment in team_assignments]) + if team_ids: + # Get teams where user is POC + poc_teams = TeamRepository.get_collection().find( + {"_id": {"$in": [ObjectId(team_id) for team_id in team_ids]}, "is_deleted": False, "poc_id": user_id} + ) + poc_team_ids = [str(team["_id"]) for team in poc_teams] + + # Get team assignments for POC teams + if poc_team_ids: + team_assignments = TaskAssignmentRepository.get_collection().find( + {"assignee_id": {"$in": poc_team_ids}, "user_type": "team", "is_active": True} + ) + team_task_ids = [ObjectId(assignment["task_id"]) for assignment in team_assignments] return direct_task_ids + team_task_ids diff --git a/todo/tests/unit/views/test_team.py b/todo/tests/unit/views/test_team.py index c78f83cd..b733e374 100644 --- a/todo/tests/unit/views/test_team.py +++ b/todo/tests/unit/views/test_team.py @@ -3,7 +3,7 @@ from rest_framework.test import APIClient from rest_framework import status -from todo.views.team import TeamListView, JoinTeamByInviteCodeView +from todo.views.team import TeamListView, JoinTeamByInviteCodeView, RemoveTeamMemberView from todo.dto.responses.get_user_teams_response import GetUserTeamsResponse from todo.dto.team_dto import TeamDTO from datetime import datetime, timezone @@ -138,30 +138,47 @@ def test_join_team_by_invite_code_validation_error(self): class RemoveTeamMemberViewTests(TestCase): def setUp(self): - self.client = APIClient() + self.view = RemoveTeamMemberView() self.team_id = "507f1f77bcf86cd799439012" self.user_id = "507f1f77bcf86cd799439011" - self.url = f"/teams/{self.team_id}/members/{self.user_id}/" + self.mock_user_id = "507f1f77bcf86cd799439013" @patch("todo.views.team.TeamService.remove_member_from_team") def test_remove_member_success(self, mock_remove): mock_remove.return_value = True - response = self.client.delete(self.url) + + mock_request = MagicMock() + mock_request.user_id = self.mock_user_id + + response = self.view.delete(mock_request, self.team_id, self.user_id) + self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT) - mock_remove.assert_called_once_with(user_id=self.user_id, team_id=self.team_id) + mock_remove.assert_called_once_with( + user_id=self.user_id, team_id=self.team_id, removed_by_user_id=self.mock_user_id + ) @patch("todo.views.team.TeamService.remove_member_from_team") def test_remove_member_not_found(self, mock_remove): from todo.services.team_service import TeamService mock_remove.side_effect = TeamService.TeamOrUserNotFound() - response = self.client.delete(self.url) + + mock_request = MagicMock() + mock_request.user_id = self.mock_user_id + + response = self.view.delete(mock_request, self.team_id, self.user_id) + self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) self.assertIn("not found", response.data["detail"]) @patch("todo.views.team.TeamService.remove_member_from_team") def test_remove_member_generic_error(self, mock_remove): mock_remove.side_effect = Exception("Something went wrong") - response = self.client.delete(self.url) + + mock_request = MagicMock() + mock_request.user_id = self.mock_user_id + + response = self.view.delete(mock_request, self.team_id, self.user_id) + self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) self.assertIn("Something went wrong", response.data["detail"])