76 lines
2.2 KiB
Python
76 lines
2.2 KiB
Python
import pytest
|
|
from rest_framework.test import APIClient
|
|
|
|
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
|
|
|
|
|
|
@pytest.fixture()
|
|
def api_client():
|
|
return APIClient()
|
|
|
|
|
|
@pytest.fixture()
|
|
def owner(db):
|
|
return User.objects.create_user(mobile="09121110001", password="secret123", first_name="Owner")
|
|
|
|
|
|
@pytest.fixture()
|
|
def workspace(owner):
|
|
return Workspace.objects.create(name="Projects", owner=owner)
|
|
|
|
|
|
@pytest.fixture()
|
|
def member(db, workspace):
|
|
user = User.objects.create_user(mobile="09121110002", password="secret123", first_name="Member")
|
|
WorkspaceMembership.objects.create(
|
|
workspace=workspace,
|
|
user=user,
|
|
role=WorkspaceMembership.Role.MEMBER,
|
|
is_active=True,
|
|
)
|
|
return user
|
|
|
|
|
|
@pytest.fixture()
|
|
def clients(workspace):
|
|
first = Client.objects.create(workspace=workspace, name="Acme")
|
|
second = Client.objects.create(workspace=workspace, name="Globex")
|
|
third = Client.objects.create(workspace=workspace, name="Initech")
|
|
return first, second, third
|
|
|
|
|
|
@pytest.fixture()
|
|
def projects(workspace, clients):
|
|
first, second, third = clients
|
|
return [
|
|
Project.objects.create(workspace=workspace, client=first, name="Alpha"),
|
|
Project.objects.create(workspace=workspace, client=second, name="Beta"),
|
|
Project.objects.create(workspace=workspace, client=third, name="Gamma"),
|
|
]
|
|
|
|
|
|
def test_project_list_supports_multi_client_filter(api_client, member, workspace, clients, projects):
|
|
api_client.force_authenticate(user=member)
|
|
first, second, _ = clients
|
|
|
|
response = api_client.get(
|
|
"/api/projects/",
|
|
[
|
|
("workspace", str(workspace.id)),
|
|
("clients", str(first.id)),
|
|
("clients", str(second.id)),
|
|
],
|
|
)
|
|
|
|
assert 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}
|
|
assert result_ids == {str(first.id), str(second.id)}
|