Coverage for modules\team\tests.py: 100%

30 statements  

« prev     ^ index     » next       coverage.py v7.16.0, created at 2026-09-06 17:00 +0800

1import pytest 

2from django.utils import timezone 

3from modules.authentication.models import Organization, User 

4from modules.team.models import AttendanceLog, TeamMember 

5from modules.team.schemas import LocalUserIn 

6from modules.team.services import TeamService 

7 

8 

9@pytest.mark.django_db 

10class TestAttendanceLog: 

11 def setup_method(self): 

12 self.org = Organization.objects.create(name='Test Org', slug='test-org') 

13 self.user = User.objects.create_user( 

14 email='employee@test.local', 

15 password='StrongPass123!', 

16 first_name='Ada', 

17 last_name='Lovelace', 

18 ) 

19 

20 def test_clock_in_and_clock_out_flow(self): 

21 start = timezone.now() 

22 attendance = AttendanceLog.objects.create( 

23 tenant_id=self.org.id, 

24 user=self.user, 

25 check_in=start, 

26 status='CLOCKED_IN', 

27 ) 

28 

29 assert attendance.check_out is None 

30 assert attendance.status == 'CLOCKED_IN' 

31 

32 attendance.check_out = timezone.now() 

33 attendance.status = 'CLOCKED_OUT' 

34 attendance.save() 

35 

36 assert attendance.status == 'CLOCKED_OUT' 

37 assert attendance.check_out is not None 

38 

39 

40@pytest.mark.django_db 

41class TestLocalUserLink: 

42 def test_local_user_can_link_external_email(self): 

43 org = Organization.objects.create(name='Users Org', slug='users-org') 

44 member = TeamService.create_local_user( 

45 org.id, 

46 LocalUserIn( 

47 local_email='worker@fudo.local', 

48 external_email='worker@example.com', 

49 password='StrongPass123!', 

50 first_name='Worker', 

51 role='MEMBER', 

52 ), 

53 ) 

54 

55 user = member.user 

56 assert user.email == 'worker@fudo.local' 

57 assert user.external_email == 'worker@example.com' 

58 assert TeamMember.objects.filter(tenant_id=org.id, user=user).exists()