feat(projects): add project-specific member rates
This commit is contained in:
@@ -4,7 +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
|
||||
from apps.projects.models import Project, ProjectAccess, ProjectUserRate
|
||||
from apps.time_entries.services.rates import resolve_rate
|
||||
from apps.users.models import User
|
||||
from apps.workspaces.models import (
|
||||
@@ -78,6 +78,53 @@ class WorkspaceRateTests(APITestCase):
|
||||
self.assertIsNone(hourly_rate)
|
||||
self.assertEqual(currency, "")
|
||||
|
||||
def test_resolve_rate_prefers_project_user_rate_when_member_has_access(self):
|
||||
WorkspaceUserRate.objects.create(
|
||||
workspace=self.workspace,
|
||||
user=self.member,
|
||||
hourly_rate=Decimal("40.00"),
|
||||
currency="EUR",
|
||||
effective_from=self.project.created_at,
|
||||
is_active=True,
|
||||
)
|
||||
ProjectAccess.objects.create(project=self.project, user=self.member)
|
||||
ProjectUserRate.objects.create(
|
||||
project=self.project,
|
||||
user=self.member,
|
||||
hourly_rate=Decimal("55.00"),
|
||||
currency="USD",
|
||||
effective_from=self.project.created_at,
|
||||
is_active=True,
|
||||
)
|
||||
|
||||
hourly_rate, currency = resolve_rate(self.member, self.project)
|
||||
|
||||
self.assertEqual(hourly_rate, Decimal("55.00"))
|
||||
self.assertEqual(currency, "USD")
|
||||
|
||||
def test_resolve_rate_ignores_project_user_rate_without_access(self):
|
||||
WorkspaceUserRate.objects.create(
|
||||
workspace=self.workspace,
|
||||
user=self.member,
|
||||
hourly_rate=Decimal("40.00"),
|
||||
currency="EUR",
|
||||
effective_from=self.project.created_at,
|
||||
is_active=True,
|
||||
)
|
||||
ProjectUserRate.objects.create(
|
||||
project=self.project,
|
||||
user=self.member,
|
||||
hourly_rate=Decimal("55.00"),
|
||||
currency="USD",
|
||||
effective_from=self.project.created_at,
|
||||
is_active=True,
|
||||
)
|
||||
|
||||
hourly_rate, currency = resolve_rate(self.member, self.project)
|
||||
|
||||
self.assertEqual(hourly_rate, Decimal("40.00"))
|
||||
self.assertEqual(currency, "EUR")
|
||||
|
||||
def test_admin_can_manage_workspace_user_rates(self):
|
||||
self.client.force_authenticate(user=self.admin)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user