from rest_framework.test import APITestCase from apps.clients.models import Client from apps.projects.models import Project from apps.users.models import User from apps.workspaces.models import Workspace, WorkspaceMembership class ProjectViewTests(APITestCase): @classmethod def setUpTestData(cls): cls.owner = User.objects.create_user( mobile="09121110001", password="secret123", first_name="Owner", ) cls.workspace = Workspace.objects.create(name="Projects", owner=cls.owner) cls.member = User.objects.create_user( mobile="09121110002", password="secret123", first_name="Member", ) WorkspaceMembership.objects.create( workspace=cls.workspace, user=cls.member, role=WorkspaceMembership.Role.MEMBER, is_active=True, ) cls.first_client = Client.objects.create(workspace=cls.workspace, name="Acme") cls.second_client = Client.objects.create(workspace=cls.workspace, name="Globex") cls.third_client = Client.objects.create(workspace=cls.workspace, name="Initech") Project.objects.create( workspace=cls.workspace, client=cls.first_client, name="Alpha", ) Project.objects.create( workspace=cls.workspace, client=cls.second_client, name="Beta", ) Project.objects.create( workspace=cls.workspace, client=cls.third_client, name="Gamma", ) def test_project_list_supports_multi_client_filter(self): self.client.force_authenticate(user=self.member) response = self.client.get( "/api/projects/", [ ("workspace", str(self.workspace.id)), ("clients", str(self.first_client.id)), ("clients", str(self.second_client.id)), ], ) self.assertEqual(response.status_code, 200) items = ( response.data if isinstance(response.data, list) else response.data.get("results") or response.data.get("items", []) ) result_ids = {str(item["client"]["id"]) for item in items} self.assertEqual( result_ids, {str(self.first_client.id), str(self.second_client.id)}, )