feat(workspaces): add current user rates endpoint
This commit is contained in:
@@ -4,6 +4,7 @@ from django.core.cache import cache
|
||||
from django.test import TestCase
|
||||
from rest_framework.test import APITestCase
|
||||
|
||||
from apps.projects.models import Project, ProjectAccess, ProjectUserRate
|
||||
from apps.users.models import User
|
||||
from apps.workspaces.api.permissions import (
|
||||
CanWorkspaceManageMembers,
|
||||
@@ -11,7 +12,7 @@ from apps.workspaces.api.permissions import (
|
||||
IsWorkspaceMember,
|
||||
IsWorkspaceOwner,
|
||||
)
|
||||
from apps.workspaces.models import Workspace, WorkspaceMembership
|
||||
from apps.workspaces.models import PriceUnit, Workspace, WorkspaceMembership, WorkspaceUserRate
|
||||
|
||||
|
||||
class WorkspacePermissionTests(TestCase):
|
||||
@@ -189,3 +190,48 @@ class WorkspaceMembershipCacheTests(APITestCase):
|
||||
target = next(item for item in fresh_response.data["items"] if item["id"] == str(self.membership.id))
|
||||
self.assertEqual(target["role"], WorkspaceMembership.Role.GUEST)
|
||||
self.assertFalse(target["is_active"])
|
||||
|
||||
|
||||
class WorkspaceMyRatesApiTests(APITestCase):
|
||||
@classmethod
|
||||
def setUpTestData(cls):
|
||||
cls.owner = User.objects.create_user(mobile="09127770101", password="secret123")
|
||||
cls.member = User.objects.create_user(mobile="09127770102", password="secret123")
|
||||
cls.workspace = Workspace.objects.create(name="Rates View", owner=cls.owner)
|
||||
WorkspaceMembership.objects.create(
|
||||
workspace=cls.workspace,
|
||||
user=cls.member,
|
||||
role=WorkspaceMembership.Role.MEMBER,
|
||||
is_active=True,
|
||||
)
|
||||
PriceUnit.objects.create(code="USD", name="US Dollar", local_name="Dollar", symbol="$")
|
||||
cls.project = Project.objects.create(workspace=cls.workspace, name="Mobile App")
|
||||
ProjectAccess.objects.create(project=cls.project, user=cls.member)
|
||||
WorkspaceUserRate.objects.create(
|
||||
workspace=cls.workspace,
|
||||
user=cls.member,
|
||||
hourly_rate="10.00",
|
||||
currency="USD",
|
||||
effective_from=cls.workspace.created_at,
|
||||
is_active=True,
|
||||
)
|
||||
ProjectUserRate.objects.create(
|
||||
project=cls.project,
|
||||
user=cls.member,
|
||||
hourly_rate="18.00",
|
||||
currency="USD",
|
||||
effective_from=cls.workspace.created_at,
|
||||
is_active=True,
|
||||
)
|
||||
|
||||
def test_member_can_view_own_workspace_and_project_rates(self):
|
||||
self.client.force_authenticate(user=self.member)
|
||||
|
||||
response = self.client.get(f"/api/workspaces/{self.workspace.id}/my-rates/")
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertEqual(response.data["workspace_rate"]["hourly_rate"], "10.00")
|
||||
self.assertEqual(response.data["project_override_count"], 1)
|
||||
self.assertEqual(response.data["workspace_fallback_project_count"], 0)
|
||||
self.assertEqual(response.data["project_rates"][0]["project"]["name"], "Mobile App")
|
||||
self.assertEqual(response.data["project_rates"][0]["rate"]["hourly_rate"], "18.00")
|
||||
|
||||
Reference in New Issue
Block a user