Coverage for modules\hr\tests.py: 100%
24 statements
« prev ^ index » next coverage.py v7.16.0, created at 2026-09-06 17:00 +0800
« prev ^ index » next coverage.py v7.16.0, created at 2026-09-06 17:00 +0800
1import pytest
2from decimal import Decimal
3from modules.authentication.models import Organization, User
4from modules.team.models import TeamMember
5from modules.hr.models import EmployeeProfile
6from modules.hr.services import calculate_withholding_tax, require_hr
7from core.exceptions import PermissionDeniedException
10@pytest.mark.django_db
11class TestHRDomain:
12 def setup_method(self):
13 self.org = Organization.objects.create(name='HR Org', slug='hr-org')
14 self.hr = User.objects.create_user(email='hr@test.local', password='StrongPass123!')
15 TeamMember.objects.create(tenant_id=self.org.id, user=self.hr, role='HR')
17 def test_hr_profile_is_tenant_scoped(self):
18 profile = EmployeeProfile.objects.create(tenant_id=self.org.id, user=self.hr, employee_number='E-001')
19 assert EmployeeProfile.objects.filter(tenant_id=self.org.id).get() == profile
21 def test_progressive_philippine_tax_calculation(self):
22 assert calculate_withholding_tax(Decimal('400000')) == Decimal('0.00')
23 assert calculate_withholding_tax(Decimal('500000')) == Decimal('15000.00')
25 def test_non_hr_cannot_pass_hr_guard(self):
26 member = User.objects.create_user(email='member@test.local', password='StrongPass123!')
27 request = type('Request', (), {'user': member, 'tenant_id': self.org.id})()
28 with pytest.raises(PermissionDeniedException):
29 require_hr(request)