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

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 

8 

9 

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') 

16 

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 

20 

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') 

24 

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)